2016-06-25 63 views
0

我正在学习hadoop,我正在做一个可以作为大数据项目投入生产的项目的实验。无论如何,我只是用少量数据做一些测试。该方案是为后续还有的是我在猪加载如下JSON文件bounch:为什么我的任务不能在Pig中同时运行?

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[]) ; 

比方说文件是小,他们只包含一个对象,但有他们的bounch。我假设FOREACH可以同时并行打开更多文件,我错了吗? 程序需要一段时间才能在amazon c3.xlarge istance上运行约10秒,并且大约有400个文件。我敢肯定,如果我在C#中完成一个程序,它将需要几分之一秒的时间运行,我错在哪里?

+0

C#可以在几秒钟内从s3中读取数百个文件?我不知道 –

+0

在任何情况下,如果你想并行处理,使用Spark,而不是Pig –

+0

@ cricket_007所以s3是瓶颈?但无论如何,我应该看到不止一个映射器运行? –

回答

1

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

相关问题