Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >HDFS文件系统介绍(1)

HDFS文件系统介绍(1)

作者头像
大数据梦想家
发布于 2021-01-22 08:05:50
发布于 2021-01-22 08:05:50
63900
代码可运行
举报
运行总次数:0
代码可运行

Hadoop(CDH)分布式环境搭建(简单易懂,绝对有效!)这篇博客中,小菌在最后为大家带来了HDFS的初体验。一些大数据专业的粉丝私信小菌希望能再详细讲讲HDFS的相关内容。于是本次分享,小菌将为大家带来HDFS的文件系统介绍。 在介绍文件系统之前我们需要先弄清楚HDFS的作用。我们都知道HDFS是Hadoop的一个核心组件,那在Hadoop中HDFS扮演着怎样的一个角色呢?相信通过下面这张图小伙伴们就一目了然了!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
总结:
Hadoop的主要组成部分:
   Hadoop  HDFS:一个高可靠、高吞吐量的分布式文件系统,对海量数据的存储。
   Hadoop  MapReduce:一个分布式的资源调度和离线并行计算框架。
   Hadoop  Yarn:基于HDFS,用于作业调度和集群资源管理的框架。

哈哈有的小伙伴们可能都等不及了,那我们接着就开始聊HDFS(o´▽`o)

HDFS基本介绍

HDFS 是 Hadoop Distribute File System 的简称,意为:Hadoop 分布式文件系统。是 Hadoop 核心组件之一,作为最底层的分布式存储服务而存在。 分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。

对HDFS文件系统的理解: 将多个节点上的容量汇总到一起,拼接成一个大的文件系统,在一个节点上传数据,在其他的节点上都能够访问使用!

HDFS使用MasterSlave结构对集群进行管理。一般一个 HDFS 集群只有一个 Namenode 和一定数目的Datanode 组成。Namenode 是 HDFS 集群主节点,Datanode 是 HDFS 集群从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。 为了让大家对Master和Slave结构和Namenode,DataNode有更好的理解,小菌为大家准备了几张生动形象的图片供大家参阅!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
总结:
   NameNode(Master)管理者 - 只负责管理,管理集群内各个节点。
   SecondaryNameNode 辅助管理 – 只负责辅助NameNode管理工作。
   DataNode(Slave) 工作者,是负责工作,周期向NameNode汇报,进行读写数据。


1)HDFS集群包括,NameNode和DataNode以及Secondary Namenode。
2)NameNode负责管理整个文件系统的`元数据`,以及每一个路径(文件)所对应的数据块信息。
3)DataNode 负责管理用户的文件数据块,每一个数据块都可以在多个datanode上存储多个副本。
4)Secondary NameNode用来监控HDFS状态的辅助后台程序,每隔一段时间获取HDFS元数据的快照。最主要作用是辅助namenode管理元数据信息

HDFS分块存储

hdfs将所有的文件全部抽象成为block块来进行存储,不管文件大小,全部一视同仁都是以block块的统一大小和形式进行存储,方便我们的分布式文件系统对文件的管理。

所有的文件都是以block块的方式存放在HDFS文件系统当中,在Hadoop1当中,文件的block块默认大小是64M,Hadoop2当中,文件的block块大小默认是128M,block块的大小可以通过hdfs-site.xml当中的配置文件进行指定。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 <property>
        <name>dfs.block.size</name>
        <value>块大小 以字节为单位</value>//只写数值就可以
    </property>

注意: 如果在面试的时候,HR问你这个问题,你该如何回答? 一个文件100M,上传到HDFS占用几个快?一个块128M,剩余的28M怎么办? answer: 事实上,128只是个数字,数据超过128M,便进行切分,如果没有超过128M,就不用切分,有多少算多少,不足128M的也是一个块。这个块的大小就是100M,没有剩余28M这个概念。 这可是一道很容易出错的面试题,大家一定要记清楚哦~

抽象成数据块的好处

为什么HDFS要将数据抽象成数据块呢?让我们一起来看看吧~

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
1.一个文件有可能大于集群中任意一个磁盘 
 20T/128 = xxx块,这些block块属于一个文件
2.使用块抽象而不是文件,可以简化存储子系统。
3.块非常适合用于数据备份进而提供数据容错能力和可用性

通常DataNode从磁盘中读取块,但对于访问频繁的文件,其对应的块可能被显示的缓存在DataNode的内存中,以堆外块缓存的形式存在。默认情况下,一个块仅缓存在一个DataNode的内存中,当然可以针对每个文件配置DataNode的数量。作业调度器通过在缓存块的DataNode上运行任务,可以利用块缓存的优势提高读操作的性能

HDFS副本机制

HDFS视硬件错误为常态,硬件服务器随时有可能发生故障。 为了容错,文件的所有 block 都会有副本。每个文件的 block 大小和副本系数都是可配置的。应用程序可以指定某个文件的副本数目。副本系数可以在文件创建的时候指定,也可以在之后改变。 数据副本默认保存三个副本,我们可以更改副本数以提高数据的安全性 在hdfs-site.xml当中修改以下配置属性,即可更改文件的副本数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<property>
      <name>dfs.replication</name>
      #  这里填写副本数,修改完毕之后记得重启集群生效
      <value>3</value>
</property>

低版本Hadoop副本节点选择

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
第一个副本在client所处的节点上。如果客户端在集群外,随机选一个。
第二个副本和第一个副本位于不相同机架的随机节点上。
第三个副本和第二个副本位于相同机架,节点随机。

Hadoop2.7.2副本节点选择(掌握!)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
`	第一个副本在client所处的节点上。如果客户端在集群外,随机选一个。
	第二个副本和第一个副本位于相同机架,随机节点。
	第三个副本位于不同机架,随机节点。`

名字空间(NameSpace)

HDFS 支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、删除、移动或重命名文件。 Namenode 负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode 记录下来。 HDFS 会给客户端提供一个统一的目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

Namenode 功能

我们把目录结构及文件分块位置信息叫做元数据。1.Namenode负维护整个hdfs文件系统的目录树结构,以及每一个文件所对应的 block 块信息(block 的id,及所在的datanode 服务器)。

2.Namenode节点负责确定指定的文件块到具体的Datanode结点的映射关系。在客户端与数据节点之间共享数据。

3.管理Datanode结点的状态报告,包括Datanode结点的健康状态报告和其所在结点上数据块状态报告,以便能够及时处理失效的数据结点。

Datanode功能

1.文件的各个 block 的具体存储管理由 datanode 节点承担。每一个 block 都可以在多个datanode 上。Datanode 需要定时向 Namenode 汇报自己持有的 block信息。 存储多个副本(副本数量也可以通过参数设置 dfs.replication,默认是 3)。

2.向Namenode结点报告状态。每个Datanode结点会周期性地向Namenode发送心跳信号和文件块状态报告。

心跳是每3秒一次,心跳返回结果带有namenode给该datanode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个datanode的心跳,则认为该节点不可用。 DataNode启动后向namenode注册,通过后,周期性(1小时)的向namenode上报所有的块信息。

3.执行数据的流水线复制。当文件系统客户端从Namenode服务器进程获取到要进行复制的数据块列表后,完成文件块及其块副本的流水线复制。

一个数据块在datanode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

总结

1.对HDFS文件系统容量的理解 将多个节点上的容量汇总到一起,拼接成一个大的文件系统,在一个节点上传数据,在其他的节点上都能够访问使用

2.Namenode的作用 1.维护,管理文件系统的名字空间(元数据信息) 2.负责确定指定文件块到具体的DataNode节点的映射关系 3.维护管理DataNode上报的心跳信息

3.DataNode的作用 1.负责工作,进行读写数据(响应的是客户端)。 2.周期性地向NameNode汇报(数据块的信息,校验和)。 3.负责管理用户的文件数据块(一个大的数据拆分成多个小的数据块),执行流水线的复制!

4.Secondary NameNode在HDFS中是什么作用,他能不能替代NameNode? Secondary NameNode主要作用是辅助namenode管理元数据信息,负责辅助NameNode管理工作。他不能替代NameNode

5.HDFS副本的存放机制 a.第一份数据存放在客户端 b.第二份副本存放的位置与第一份数据在同一机架中,且不再同一节点,按照一定的规则找到一个节点存放 c.第三个副本存放的位置是与第一第二分数据副本不再同一机架上,且逻辑与存放副本1和副本2的逻辑距离最近的机架上,按照一定的规则找到一个节点存放

6.hadoop的组成部分有什么? a.HDFS:海量数据的存储 b.MapReduce:海量数据的计算 c.YARN:资源调度

本次的分享就到这里了,喜欢的小伙伴们不要忘了点赞哟(^U^)ノ~YO

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/11/03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python实现定时任务的几种方法
该方法能够执行固定间隔时间的任务,时间间隔由time.sleep()的睡眠时间指定。
Steve Wang
2021/12/20
3.9K0
Python 定时任务的实现方式
目前所在的项目组需要经常执行一些定时任务,之前都是用 Node.JS 的 cron来实现 schedule job。可是这次需要连接不同的 DB,而且实现的逻辑也有些许不同,于是选择使用 Python 的定时器。
李振
2021/11/26
1.6K0
Python 定时任务的实现方式
Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务
  看代码,定义一个函数,然后定义一个scheduler类型,添加一个job,然后执行,就可以了,代码是不是超级简单,而且非常清晰。看看结果吧。
用户1214487
2018/07/31
4.8K0
Python任务调度模块 – APScheduler,Flask-APScheduler实现定时任务
Python定时任务(下)
上篇文章,我们了解到有三种办法能实现定时任务,但是都无法做到循环执行定时任务。因此,需要一个能够担当此重任的库。它就是 APScheduler。
猴哥yuri
2018/08/16
2K0
Python定时任务
1、第一种办法是最简单又最暴力。那就是在一个死循环中,使用线程睡眠函数 sleep()。
周小董
2019/03/25
5.8K0
Python定时任务
python定时任务最强框架APScheduler详细教程
上次测试女神听了我的建议,已经做好了要给项目添加定时任务的决定了。但是之前提供的四种方式中,她不知道具体选择哪一个。为了和女神更近一步,我把我入行近10年收藏的干货免费拿出来分享给女神,希望女神凌晨2点再找我的时候,不再是因为要给他调程序了。
无涯WuYa
2020/07/15
8.3K0
python定时任务最强框架APScheduler详细教程
高效定时任务处理:深入学习Python中APScheduler库的奥秘
APScheduler是Python中一个强大的第三方库,用于在后台执行定时任务。它允许我们根据设定的时间间隔、日期规则或特定时间来执行任务,适用于定时执行脚本、定时发送邮件、定时处理数据等场景。APScheduler的功能使得在Python中实现定时任务变得非常简单和高效。本文将从入门到精通地介绍APScheduler库的使用方法,带你掌握在Python中实现定时任务的技巧。
子午Python
2023/08/14
3.3K0
Python定时任务框架之Apscheduler 案例分享
  前面已经讲过Celery做定时任务的场景,现在分享另一个框架Apscheduler。Apscheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。同时,它还支持异步执行、后台执行调度任务。本人小小的建议是一般项目用APScheduler,因为不用像Celery那样再单独启动worker、beat进程,而且API也很简洁。
全栈测试开发日记
2023/02/02
1.8K0
Python定时任务框架之Apscheduler 案例分享
Python下定时任务框架APSched
今天准备实现一个功能需要用到定时执行任务,所以就看到了Python的一个定时任务框架APScheduler,试了一下感觉还不错。
py3study
2020/01/08
1.5K0
轻量级python定时器apscheduler
cron也有缺点: 1、不适合复杂的定时任务 2、定时任务修改,需要重启crontab管理 3、定时任务,没有状态存储,也不是知道是否执行了
测试加
2022/04/27
1.1K0
轻量级python定时器apscheduler
Python定时任务神器-APScheduler
但是这些定时任务库都只是提供了简答的,或者只支持静态的定时任务。而对于需要复杂定时功能,或者动态注册定时任务的场景,则无法满足。
上帝De助手
2019/09/17
3.1K0
Python中定时任务框架APScheduler入门
如果对Python的环境搭建及模块安装还不熟悉,可以看看我写的另一篇博客 Python环境搭建及模块安装 。
Qwe7
2022/03/17
9700
python定时模块:apscheduler
其中 BlockingScheduler是阻塞性的调度器,是最基本的调度器,下面调用 start方法就会阻塞当前进程,所以如果你的程序除了调度进程没有其他后台进程,那么是可以是否的,否则这个调度器会阻塞你程序的正常执行。
悟乙己
2021/12/07
9330
python定时模块:apscheduler
Flask 学习-86.Flask-APScheduler 创建定时任务
Flask-APScheduler是根据APScheduler编写的一个flask模块,它提供了API管理任务。
上海-悠悠
2023/01/03
2.2K0
Apscheduler时间调度程序——python定时任务
APScheduler的全称是Advanced Python Scheduler。它是一个轻量级的 Python 定时任务调度框架。APScheduler 支持三种调度任务:固定时间间隔,固定时间点(日期),Linux 下的 Crontab 命令。同时,它还支持异步执行、后台执行调度任务。
SingYi
2022/07/14
1.2K0
Python任务调度模块APSched
官网文档:http://apscheduler.readthedoc... API:http://apscheduler.readthedoc...
py3study
2020/01/06
1.1K0
【Python】APScheduler简介
APScheduler,全称是_Advanced Python Scheduler_,具体的介绍可以看PyPI或者readthedocs的文档介绍,这篇 blog 主要是翻译User Guide一节的主要内容,不过惯例还是先简单介绍一下这个库特别的地方。
用户5522200
2020/05/11
2.8K0
python定时任务:apscheduler的使用
APScheduler基于Quartz的一个Python定时任务框架,实现了Quartz的所有功能,使用起来十分方便。提供了基于日期、固定时间间隔以及crontab类型的任务,并且可以持久化任务。基于这些功能,我们可以很方便的实现一个python定时任务系统。
KEVINGUO_CN
2020/03/17
1.3K0
Python 实现定时任务的八种方案!
来源:https://www.biaodianfu.com/python-schedule.html
Python编程与实战
2021/10/12
34.3K0
python apscheduler
apscheduler分为4个模块,分别是Triggers,Job stores,Executors,Schedulers.
onety码生
2020/10/28
4070
相关推荐
Python实现定时任务的几种方法
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验