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 增加新特性时才会更新这个版本号。
本文为原创文章,如果对你有一点点的帮助,别忘了点赞哦!比心!如需转载,请注明出处,谢谢!