dfs.namenode.replication.work.multiplier.per.iteration 每次复制的块的个数为dn的个数*该参数
dfs.namenode.replication.max-streams 进行复制任务分配时,单个DN人队伍的最大值
dfs.namenode.replication.max-streams-hard-limit 若DN的复制任务大于该值时,不会将其选为复制的源节点
<property>
<name>dfs.namenode.replication.max-streams</name>
<value>10</value>
</property>
<property>
<name>dfs.namenode.replication.max-streams-hard-limit</name>
<value>20</value>
</property>
<property>
<name>dfs.namenode.replication.work.multiplier.per.iteration</name>
<value>5</value>
</property>
这三个参数其实就是个限流参数
第三个参数相当于入口限流参数,决定了可以从under replication blocks 的集合中选出多少个blocks 加到复制队列中准备进行复制。
可以选出的block数与集群live 的datadnode 成正比,如果线上有10个datanode 那默认就可以选出10 * 2个block 进行replicate
前两个参数相当于出口限流,他们是在遍历复制队列中的blocks时,决定是否给当前block一个srcNode(也可能返回null)。
如果满足限流条件,srcNode=当前node;如果不满足就contiune,直到找到满足的node,如果所有node都不满足就返回null
(如果返回null 该block是不会relicate的)
原文更详细