在 Linux 环境下对 HDFS 进行扩容,通常分为 横向扩容(加 DataNode) 和 纵向扩容(加磁盘) 两种场景。下面按常见生产做法说明。
HDFS 本身不需要手动分配空间,只要:
dfs.datanode.data.dirNameNode 会自动感知并使用新空间。
从已有节点拷贝:
scp -r $HADOOP_HOME newnode:/path/
scp /etc/hosts newnode:/etc/hosts
确保以下配置一致:
core-site.xmlhdfs-site.xmlworkers(或 slaves)# workers
namenode
datanode1
datanode2
newnode
在新节点执行:
hdfs --daemon start datanode
hdfs dfsadmin -report
看到新 DataNode 即成功。
mkfs.ext4 /dev/sdb
mkdir /data2
mount /dev/sdb /data2
写入 /etc/fstab 防止重启丢失。
<property>
<name>dfs.datanode.data.dir</name>
<value>/data1/dfs/data,/data2/dfs/data</value>
</property>
mkdir -p /data2/dfs/data
chown -R hdfs:hadoop /data2/dfs/data
hdfs --daemon stop datanode
hdfs --daemon start datanode
hdfs dfsadmin -refreshNodes
执行 Balancer:
hdfs balancer
# 或限制带宽
hdfs balancer -threshold 5
dfs.replication=3
实际可用空间 ≈ 总容量 / 副本数
✅ 加机器 / 加磁盘
✅ 改 dfs.datanode.data.dir
✅ 启动 DataNode
✅ dfsadmin -report 验证
✅ 可选:balancer
如果你能提供:
我可以给你更精确的配置示例。