Hadoop文件系统——HDFS的组织架构设计

一、Hadoop Distributed FileSystem(HDFS)

1. HDFS的设计

HDFS时为以流式数据访问模式存储超大文件而设计的文件系统,在商用硬件集群上运行。

1.1 文件块(Block)

HDFS以块为单位保存文件,在Hadoop2.x版本中块的大小默认为128M(在hadoop1.x中64M,通过dfs.blocksize规定)。一个小于块大小的文件不会占据整个块空间。

1.1.1 如何确定HDFS中块的大小?

HDFS中块比磁盘大,目的是减少寻址开销,从而传输一个由多个块组成的文件的时间就取决于磁盘的传输速率。
如果块设计的太大,传输数据时间会增大;如果块设计的太小,会增加寻址时间。

块大小的设计原则:寻址时间为传输时间的1%

目前磁盘的传输速率普遍为100MB/s,若希望寻址时间在10ms以内,那么传输时间为1s,Block大小为100MB,取2的整数次幂得到128MB。

1.1.2 采用块的好处
  • 减少了寻址时间,提高处理大文件的效率
  • 一个文件可以大于网络中任意一个磁盘的容量,不需要存储在同一块磁盘上
  • 简化存储管理(块的大小固定),元数据可以不与块一同储存。
  • 便于提高系统的容错和实用性,方便复制
1.2 NameNode,Secondary NameNode & DataNode

HDFS集群有两种节点,以Master-Slave模式运行。

NameNode&Secondary NameNode

NameNode作用:管理整个文件系统的命名空间;配置副本策略;管理Block的映射信息;处理客户端读写请求
SeconaryNameNode作用:复制NameNode,定期合并Fsimage,Edits;辅助恢复NameNode

NameNode中并不保留Block的位置信息,而是DataNode启动后定期汇报。

工作机制

  • 第一阶段:NameNode启动
    • 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存
    • 客户端对元数据进行增删改的请求:NameNode先记录操作日志,更新滚动日志再内存中对数据进行增删改。
  • 第二阶段:Secondary NameNode工作
    • Secondary NameNode询问NameNode是否需要CheckPoint,返回NameNode是否检查结果。( 触发CheckPoint需要满足两个条件中的任意一个:1小时时间到和每隔一分种检查Edits中操作次数是否达到100万
    • 若需要CheckPoint则请求执行:
      • NameNode滚动正在写的Edits日志,生成一个空的edits.inprogress,将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode;
      • Secondary NameNode加载编辑日志和镜像文件到内存,并合并,生成新的镜像文件fsimage.chkpoint。
      • 拷贝fsimage.chkpoint到NameNode,NameNode将fsimage.chkpoint重新命名成fsimage。

Secondary NameNode恢复NameNode的方法:

  • 直接拷贝
  • 使用hdfs namenode -importCheckpoint启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中

集群安全模式:

  • NameNode启动时,首先将镜像文件(Fsimage)载入内存,并执行编辑日志(Edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的Fsimage文件和一个空的编辑日志。此时,NameNode开始监听DataNode请求。这个过程期间,NameNode一直运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。
  • 系统中的数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。在系统的正常操作期间,NameNode会在内存中保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,即可高效运行文件系统。
  • 如果满足“最小副本条件”NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式
DataNode:

作用:储存实际数据块;执行读写操作

  • 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。DataNode会周期性检验文件的校验和是否与创建时相同以保证文件的正确性;
  • DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息
  • 心跳是每3秒一次心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟(默认超时时长10分钟+30秒)没有收到某个DataNode的心跳,则认为该节点不可用
  • 集群运行中可以安全加入和退出一些机器。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值