默认情况下,hadoop 负载不均衡(任务数目不同),怎样让各个节点任务数目尽可能均衡呢?

默认情况下,hadoop yarn负载不均衡(任务数目不同),有的节点很多任务在跑,有的没有任务,怎样让各个节点任务数目尽可能均衡呢?

参与8

2同行回答

youki2008youki2008系统架构师DDT
在线上的hadoop集群运维过程中,hadoop 的balance工具通常用于平衡hadoop集群中各datanode中的文件块分布,以避免出现部分datanode磁盘占用率高的问题(这问题也很有可能导致该节点CPU使用率较其他服务器高)。可能的原因:突然磁盘使用率变高而文件块数并没有很大的增加,极有可能...显示全部

在线上的hadoop集群运维过程中,hadoop 的balance工具通常用于平衡hadoop集群中各datanode中的文件块分布,以避免出现部分datanode磁盘占用率高的问题(这问题也很有可能导致该节点CPU使用率较其他服务器高)。

可能的原因:

  1. 突然磁盘使用率变高而文件块数并没有很大的增加,极有可能是出现某个用户的作业产生大量大的文件,排查删除掉就课可以。注意将trash中的也要删除掉

2.也有可能是长期使用造成的,请查清楚每个节点的负载情况,进行排序,然后处理。

下附balance工具的一些说明,可以参考http://blog.csdn.net/azhao_dn/article/details/7741666

1) hadoop balance工具的用法:
To start:
bin/start-balancer.sh [-threshold < threshold > ]
Example: bin/ start-balancer.sh
 start the balancer with a default threshold of 10%
 bin/ start-balancer.sh -threshold 5
start the balancer with a threshold of 5%

To stop:
bin/ stop-balancer.sh

2)影响hadoop balance工具的几个参数:

-threshold 默认设置:10,参数取值范围:0-100,参数含义:判断集群是否平衡的目标参数,每一个 datanode 存储使用率和集群总存储使用率的差值都应该小于这个阀值 ,理论上,该参数设置的越小,整个集群就越平衡,但是在线上环境中,hadoop集群在进行balance时,还在并发的进行数据的写入和删除,所以有可能无法到达设定的平衡参数值。

dfs.balance.bandwidthPerSec 默认设置:1048576(1 M/S),参数含义:设置balance工具在运行中所能占用的带宽,设置的过大可能会造成mapred运行缓慢

3)hadoop balance工具其他特点:

balance工具在运行过程中,迭代的将文件块从高使用率的datanode移动到低使用率的datanode上,每一个迭代过程中移动的数据量不超过下面两个值的较小者:10G或者指定阀值*容量,且每次迭代不超过20分钟。每次迭代结束后,balance工具将更新该datanode的文件块分布情况。以下为官方文档英文描述:

The tool moves blocks from highly utilized datanodes to poorly utilized datanodes
iteratively. In each iteration a datanode moves or receives no more than the lesser of 10G
bytes or the threshold fraction of its capacity. Each iteration runs no more than 20
minutes. At the end of each iteration, the balancer obtains updated datanodes information
from the namenode.

参考资料:

http://blog.csdn.net/azhao_dn/article/details/7741666

收起
互联网服务 · 2020-04-25
浏览1501
呱呱爱吃瓜呱呱爱吃瓜数据仓库工程师银行
默认情况下,资源调度器处于批调度模式下,即一个心跳会尽可能多的分配任务,这样,优先发送心跳过来的节点将会把任务领光(前提:任务数目远小于集群可以同时运行的任务数量),为了避免该情况发生,可以按照以下说明配置参数:如果采用的是 fair scheduler ,可在 yarn-site.xml 中,将参数 ya...显示全部

默认情况下,资源调度器处于批调度模式下,即一个心跳会尽可能多的分配任务,这样,优先发送心跳过来的节点将会把任务领光(前提:任务数目远小于集群可以同时运行的任务数量),为了避免该情况发生,可以按照以下说明配置参数:

如果采用的是 fair scheduler ,可在 yarn-site.xml 中,将参数 yarn.scheduler.fair.max.assign 设置为 1 (默认是 -1, )

如果采用的是 capacity scheduler (默认调度器),则不能配置,目前该调度器不带负载均衡之类的功能。

当然,从 hadoop 集群利用率角度看,该问题不算问题,因为一般情况下,用户任务数目要远远大于集群的并发处理能力的,也就是说,通常情况下,集群时刻处于忙碌状态,没有节点一直空闲着。

收起
银行 · 2020-02-07
浏览1974

提问者

Tamic
数据库架构师某保险

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-02-06
  • 关注会员:3 人
  • 问题浏览:3722
  • 最近回答:2020-04-25
  • X社区推广