我正在运行一个超过550gb数据的pig拉丁语脚本。减速器默认为1。生成结果大约需要38分钟。我想知道增加reducer的数量是否能更快地执行脚本任何帮助都将不胜感激。另外,我还想知道设置mapper和reducer背后的概念。
ktecyv1j1#
您可以使用pig中提供的并行功能。有关更多信息,请参阅此链接。pig并行功能
piah890a2#
增加reducer的数量肯定会有所帮助(如果您正在执行的操作有聚合)。由于实际聚合发生在reduce端,运行多个reducer将提高性能。您可以使用“平行”关键字设置清管器中的异径管数量。例如:a=加载“myfile”为(t,u,v);b=a组×t平行18;Map器的数量取决于输入的大小和我们使用的输入格式。Map器的数量通常等于输入拆分的数量。
46scxncf3#
是的,当然你可以有多个减速机。不同的颜色代表不同的键。具有相同键的所有值都将呈现给单个reduce任务。也就是说,不同的键可以有多个减速机请参阅此链接https://developer.yahoo.com/hadoop/tutorial/module4.html
wlzqhblo4#
前面的答案不一定适合你的情况。确实,如果您有各种reduce键,并且您的数据集没有严重地向其中一个倾斜,并且shuffle和/或reduce阶段是您操作中的瓶颈,并且您有多个内核可用作reducer,那么添加更多的reducer将有所帮助。在pig中,可以指定要与 PARALLEL 条款。正如所暗示的,在某些情况下,添加更多的异径管无助于您:对于大多数数据,只有一个reduce键。如果大多数数据产生相同的reduce键,则该键的所有Map输出都将转到一个reducer。如果你添加更多的减速器,你会发现其他减速器完成得很快,但减速器仍然需要很长时间才能完成。如果这是在Pig JOIN ,您可以通过 USING 'skewed' 条款。主要的瓶颈是在Map阶段读取数据并对其进行处理。你说你有550GB的数据。你用了多少个制图器?他们需要多长时间才能完成?添加更多的减速器只能加快洗牌和减速阶段。您正在一个小型集群上工作,该集群只有很少的内核可用于reduce任务。如果您已经在计算机上设置了本地hadoop集群,那么用于减少任务的内核可能不会超过1到2个。因此,启动更多的减速机只会意味着那些额外的减速机必须等待他们的cpu时间,你不会移动任何更快。除了添加减速机之外,另一种使作业运行更快的方法是减少任何不必要的Map输出。所有的map输出都被写入磁盘,然后被分发到reducer,在那里它再次被写入磁盘。磁盘i/o非常慢,如果不需要很多数据,请在Map阶段将其丢弃。例如,在pig中,您可能只希望获得每个键的记录数。在这种情况下,除了密钥之外的所有数据都应该被丢弃。通常,Map器的数量是自动选择的。如果您觉得Map器的数量太少,可以使用一些技巧。例如,您可能会发现pig在将输入文件组合在一起时过于激进,以至于只有一个或两个Map器需要很长时间。那样的话你可以 SET pig.maxCombinedSplitSize 到一个更大的数字。但通常情况下,Map绘制者的数量是你无法控制的。您想要使用的减速机的数量取决于您可用的资源(即,一次可以使用多少个减速机?如果您的工作长期占用集群中的所有减速器,是否可以?)以及数据的性质(即,它是否严重偏向于一个reduce键?)。还要注意的是,每个reducer都有一个输出文件,因此在某些情况下,更多的reducer可能会有问题。
PARALLEL
JOIN
USING 'skewed'
SET pig.maxCombinedSplitSize
4条答案
按热度按时间ktecyv1j1#
您可以使用pig中提供的并行功能。有关更多信息,请参阅此链接。pig并行功能
piah890a2#
增加reducer的数量肯定会有所帮助(如果您正在执行的操作有聚合)。由于实际聚合发生在reduce端,运行多个reducer将提高性能。
您可以使用“平行”关键字设置清管器中的异径管数量。例如:a=加载“myfile”为(t,u,v);b=a组×t平行18;
Map器的数量取决于输入的大小和我们使用的输入格式。Map器的数量通常等于输入拆分的数量。
46scxncf3#
是的,当然你可以有多个减速机。
不同的颜色代表不同的键。具有相同键的所有值都将呈现给单个reduce任务。
也就是说,不同的键可以有多个减速机
请参阅此链接
https://developer.yahoo.com/hadoop/tutorial/module4.html
wlzqhblo4#
前面的答案不一定适合你的情况。确实,如果您有各种reduce键,并且您的数据集没有严重地向其中一个倾斜,并且shuffle和/或reduce阶段是您操作中的瓶颈,并且您有多个内核可用作reducer,那么添加更多的reducer将有所帮助。在pig中,可以指定要与
PARALLEL
条款。正如所暗示的,在某些情况下,添加更多的异径管无助于您:
对于大多数数据,只有一个reduce键。如果大多数数据产生相同的reduce键,则该键的所有Map输出都将转到一个reducer。如果你添加更多的减速器,你会发现其他减速器完成得很快,但减速器仍然需要很长时间才能完成。如果这是在Pig
JOIN
,您可以通过USING 'skewed'
条款。主要的瓶颈是在Map阶段读取数据并对其进行处理。你说你有550GB的数据。你用了多少个制图器?他们需要多长时间才能完成?添加更多的减速器只能加快洗牌和减速阶段。
您正在一个小型集群上工作,该集群只有很少的内核可用于reduce任务。如果您已经在计算机上设置了本地hadoop集群,那么用于减少任务的内核可能不会超过1到2个。因此,启动更多的减速机只会意味着那些额外的减速机必须等待他们的cpu时间,你不会移动任何更快。
除了添加减速机之外,另一种使作业运行更快的方法是减少任何不必要的Map输出。所有的map输出都被写入磁盘,然后被分发到reducer,在那里它再次被写入磁盘。磁盘i/o非常慢,如果不需要很多数据,请在Map阶段将其丢弃。例如,在pig中,您可能只希望获得每个键的记录数。在这种情况下,除了密钥之外的所有数据都应该被丢弃。
通常,Map器的数量是自动选择的。如果您觉得Map器的数量太少,可以使用一些技巧。例如,您可能会发现pig在将输入文件组合在一起时过于激进,以至于只有一个或两个Map器需要很长时间。那样的话你可以
SET pig.maxCombinedSplitSize
到一个更大的数字。但通常情况下,Map绘制者的数量是你无法控制的。您想要使用的减速机的数量取决于您可用的资源(即,一次可以使用多少个减速机?如果您的工作长期占用集群中的所有减速器,是否可以?)以及数据的性质(即,它是否严重偏向于一个reduce键?)。还要注意的是,每个reducer都有一个输出文件,因此在某些情况下,更多的reducer可能会有问题。