为什么我的任务不能在Pig中并行运行?

时间:2016-06-25 16:02:16

标签: hadoop apache-pig

我正在学习hadoop,而且我正在做一个可以作为大数据项目投入生产的项目的实验。无论如何,我现在正在用少量数据做一些测试。场景如下:我在猪中加载了一大堆json文件,如下所示:

a = load 's3n://mybucket/user_*.json' using com.twitter.elephantbird.pig.load.JsonLoader('-nestedLoad') AS (json:map []);
b = FOREACH a GENERATE flatten(json#'user') as (m:map[]) ;

让我们说文件很小,它们只包含一个对象,但有一个对象。我假设FOREACH可以同时打开更多文件,我错了吗? 程序需要一段时间才能在亚马逊c3.xlarge上运行大约10秒,并且大约有400个文件。我确定如果我在C#中执行一个程序,它将花费一小部分时间来运行,我错在哪里?

1 个答案:

答案 0 :(得分:1)

Pig并行运行任务,猪花费的时间最初是因为它运行mapreduce并优化整个脚本,所以对小数据集的操作在猪中会比较慢。它应该用于大数据集。要增加pig中小数据的并行任务数,可以在FOREACH行中使用PARALLEL命令,否则可以通过设置default_parallel n来整体增加reducer的数量,将并行度设置为n。 最后一种情况可能是猪正在运行所有任务作为映射器,并且映射器的数量太小,因为您的文件大小很小,您必须更改一些纱线配置以增加映射器的数量。