为什么我的任务在 Pig 中没有 运行 并行?

Why my tasks does not run in parallel in Pig?

我正在学习 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 可以同时并行打开更多文件,我错了吗? 在亚马逊 c3.xlarge 上,程序需要 运行 大约 10 秒,大约有 400 个文件。我确定如果我用 C# 编写程序,它会花费几分之一秒到 运行,我哪里错了?

Pig 以并行方式运行任务,Pig 最初会花费一些时间,因为它以 mapreduce 方式运行并优化整个脚本,因此在 Pig 中对小数据集的操作会更慢。它应该用于大数据集。要增加 pig 中小数据的并行任务数,可以在 FOREACH 行中使用 PARALLEL 命令,否则可以通过 set default_parallel n 整体增加 reducer 的数量,将并行度设置为 n。 最后一种情况可能是pig是运行 all task as mapper,由于你的文件小,mapper的数量太少,你必须改变一些yarn配置来增加mapper的数量。