Hadoop之HDFS中DataNode的工作机制

1. DataNode 的工作机制

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

2. 数据完整性

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

3. 掉线时限参数设置

      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 的单位为秒。

<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
</property>
<property>
    <name> dfs.heartbeat.interval </name>
    <value>3</value>
</property>

4. DataNode的目录结构

      和 NameNode 不同的是,DataNode 的存储目录是初始阶段自动创建的,不需要额外格式化。
1. 在 /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current 这个目录下查看版本号

[bigdata@hadoop102 current]$ cat VERSION 
storageID=DS-1b998a1d-71a3-43d5-82dc-c0ff3294921b
clusterID=CID-1f2bf8d1-5ad2-4202-af1c-6713ab381175
cTime=0
datanodeUuid=970b2daf-63b8-4e17-a514-d81741392165
storageType=DATA_NODE
layoutVersion=-56

2. 具体解释
(1) storageID:存储 id 号;
(2) clusterID 集群 id,全局唯一;
(3) cTime 属性标记了 DataNode 存储系统的创建时间,对于刚刚格式化的存储系统,这个属性为0;但是在文件系统升级之后,该值会更新到新的时间戳;
(4) datanodeUuid:DataNode 的唯一识别码;
(5) storageType:存储类型;
(6) layoutVersion 是一个负整数。通常只有 HDFS 增加新特性时才会更新这个版本号。

3.在 /opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-97847618-192.168.10.102-1493726072779/current 这个目录下查看该数据块的版本号

[bigdata@hadoop102 current]$ cat VERSION 
#Mon May 08 16:30:19 CST 2017
namespaceID=1933630176
cTime=0
blockpoolID=BP-97847618-192.168.10.102-1493726072779
layoutVersion=-56

4.具体解释
(1) namespaceID:是 DataNode 首次访问 NameNode 的时候从 NameNode 处获取的 storageID 对每个 DataNode 来说是唯一的(但对于单个 DataNode 中所有存储目录来说则是相同的),NameNode 可用这个属性来区分不同 DataNode。
(2) cTime 属性标记了 DataNode 存储系统的创建时间,对于刚刚格式化的存储系统,这个属性为0;但是在文件系统升级之后,该值会更新到新的时间戳。
(3) blockpoolID:一个 block pool id 标识一个 block pool,并且是跨集群的全局唯一。当一个新的 Namespace 被创建的时候( format 过程的一部分)会创建并持久化一个唯一 ID。在创建过程构建全局唯一的 BlockPoolID 比人为的配置更可靠一些。NN 将 BlockPoolID 持久化到磁盘中,在后续的启动过程中,会再次 load 并使用。
(4) layoutVersion 是一个负整数。通常只有 HDFS 增加新特性时才会更新这个版本号。

 

本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!

 

转载于:https://my.oschina.net/aibinxiao/blog/3001307

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值