HDFS06 DataNode

本文详细解析HDFS DataNode的工作机制,包括数据块存储、周期性报告、心跳机制以及如何确保数据完整性。重点介绍DataNode如何检查磁盘损坏,并探讨掉线时限设置。

DataNode

DataNode工作机制

一个数据块在DataNode上以文字形式存储在磁盘上,包括一下两个文件。

image

image

1.DataNode启动后告诉NameNode本机的块信息(块是否完好),并周期性(默认6个小时)上报所有块消息(块是否完好)。

如DataNode1中Block1的数据长度、校验和、时间戳,Block3的数据长度、校验和、时间戳

DN先扫描自己节点块信息列表,默认6小时扫描一次,扫描自己的块是否有损害。

<property> 
  <name>dfs.datanode.directoryscan.interval</name> --数据节点自查时间间隔
  <value>21600s</value> 
  <description>Interval in seconds for Datanode to scan data 
  directories and reconcile the difference between blocks in memory and on 
the disk. 
  Support multiple time unit suffix(case insensitive), as described 
  in dfs.heartbeat.interval. 
  </description> 
</property>

DN再向NN汇报当前解读的信息,时间间隔默认6小时。

<property>
  <name>dfs.blockreport.intervalMsec</name> --块信息报告的时间间隔ms
  <value>21600000</value> 
  <description>Determines block reporting interval in 
milliseconds.</description>
</property>

2.心跳每3s一次,DataNode->NameNode我还活着,心跳返回结果带有NameNode->DataNode的命令。

3.超过10分钟+30s没有收到心跳的话,则认为该节点不可用。就认为该节点挂了,不会再向其传输信息。

数据完整性

DataNode 节点保证数据完整性的方法。

1.当 DataNode 读取 Block 的时候,它会计算 CheckSum。
2.如果计算后的 CheckSum,与 Block 创建时值不一样,说明 Block 已经损坏。
3.Client 读取其他 DataNode 上的 Block。
4.常见的校验算法 crc(32),md5(128),sha1(160)
5.DataNode 在其文件创建后周期验证 CheckSum。

DataNode掉线时限参数设置

image

注意
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> 

image

image

### 解决HDFS中无DataNode启动的问题 当遇到`HDFS_NAMENODE_USER`, `HDFS_DATANODE_USER` 和 `HDFS_SECONDARYNAMENODE_USER`未定义的情况时,这通常意味着配置文件中的环境变量缺失或不正确[^1]。具体表现为尝试启动数据节点时会抛出错误提示:“there is no HDFS_NAMENODE_USER defined. Aborting operation.” 这表明操作被终止了因为缺少必要的用户名设置[^2]。 为了修正这个问题并成功启动DataNodes,可以采取如下措施: #### 修改配置文件 编辑`hadoop-env.sh` 文件来指定这些用户角色对应的Linux账户名。例如: ```bash export HDFS_NAMENODE_USER="hduser" export HDFS_DATANODE_USER="hduser" export HDFS_SECONDARYNAMENODE_USER="hduser" ``` #### 验证权限设置 确保上述提到的服务账号拥有足够的权限去访问所需资源以及执行相应命令。对于大多数部署来说,默认情况下所有服务都运行在同一用户下(比如`hduser`) 是比较常见的做法。 另外,在某些版本的Hadoop集群里如果遇到了类似于`error processing WRITE_BLOCK operation src`这样的报错,则可能是由于`dfs.datanode.max.xcievers`参数值过低引起的。该属性控制着单个DataNode能够处理的最大并发读写请求数量。可以通过调整此参数提高最大线程数从而解决问题[^3]: ```xml <property> <name>dfs.datanode.max.transfer.threads</name> <value>4096</value> <description>The maximum number of threads to use for transferring data in and out of the DN.</description> </property> ``` 完成以上更改之后重启整个HDFS服务以使新的配置生效,并检查日志确认问题已被解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值