2016-06-25 96 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。 最後一種情況可能是豬正在執行所有任務作爲映射器,並且映射器的數量太小,因爲您的文件大小很小,您必須更改某些紗線配置以增加映射器的數量。

相關問題