在 CentOS 上“限制 HDFS 带宽”通常不是直接靠 CentOS 系统层面完成,而是 HDFS / Hadoop 自身机制 + 必要时配合系统工具。下面按常见场景说明。
HDFS 支持限制 后台数据传输(副本复制、Balancer、Decommission)。
在 hdfs-site.xml 中:
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>10485760</value> <!-- 10 MB/s -->
</property>
hdfs dfsadmin -setBalancerBandwidth 10485760
HDFS 不限制客户端写带宽,但可以通过 YARN 资源控制间接限制。
⚠️ 注意:HDFS 使用 随机端口 + 多连接,系统级限速较麻烦。
tc(Traffic Control)仅适合限制 DataNode 端口
# 假设网卡 eth0
tc qdisc add dev eth0 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100mbit
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 \
match ip dport 50010 0xffff flowid 1:1
wondershaper适合临时测试:
yum install wondershaper
wondershaper eth0 100000 100000 # 下行/上行 100Mbps
如果是 自己写程序访问 HDFS:
| 场景 | 推荐方式 |
|---|---|
| Balancer 太占带宽 | dfs.datanode.balance.bandwidthPerSec |
| 集群间数据迁移 | distcp + 限流参数 |
| 生产环境稳定 | HDFS 参数优先 |
| 临时限速 | tc |
hdfs dfsadmin -setBalancerBandwidth 20971520
如果你能说明:
我可以给你更精确的配置示例。