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

mnemlml8  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(340)

我正在学习hadoop,我正在一个项目上做一些实验,这个项目可以作为一个大数据项目投入生产。现在我只是用少量的数据做一些测试。场景如下:我在pig中加载了大量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会同时打开更多的文件,我错了吗?程序在amazonc3.xlarge上运行大约需要10秒,大约有400个文件。我敢肯定,如果我用c语言编写一个程序,它只需要几分之一秒就可以运行,我错在哪里?

yshpjwxd

yshpjwxd1#

pig以并行方式运行任务,由于pig最初以mapreduce方式运行并优化整个脚本,因此在pig中对小数据集的操作会比较慢。它应该用于大数据集。对于小数据,要增加pig中并行任务的个数,可以在foreach行中使用parallel命令,否则可以通过设置default\u parallel n来整体增加reducer的个数,将parallelism设置为n。最后一种情况可能是pig正在以mapper的身份运行所有任务,而mapper的数量太少,因为您的文件太小,您必须更改一些Yarn配置以增加mapper的数量。

相关问题