动态扩容是将新节点加入HDFS集群以提升存储容量的过程,需提前完成以下基础准备:
hosts文件(包含集群所有节点的主机名与IP映射);hadoop.tmp.dir指定的数据存储目录,避免覆盖元数据);HADOOP_HOME、PATH),并执行source /etc/profile使配置生效。hdfs-site.xml:dfs.hosts属性(指定允许加入集群的DataNode列表文件路径,如/opt/hadoop/etc/hadoop/dfs.hosts),用于控制节点准入。<property>
<name>dfs.hosts</name>
<value>/opt/hadoop/etc/hadoop/dfs.hosts</value>
</property>
hdfs-site.xml复制到集群所有NameNode和DataNode节点。dfs.hosts文件:在NameNode节点的dfs.hosts指定路径下,添加新节点的主机名(如dn-new1.example.com),保存文件;hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager # 若集群启用YARN,需同步启动NodeManager
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes # 若集群启用YARN
执行后,可通过Hadoop Web界面(如NameNode的50070端口)查看新节点状态(显示为“Live”)。新节点加入后,集群数据分布可能不均匀(旧节点存储了大部分数据),需使用hdfs balancer工具调整:
hdfs dfsadmin -setBalancerBandwidth 104857600 # 单位:字节(100MB)
-threshold参数指定阈值,如5%,表示集群各节点数据利用率差异小于5%时停止):hdfs balancer -threshold 5
均衡过程需监控集群负载,避免在业务高峰期执行。hdfs dfsadmin -report命令,确认新节点已加入(显示为“Live”状态),并检查磁盘空间使用情况(新节点的“Capacity”应计入总容量);hadoop fs -put /local/testfile /test),然后从新节点读取该文件(如hadoop fs -get /test/testfile /local/),验证数据是否可正常访问。core-site.xml中配置topology.script.file.name(指向机架感知脚本,如/opt/hadoop/etc/hadoop/topology.sh),确保数据副本分布在不同机架,提高容错性;