在 CentOS 上限制 HDFS 带宽,通常不是 HDFS 自身直接限速,而是从 系统层 / 网络层 / YARN 层 来做。下面按常用且可行的方式说明。
HDFS 提供了 数据平衡(Balancer)和 DataNode 传输限速 参数。
dfs.datanode.balance.bandwidthPerSec
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>10485760</value> <!-- 10 MB/s -->
</property>
✅ 适合:集群内部流量控制
hdfs balancer -bandwidth 10485760
只对当前 Balancer 进程生效。
如果是 计算任务读写 HDFS 太占带宽:
<property>
<name>mapreduce.map.output.buffer.bytes</name>
<value>10485760</value>
</property>
或限制 shuffle 带宽(间接)。
如果 HDFS 和别的业务共用网卡:
tc(流量控制)# 限制 eth0 为 100Mbps
tc qdisc add dev eth0 root tbf rate 100mbit burst 32kbit latency 400ms
查看:
tc qdisc show dev eth0
删除:
tc qdisc del dev eth0 root
✅ 适合:
通过 iptables 限制 HDFS 端口(50010 / 50070 等):
iptables -A OUTPUT -p tcp --dport 50010 -m limit --limit 10/s
⚠️ 复杂度高,生产不推荐
| 场景 | 推荐方式 |
|---|---|
| 副本 / Balancer 太占带宽 | dfs.datanode.balance.bandwidthPerSec |
| 集群整体出网限速 | Linux tc |
| 任务读写太猛 | YARN 参数 |
| 临时限速 | hdfs balancer -bandwidth |
如果你能说明:
我可以给你 直接可执行的配置。