1 背景
已有HDFS集群容量已经不能满足存储数据的需求,需要在原有集群基础上动态添加新的DataNode节点。就是俗称的 动态扩容。
旧的服务器需要进行退役更换,暂停服务,需要在当下的集群中停止某些机器上HDFS的服务,俗称 动态缩容。
2 动态扩容、节点上线
2.1 新机器基础环境准备
2.1.1 主机名、IP
确保新机器 IP和已有HDFS集群所属同一网段
新机器系统hostname
2.1.2 Hosts映射
集群所有节点保持hosts文件统一
2.1.3 防火墙、时间同步
关闭防火墙
集群时间同步
2.1.4 SSH免密登录
为了后续脚本一键启动关闭集群方便,设置NameNode到新机器的免密登录
2.1.5 JDK环境配置
2.2 Hadoop配置
2.2.1 NameNode节点配置
修改namenode节点workers配置文件,增加新节点主机名,便于后续一键启停。
4.2.2.2 新机器配置
从namenode节点复制hadoop安装包到新节点, 注意不包括 hadoop.tmp.dir 指定的
数据存储目录。
新机器上配置hadoop环境变量
vim /etc/profile export HADOOP_HOME=/export/server/hadoop-3.1.4 export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin source /etc/profile
2.3 手动启动DataNode进程
2.4 Hadoop Web页面查看
2.5 DataNode负载均衡服务
新加入的节点,没有数据块的存储,使得集群整体来看负载不均衡。因此最后还
需要对hdfs负载设置均衡。首先设置数据传输带宽。
hdfs dfsadmin -setBalancerBandwidth 104857600
然后启动Balancer,等待集群自均衡完成即可。
hdfs balancer -threshold 5
3 动态缩容、节点下线
3.1 添加退役节点
在namenode机器的hdfs-site.xml配置文件中需要提前配置dfs.hosts.exclude属性,该属性指向的文件就是所谓的黑名单列表,会被namenode排除在集群之外。如果文件内容为空,则意味着不禁止任何机器。提前配置好的目的是让namenode启动的时候就能加载到该属性,只不过还没有指定任何机器。否则就需要重启namenode才能加载,因此这样的操作我们称之为 具有前
瞻性的操作。
<property> <name>dfs.hosts.exclude</name> <value>/export/server/hadoop-3.1.4/etc/hadoop/excludes</value> </property>
编辑dfs.hosts.exclude属性指向的excludes文件,添加需要退役的主机名称。
注意: 如果副本数是3 3 ,服役的节点小于等于3 3 ,是不能退役成功的,需要修改副
本数后才能退役。
3.2 刷新集群
在namenode所在的机器刷新节点:hdfs dfsadmin -refreshNodes
等待退役节点状态为decommissioned(所有块已经复制完成)
3.3 手动关闭DataNode进程
hdfs --daemon stop datanode
3.4 DataNode负载均衡服务
如果需要可以对已有的HDFS集群进行负载均衡服务。
hdfs balancer -threshold 5
4 黑白名单机制
4.1 白名单
所谓的 白名单指的是 允许哪些机器加入到当前的HDFS集群中,是一种准入机制。
白名单由dfs.hosts参数指定,该参数位于hdfs-site.xml。默认值为空。
dfs.hosts指向文件,该文件包含允许连接到namenode的主机列表。必须指定文件
的完整路径名。 如果该值为空,则允许所有主机 准入。
4.2 黑名单
所谓的 黑 名单指的是 禁止哪些机器加入到当前的HDFS集群中,是一种禁入机制。黑名单由dfs.hosts.exclude参数指定,该参数位于hdfs-site.xml。默认值为空。dfs.hosts.exclude指向文件,该文件包含不允许连接到名称节点的主机列表。必须指定文件的完整路径名。 如果该值为空,则不禁止任何主机加入。