知道mapper和reducer的用法

时间:2014-04-22 05:51:10

标签: hadoop apache-pig mapper reducers

我正在运行一个超过550 Gb数据的猪拉丁文字。 减速器是默认值1.生成结果大约需要38分钟。 我想知道增加减速器的数量是否会更快地执行脚本

任何帮助将不胜感激。

另外,我想知道设置mapper和reducers背后的概念。

4 个答案:

答案 0 :(得分:2)

增加减速器的数量肯定会有所帮助(如果您正在执行的操作具有聚合)。由于实际聚合发生在reduce方面,运行多个reducers会提高性能。

您可以使用&& 39; Parallel'来设置猪的减速器数量。关键词。 例如: A = LOAD' myfile' AS(t,u,v); B = GROUP A BY t PARALLEL 18;

映射器的数量取决于输入的大小和我们使用的输入格式。映射器的数量通常等于输入分割的数量。

答案 1 :(得分:2)

以前的答案不一定适合您的情况。确实,如果你有各种reduce键并且你的数据集没有严重偏向其中一个,并且shuffle和/或reduce阶段是你操作中的瓶颈,并且你有多个内核可用作reducer,然后添加更多减速器将有所帮助。在Pig中,您可以使用PARALLEL子句指定要使用的数字。

正如所暗示的,在某些情况下,添加更多减速器对您没有帮助:

  1. 您的大部分数据都有一个reduce键。如果您的大多数数据都生成相同的reduce键,则该键的所有地图输出都将转到单个reducer。如果你添加更多减速器,你会发现其他减速器很快完成,但减速器仍然需要很长时间才能完成。如果在Pig JOIN期间发生这种情况,您可以使用USING 'skewed'子句解决此问题。
  2. 主要瓶颈是在地图阶段读取数据并对其进行处理。您说您有550 GB的数据。你使用了多少个地图制作者?他们需要多长时间才能完成?添加更多减速器只能加速混洗并减少相位。
  3. 您正在开发一个只有很少核心可用于减少任务的小型群集。如果您在计算机上设置了本地Hadoop群集,则可能不会超过1或2个核心致力于减少任务。因此,启动更多的减速器只意味着那些额外的减速器必须等待轮到他们的CPU时间,你不会更快地移动。
  4. 除了添加reducer之外,另一种让你的作业运行得更快的方法是减少任何不必要的地图输出。所有映射输出都写入磁盘,然后分发到reducer,再次将其写入磁盘。磁盘I / O非常慢,如果不需要大量数据,请在映射阶段将其丢弃。例如,在Pig中,您可能只想获得每个键的记录数。在这种情况下,除了密钥之外的所有数据都应该被丢弃。


    通常,自动选择映射器的数量。如果你觉得地图制作者的数量太小,你可以使用一些技巧。例如,您可能会发现Pig在将输入文件组合在一起时过于激进,因此您只需要一个或两个映射器,这需要很长时间。在这种情况下,您可以SET pig.maxCombinedSplitSize更大的数字。但通常情况下,地图制作者的数量无法控制。

    您想要使用的减速器数量取决于您可以使用的资源(即,可以一次使用多少减速器?如果您的工作长时间占用集群中的所有减速器,这是否可以?时间?)和数据的性质(即,它是否严重偏向一个减少键?)。另请注意,每个reducer都有一个输出文件,因此在某些情况下更多的reducer可能会有问题。

答案 2 :(得分:1)

是的,当然你可以有多个减速器。

enter image description here

不同的颜色代表不同的键。具有相同键的所有值都将显示在单个reduce任务中。

这意味着。,您可以为不同的密钥设置多个reducer

参考此链接

https://developer.yahoo.com/hadoop/tutorial/module4.html

答案 3 :(得分:0)

您可以使用PIG中提供的并行功能。有关详细信息,请参阅此链接。PIG Parallel Feature