工作原理
1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。
2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。
3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
4)集群运行中可以安全加入和退出一些机器。
超时设置
-
如果DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信,NameNode不会理解把该节点判定为死亡,而是要经过一段时间,这段时间暂称为超时时间。
-
默认超时时间为 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>
添加新服役节点
实际操作流程:
0.1克隆后,ip和主机名称修改,并重启
0.2删除遗留数据
0.3修改同步文件,增加新节点的文件同步
1.先修改各个节点hosts文件,增加新节点
2.修改workers配置文件,增加新节点,并同步到其他节点
3.配置免密登录,使得namenode登录新节点的时候不需要输入密码。
4.启动dfs 和yarn
$HADOOP_HOME/bin/hdfs --daemon start datanode
yarn --daemon start nodemanager
查看节点信息命令:
hdfs dfsadmin -report #查看datanode节点
yarn node -list #查看nodemanager节点
hdfs dfsadmin -refreshNodes #刷新节点
start-balancer.sh #重平衡各个节点
退役旧数据节点
注意:修改hdfs-site.xml需要重启HDFS
- 通过添加白名单
先在/opt/hadoop-3.1.2/etc/hadoop/ 创建一个文件:dfs.hosts
touch dfs.hosts
vim dfs.hosts
添加如下内容
master
slaver01
slaver02
slaver03
slaver04
修改配置文件hdfs-site.xml
<property>
<name>dfs.hosts</name>
<value>/opt/hadoop-3.1.2/etc/hadoop/dfs.hosts</value>
</property>
重启hdfs。
退役某个节点时,只需要删除dfs.hosts中对应的hosts,然后刷新
hdfs dfsadmin -refreshNodes
想重启某个节点,再加入dfs.hosts,然后刷新节点。
- 通过黑名单退役
先在/opt/hadoop-3.1.2/etc/hadoop/ 创建一个文件:dfs.hosts.exclude 先不添加内容。
修改配置文件 hdfs-site.xml
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/hadoop-3.1.2/etc/hadoop/dfs.hosts.exclude</value>
</property>
重启hdfs。
以后,如果想退役某个节点,只需要在黑名单dfs.hosts.exclude中添加需要的hosts
slaver04
刷新节点
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
此时,退役节点,处于decommission in progress(退役中) 等复制完数据到其他节点,就完成退役,停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。
想平衡数据,用下列命令
start-balancer.sh