3

我目前正在重建具有区域服务器和数据节点的服务器。当我取下一个数据节点时,10 分钟后,它所拥有的块正在其他数据节点之间重新复制,这是应该的。我们有 10 个数据节点,所以我看到在重新复制块时网络流量很大。但是,我看到每台服务器的流量大约只有 500-600mbps(这些机器都有千兆接口),所以它绝对不是网络绑定的。我试图弄清楚是什么限制了数据节点发送和接收块的速度。每个数据节点有六个 7200 rpm 的 sata 驱动器,在此期间 IO 使用率非常低,每个驱动器仅达到 20-30% 的峰值。hdfs 中是否存在限制复制块的速度的限制?

4

1 回答 1

12

HDFS 会限制复制工作的速率,以免在常规集群负载期间发生故障时干扰集群流量。

dfs.namenode.replication.work.multiplier.per.iteration (2)控制它的属性是dfs.namenode.replication.max-streams (2)dfs.namenode.replication.max-streams-hard-limit (4)。最重要的控制在每次心跳发生时调度到 DN 的工作速率,另外两个进一步限制了 DataNode 一次完成的最大并行线程网络传输。中的值()表示它们的默认值。对此的一些描述可在https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

您也许可以尝试将值集分别增加到 (10, 50, 100) 以改善网络使用情况(需要重新启动 NameNode),但请注意,由于更多的块信息,您的 DN 内存使用量可能会略有增加传播到它。DN 角色的这些值的合理堆大小约为 4 GB。

Ps 这些值不是我个人在生产系统上尝试过的。您也不希望最大化重新复制工作负载,从而影响常规集群工作,因为由于缺乏网络资源,恢复 1/3 副本的优先级可能低于丢失作业/查询 SLA(除非您有非常快的网络,即使在负载期间也始终未得到充分利用)。尝试调整它,直到您对结果满意为止。

于 2014-02-15T13:52:26.677 回答