添加新节点后,Hadoop数据节点使用了过多的带宽。

3
问题是这样的:我创建集群时有3个数据节点,几天前我添加了另外两个数据节点。之后,我运行了平衡器,平衡器很快完成并说集群已经平衡了。但是我发现一旦我将数据(大约30MB)放入集群中,数据节点就会在旧数据节点和新数据节点之间发送和接收大量数据(大约400Mbps)。有人能告诉我可能的原因吗?也许我描述问题不太清楚,我会给您展示两张图片(来自zabbix),hadoop-02是“旧数据节点”之一,hadoop-07是“新数据节点”之一。 enter image description here enter image description here
2个回答

2
  1. 如果你指的是网络流量,Hdfs使用写入管道。假设副本系数为3,则数据流如下:

    客户端 --> 数据节点1 --> 数据节点2 --> 数据节点3

    如果数据大小为30mb,则总流量为90mb再加上一点开销(用于连接创建、数据包头部、数据包中的数据校验和)。

  2. 如果你指的是流量速率。我认为目前Hdfs没有为客户端 <-> DN 或 DN <-> DN 之间提供带宽控制。它将尽可能利用所有可获得的带宽。

如果你注意到老数据节点和新数据节点之间有更多的数据流动,那么可能发生在之前某些块的副本数量不足的情况下。在添加新节点后,NameNode会定期从旧的DNs调度复制任务到其他DNs(不一定是新的节点)。


谢谢您的回复!我指的是网络流量。我已经通过按照以下方法解决了底层无法复制块的问题:https://community.hortonworks.com/articles/4427/fix-under-replicated-blocks-in-hdfs-manually.html - zhaozhi
你发布的指令是错误的。setrep不能修复低副本块。如果文件已经有3个副本,设置replFactor=3当然可以解决低副本问题。但是如果文件只有2个或更少的副本,并且默认情况下replFactor为3,那么设置replFactor=3是无效的。它仍然是低副本。NameNode会慢慢地将复制任务从旧的DN调度到新的DN。根据您发布的图片,我更加确定我的观点是正确的。我熟悉HDFS代码。两个DN之间唯一的大量流量要么是管道写入,要么是块复制任务。 - waltersu
继续我的上一个评论:负载均衡器的复制和删除类似于块复制。但是你的负载均衡器很快就完成了。因此,我排除了这种可能性,因为只有在负载均衡器运行时才会发生复制,除非你的负载均衡器异常停止。我看到数据流从hadoop-02到hadoop-07。你可能需要检查DN日志以查看发生了什么。 - waltersu

0

等一下!!你的意思是在数据传输期间带宽被过度利用了,或者在放置数据后DNs没有平衡,因为负载均衡器用于平衡集群中节点上存在的数据量。


谢谢您的回复!我的意思是在数据传输期间带宽被过度利用。 - zhaozhi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接