白名单和黑名单是hadoop管理集群机器的一种机制。

添加到白名单的主机节点,都允许访问NameNode,不在白名单的主机节点,都会被退出。

添加到黑名单的主机节点,不允许访问NameNode,会将黑名单的主机节点上的数据迁移到白名单主机节点上,然后退出该黑名单节点。

实际情况下,白名单用于确定允许访问NameNode的DataNode节点。黑名单用于在集群运行过程中退役DataNode节点。

一、配置白名单和黑名单的具体步骤如下:

1、在NameNode节点的/opt/module/hadoop-3.1.3/etc/hadoop目录下分别创建whitelist和blacklist文件。

//创建whitelist文件:
touch whitelist 

//创建blacklist文件:
touch blacklist

2、在 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>

3、分发配置文件whitelist、blacklist、hdfs-site.xml。(将这三个配置文件发送到集群中的所有机器中) 。rsync为分发命令,-av为归档拷贝并显示复制过程。

rsync    -av       $pdir/$fname           $user@hadoop$host:$pdir/$fname
命令     选项参数   要拷贝的文件路径/名称      目的用户@主机:目的路径/名称

4、分发脚本后,重启集群。

//关闭HDFS集群
stop-dfs.sh

//打开HDFS集群
start-dfs.sh

5、可在web浏览器上查看目前正常工作的DataNode节点。

二、黑名单退役步骤如下:

1、编辑/opt/module/hadoop-3.1.3/etc/hadoop目录下的blacklist文件。

vim blacklist

在文件内添加如下的主机名称(要退役的节点)。如下是对所有机器进行过host文件配置的。如果这样设置不起作用,可尝试此次填写具体ip地址。

hadoop101

2、分发blacklist到集群内所有节点上。rsync为分发命令,-av为归档拷贝并显示复制过程。

rsync    -av       $pdir/$fname           $user@hadoop$host:$pdir/$fname
命令     选项参数   要拷贝的文件路径/名称      目的用户@主机:目的路径/名称

3、刷新NameNode、刷新ResourceManager。

hdfs dfsadmin -refreshNodes


yarn rmadmin -refreshNodes

4、进入web浏览器,检查退役节点的状态为decommission in progress(退役中),说明数据节点正在复制块到其他白名单节点上。

5、等待退役节点状态为decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。注意:如果副本数是3,服役的节点小于等于3,是不能退役成功的,需要修改副本数后才能退役。

hdfs --daemon stop datanode

yarn --daemon stop nodemanager

6、如果数据不均衡,可以用命令实现集群的再平衡。

sbin/start-balancer.sh

注意:不允许白名单和黑名单同时出现同一个主机名称,既然使用了黑名单blacklist成功退役了某个节点,因此要将白名单whitelist里面的该节点也去掉。