gpt4 book ai didi

hadoop - 如何设计每个映射器来处理SequenceFile的每一行?

转载 作者:行者123 更新时间:2023-12-02 20:36:59 29 4
gpt4 key购买 nike

我有一个从以前的MapReduce作业生成的SequenceFile。此SequenceFile有N行,每行都是对键和值,都是文本对象。

line1: key1 \t value1

line2: key2 \t value2

line3: key3 \t value3

...

lineN: keyN \t valueN

我将此SequenceFile用作新MapReduce作业的输入。在这个新的MapReduce作业中,我希望每个映射器处理该SequenceFile的几行,例如2行。
line1, line2 goes to mapper1

line3, line4 goes to mapper2

.....

line(N-1), lineN goes to mapperN

我无法使用NLineInputFormat,因为它仅用于文本文件。因此,我使用了SequenceFileInputFormat并让Hadoop将数据分别分成40Mb(我的blocksize = 40M)。即使每个分割的大小相等,也有映射器接收比其他映射更多的数据(即行)。例如,有5行进入mapper1,而只有1行进入mapper2。因此,mapper2的完成非常快,而mapper1花费的时间如此之长,并且由于Java堆大小溢出而多次失败。

enter image description here

我尝试了以下方法,但没有一个起作用:
  • 更改块大小:
  • 增加映射器的数量:问题仍然相同。因为没有输入行,所以许多映射器完成得非常快,而有些映射器几乎要接受输入,而这永远不会完成。
  • 将我的SequenceFile转换为Text文件,然后使用NLineInputFormat:由于Text文件占用了过多的RAM,因此Java堆大小溢出。这就是为什么我要使用SequenceFile的原因,因为它支持压缩。

  • 我的问题是:

    如何使每个映射器获得SequenceFile输入行的相似(或等效)数量?

    最佳答案

    您无法控制去往特定映射器的行数,但是可以控制去往哪个约化器的数据。您可以更改映射器以简单地传递数据。然后创建您的自定义分区程序,它将数据平均分配给精简程序。然后执行在reducer中需要大量RAM的逻辑。

    关于hadoop - 如何设计每个映射器来处理SequenceFile的每一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50813802/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com