我正在学习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可以同时并行打开更多文件,是我错了吗?
程序需要一段时间才能在amazon c3.xlarge实例上运行大约10秒钟,并且大约有400个文件。我确定如果我用C#编写程序,将需要几分之一秒才能运行,我在哪里错了?
最佳答案
Pig并行运行任务,最初由于将其作为mapreduce进行运行并优化整个脚本,所以最初花费了一定的时间,因此在Pig上处理较小的数据集会比较慢。它应用于大型数据集。若要增加小数据中Pig的并行任务数,可以在FOREACH行中使用PARALLEL命令,否则可以通过设置default_parallel n将并行度设置为n来整体增加reducer的数目。
最后一种情况可能是Pig正在作为映射器运行所有任务,并且映射器的数量太小(因为文件大小太小),您必须更改某些 yarn 配置以增加映射器的数量。
关于hadoop - 为什么我的任务不能在Pig中并行运行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38030322/