【问题标题】:Pig Inner Join produces a Job with 1 hanging reducerPig Inner Join 产生一个带有 1 个悬挂减速器的作业
【发布时间】:2023-03-22 13:44:02
【问题描述】:

我有一个我一直在研究的 Pig 脚本,它有一个来自 2 个不同数据源的内部联接。此连接恰好是第一个 MapReducing 导致操作。之前唯一的操作是过滤器和 foreachs。然后执行此 Join 时,一切都完美而快速地抛出了 map 阶段,但是当涉及到 reduce 阶段时,除了 1 之外的所有 reducer 都快速完成。然而,1 只是在阶段的 Reduce 部分以非常缓慢的速度处理数据。以至于等待 1 个减速器完成可能需要一个多小时以上的时间。我尝试增加减速器以及切换到倾斜连接,但似乎没有任何帮助。

任何关于事情的想法。

我还做了一个解释,看看我是否能看到任何东西,但这只是显示了一个简单的单一工作流程,没有什么了不起的。

【问题讨论】:

    标签: hadoop mapreduce apache-pig


    【解决方案1】:

    可能正在发生的事情是单个键在两侧都有大量实例并且它正在爆炸。

    例如,如果你加入:

    x,4      x,'f'
    x,5      x,'g'
    x,6   X  x,'h'
    y,7      x,'i'
    

    ...您将获得 12 对 x!因此,您可以想象,如果您在另一个数据集中有 1000 个键和 2000 个相同键,那么仅从这 2000 行中您将获得 200 万对。不幸的是,单个减速器不得不在这次爆炸中首当其冲。

    添加 reducer 或使用 skew join 在这里无济于事,因为归根结底,一个 reducer 需要处理这一对的大爆炸。

    这里有几件事要检查:

    1. 听起来只有一个连接键会导致此问题,因为只有一个减速器受到锤击。共同的罪魁祸首是NULL。其中任何一个中的列都可以为 NULL 吗?如果是这样,它会发生巨大的爆炸!在运行连接之前,尝试在两个关系的外键上过滤掉NULL,看看是否有区别。或者,而不是 NULL...也许您有某种默认值或显示很多的单个值。
    2. 试着弄清楚每个键实际上有多少个,并弄清楚爆炸会是什么样子。类似的东西(警告:我实际上并没有测试这段代码,希望它有效):

      A1 = LOAD ... -- load dataset 1
      B1 = GROUP A1 BY fkey1;
      C1 = FOREACH B1 GENERATE group, COUNT_STAR(A1) as cnt1;
      
      A2 = LOAD ... -- load dataset 2
      B2 = GROUP A2 BY fkey2;
      C2 = FOREACH B2 GENERATE group, COUNT_STAR(A2) as cnt2;
      
      D = JOIN C1 by fkey1, C2 by fkey2;  -- do the join on the counts
      E = FOREACH D GENERATE fkey1, (cnt1 * cnt2) as cnt;   -- multiply out the counts
      
      F = ORDER E BY cnt DESC; -- order it by the highest first
      STORE F INTO ...
      
    3. 同样,它可能与爆炸无关。您的一个关系可能只有一个键很多次。例如,在字数统计示例中,以单词“the”结尾的 reducer 将比得到“zebra”的 reducer 要做更多的计数。我不认为这里是这种情况,因为只有一个减速器受到锤击,这就是为什么我认为 #1 可能是这种情况。

    如果其中一个键的数量很大,那就是原因。而且您还知道导致问题的关键。

    【讨论】:

    • 所以有大量的空值,但这似乎并不是全部情况,但确实导致我遇到了根本问题。看起来 Google Bot(Google Web Preview)与 ID 搞砸了,假设在一组调用之间有所不同,但似乎它们对我们的 JS 做了一些奇怪的事情,导致 ID 在数千次调用之间没有变化。因此,当使用此 ID 进行连接时会发生。我最终会得到一个巨大的交叉产品,而不是预期的一对一加入。
    猜你喜欢
    • 1970-01-01
    • 2015-11-27
    • 2015-05-01
    • 2015-10-09
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 1970-01-01
    相关资源
    最近更新 更多