一、DataNode工作机制
1、一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据:包括数据块的长度,块数据的校验和,以及时间戳。
2、DataNode启动后会向NameNode注册,周期性(1小时)的向namenode上报所有的块信息。
3、心跳是每3秒一次,心跳返回结果带有NameNode给DataNode的命令,比如删除某个数据块等。如果超过10分钟没有收到某个Datanode 的心跳,则认为改节点不可用。
4、集群运行中可以安全加入和退出一些机器。
二、掉线时限参数设置
从前面我们知道了NameNode和datanode是相互通信的,datanode会有心跳机制,每隔3秒进行一次。但是datanode可能会出现故障,而namenode发现datanode故障后,具体会如何处理呢?
1、DataNode进程死亡或者网络故障造成DataNode无法与NameNode通信。
2、NameNode不会立即把该节点判定为死亡,要经过一端时间,计算的公式为:
2* dfs.namenode.heartbeat.recheck-interval +10*dfs.heartbeat.interval=10分30s
3、参数的配置在hdfs-site.xml 中,默认如下:一个单位为豪秒,一个单位为秒,这是需要注意的。
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>
三、服役新数据节点
如果原先的数据节点容量不能满足存储数据的需求,需要在原先节点上动态添加新的数据节点。
1、准备一台新的节点机器,装好环境后。直接启动DataNode,即可关联到集群
hdfs --daemon start datanode
yarn -–daemon start nodemanager
2、如果数据不均衡,可以用命令实现集群的再平衡。
也就是新加入一台机器后,如果其他机器都占了很大内存,可以使用这个命令。
sbin/start-balancer.sh
四、退役旧数据节点
白名单和黑名单在一开始搭建集群的时候就要规划好。
4.1 添加白名单和黑名单(安全)
添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被直接退出。
添加到黑名单的主机节点,不允许访问namenode ,会在数据迁移后退出。
实际情况下,白名单用于确定允许访问NameNode的DataNode节点,内容配置一般与workers文件内容一致。黑名单用于集群运行过程中退役DataNode节点。
配置白名单和黑名单的具体步骤如下:
/opt/module/hadoop-3.1.3/etc/hadoop
[lei@hadoop102 hadoop]$ touch whitelist
[lei@hadoop102 hadoop]$ touch blacklist
在whitelist中添加主机名称,加入集群正常工作的节点为
hadoop100
hadoop101
hadoop102
hadoop103
在NameNode的hdfs-site.xml配置文件中增加dfs.hosts 和dfs.hosts.exclude配置
<property>
<name>dfs.hosts</name>
<value>/opt/module/hadoop-3.1.3/etc/hadoop/whitelist</value>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/module/hadoop-3.1.3/etc/hadoop/blacklist</value>
</property>
配置文件分发,每台机器要求一样
xsync hdfs-site.xml
重新启动集群
4.2 黑名单退役
1、准备黑名单退役hadoop105
编辑blacklist文件,添加Hadoop05
[atguigu@hadoop102 hadoop] vim blacklist
hadoop105
2、刷新nameNode
[atguigu@hadoop102 hadoop] hdfs dfsadmin -refreshNodes
3、在web端查看DataNode状态,hadoop105正在退役中,进行数据的迁移