洗牌阶段持续时间太长hadoop

vsikbqxv  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(361)

我有一份mr工作,洗牌阶段持续时间太长。
起初我认为这是因为我从mapper(大约5gb)发出了大量数据。然后我通过添加一个组合器来解决这个问题,从而减少了向reducer发送的数据。在那之后,洗牌期并没有像我想的那样缩短。
我的下一个想法是通过在mapper中进行合并来消除combiner。我从这里得到的想法是,数据需要序列化/反序列化才能使用combiner。不幸的是,洗牌阶段仍然是一样的。
我唯一的想法是,这可能是因为我用的是一个单一的减速机。但这不应该是这样的,因为在mapper中使用combiner或combining时,我不会发出很多数据。
以下是我的数据:

以下是我的hadoop(Yarn)作业的所有计数器:

我还要补充一点,这是在一个由4台机器组成的小型集群上运行的。每个内存为8gb(预留2gb),虚拟核数为12个(预留2个)。

这些是虚拟机。起初他们都在一个单位,但后来我把他们2-2分在两个单位。所以他们一开始共享硬盘,现在每个磁盘有两台机器。它们之间是一个千兆网络。
以下是更多数据:
整个内存被占用

作业运行时cpu不断承受压力(图为同一作业连续运行两次的cpu)

我的问题是-为什么洗牌时间这么大,如何解决它?我也不明白为什么没有加速,即使我已经大大减少了数据量从Map?

i1icjdpr

i1icjdpr1#

很少观察到:
对于30分钟的作业,gc时间太长(尝试重用对象,而不是在map()/reduce()方法中为每个调用创建一个新的对象)
平均Map时间太长了,16分钟你在Map上做什么?
Yarn内存是99%,这意味着你在你的hdp集群上运行了太多的服务,ram不足以支持这些服务。
请增加容器内存,请至少提供1 gb。
这看起来像是gc+过度调度的集群问题

相关问题