Hadoop HDFS架构 NameNode和DataNode工作机制

Hadoop HDFS架构

HDFS主要由3个组件构成:NameNode, DataNode, SecondaryNameNode。
HDFS是以master/slave模式运行的,通常NameNode, SecondaryNameNode运行在master节点,DataNode运行在slave节点。


HDFS架构图

HDFS主从架构

NameNode(名称节点)

存储:文件元数据信息,包含:

  • 文件名称
  • 文件目录结构
  • 文件的属性(权限,创建时间,副本数)
  • 文件对应哪些数据块 –> 数据块对应哪些DN节点

作用:

  • 管理文件系统命名空间
  • 维护文件系统树及树中的所有文件和目录
  • 维护所有这些文件或目录的打开、关闭、移动、重命名等操作

NameNode工作机制

NN工作机制

第一阶段:NameNode启动

  1. 第一次启动NameNode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志(edits)和镜像文件(fsimage)到内存。
  2. 客户端对元数据进行增删改的请求。
  3. NameNode记录操作日志,更新滚动日志。
  4. NameNode在内存中对数据进行增删改查。

第二阶段:SecondaryNameNode工作

  1. SecondaryNameNode询问NameNode是否需要checkpoint。直接带回NameNode是否检查结果。
  2. SecondaryNameNode请求执行checkpoint。
  3. NameNode滚动正在写的edits日志。
  4. 将滚动前的编辑日志和镜像文件拷贝到SecondaryNameNode。
  5. SecondaryNameNode加载编辑日志和镜像文件到内存,并合并。
  6. 生成新的镜像文件fsimage.chkpoint。
  7. 拷贝fsimage.chkpoint到NameNode。
  8. NameNode将fsimage.chkpoint重新命名成fsimage。

checkpoint检查时间参数设置

  1. 通常情况下,SecondaryNameNode每隔1小时执行一次
    [hdfs-default.xml]
    1
    2
    3
    4
    <property>
    <name>dfs.namenode.checkpoint.period</name>
    <value>3600</value>
    </property>
  2. 一分钟检查一次操作次数,当操作次数达到一百万时,SecondaryNameNode执行一次
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <property>
    <name>dfs.namenode.checkpoint.txns</name>
    <value>1000000</value>
    <description>操作动作次数</description>
    </property>
    <property>
    <name>dfs.namenode.checkpoint.check.period</name>
    <value>60</value>
    <description> 1分钟检查一次操作次数</description>
    </property>

DataNode(数据节点)

存储:数据块,数据块校验和,与NN通信

作用:

  • 读写文件的数据块
  • 接收NN的指示来进行创建、删除、复制等操作
  • 通过心跳定期向NN发送所存储文件块列表信息

DataNode工作机制

DN工作机制

  1. 一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据,包括数据块的长度、块数据的校验和以及时间戳。
  2. DataNode启动后向NameNode注册,通过后,周期性(1小时)地向NameNode上报所有的块信息。
  3. 心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令,如复制块数据到另一台机器或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
  4. 集群运行中可以安全加入和退出一些机器。

数据完整性

  1. 当DataNode读取block的时候,它会计算checksum校验和。
  2. 如果计算后的checksum,与block创建时值不一样,说明block已经损坏。
  3. client读取其他DataNode上的block。
  4. DataNode在其文件创建后周期验证checksum校验和。

掉线时限参数设置

DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信,NameNode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。HDFS默认的超时时长为10分钟+30秒。如果定义超时时间为timeout,则超时时长的计算公式为:

  • timeout = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval

  • 默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟,dfs.heartbeat.interval默认为3秒。

  • 需要注意的是hdfs-site.xml 配置文件中的heartbeat.recheck.interval的单位为毫秒,dfs.heartbeat.interval的单位为秒。

1
2
3
4
5
6
7
8
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name> dfs.heartbeat.interval </name>
<value>3</value>
</property>

ScondaryNameNode(第二名称节点)

存储:命名空间镜像文件fsimage+编辑日志editlog

作用:

  • 定期合并fsimage+editlog文件为新的fsimage,推送给NN
  • 监控HDFS状态,每隔一段时间获取HDFS元数据的快照

为了解决单点故障,设置了SNN的1小时备份机制,虽然能够减轻单点故障,但是还会有风险,即在那1小时中,还是会有发生单点故障的可能,造成数据丢失。为了解决这个问题,需要部署HDFS -HA高可用。