0

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

任何帮助将不胜感激。

另外,我想知道设置映射器和减速器背后的概念。

4

4 回答 4

2

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

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

  1. 您的大部分数据都有一个归约键。如果您的大部分数据产生相同的 reduce 键,则该键的所有映射输出都将转到单个 reducer。如果你添加更多的reducer,你会发现其他的reducer完成的很快,但是那个reducer仍然需要很长时间才能完成。如果这发生在 Pig 期间JOIN,您可以使用该USING 'skewed'子句解决此问题。
  2. 主要瓶颈是在映射阶段读取数据并对其进行处理。你说你有 550 GB 的数据。你用了多少个映射器?他们需要多长时间才能完成?添加更多的 reducer 只能加速 shuffle 和 reduce 阶段。
  3. 您正在一个小型集群上工作,可用于减少任务的内核很少。如果您在计算机上设置了本地 Hadoop 集群,那么您可能没有超过 1 或 2 个用于减少任务的核心。因此,启动更多的 reducer 只会意味着这些额外的 reducer 必须等待轮到它们的 CPU 时间,而你的移动速度不会更快。

除了添加 reducer,另一种让你的作业运行得更快的方法是减少任何不必要的 map 输出。所有 map 输出都写入磁盘,然后分发到 reducer,然后再次写入磁盘。磁盘 I/O 非常慢,如果不需要大量数据,请在映射阶段将其丢弃。例如,在 Pig 中,您可能只想计算每个键的记录数。在这种情况下,除了键之外的所有数据都应该被丢弃。


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

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

于 2014-04-22T11:44:30.647 回答
2

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

您可以使用 'Parallel' 关键字设置 pig 中的减速器数量。例如:A = LOAD 'myfile' AS (t, u, v); B = 组 A 由 t 平行 18;

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

于 2014-04-22T10:13:56.180 回答
1

是的,当然你可以有不止一个减速器。

在此处输入图像描述

不同的颜色代表不同的按键。具有相同键的所有值都呈现给单个 reduce 任务。

这意味着.,您可以为不同的键设置多个减速器

参考这个链接

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

于 2014-04-22T06:00:41.970 回答
0

您可以使用 PIG 中提供的并行功能。请参阅此链接以获取更多信息。PIG 平行特征

于 2014-04-22T07:17:02.193 回答