2015-11-05 67 views
1

我在谷歌控制檯中通過部署界面部署了一個hadoop集羣。 (Hadoop 2.x)Hadoop和Google雲存儲連接器問題

我的任務是過濾存儲在一個Google存儲(GS)存儲桶中的數據,並將結果放到另一個存儲。所以,這是一個只有簡單的python腳本的地圖作業。請注意,羣集和輸出存儲區位於同一個區域(EU)。

利用谷歌雲存儲連接器,我運行下面的數據流作業:

hadoop jar /home/hadoop/hadoop-install/share/hadoop/tools/lib/hadoop-streaming-2.4.1.jar \ 
-D mapreduce.output.fileoutputformat.compress=true \ 
-D mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.GzipCodec \ 
-D mapreduce.job.reduces=0 \ 
-file file_1 \ 
-file mymapper.py \ 
-input gs://inputbucket/somedir/somedir2/*-us-* \ 
-output gs://outputbucket/somedir3/somedir2 \ 
-inputformat org.apache.hadoop.mapred.TextInputFormat \ 
-mapper mymapper.py 

什麼情況是所有的地圖製作過程數據和存儲在GS臨時目錄中,它看起來像結果:

gs://outputbucket/somedir3/somedir2/_temporary/1/mapper-0000/part-0000.gz 

畢竟mappers完成後,工作進度掛在100%的地圖,0%減少。看着gsutil所輸出鬥,我看到結果文件被複制到目標目錄:

gs://outputbucket/somedir3/somedir2 

這個過程需要很長的時間和使用Hadoop殺死了整體效益。 我的問題是:

1)這是一個已知的問題,或者我只是做錯了什麼?我找不到任何相關信息。

2)我正確地說,通常hdfs會將這些文件移動到目標目錄,但GS不能執行移動,因此文件被複制?

3)我能做些什麼來避免這種模式?

+0

您使用的是Hadoop 1.x還是2.x? –

+0

我正在使用Hadoop 2.x – user5519499

+0

您正在使用不推薦使用的屬性。從https://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/DeprecatedProperties.html配置正確的屬性 –

回答

0

您幾乎肯定會碰到影響Hadoop 2.0到2.6的"Slow FileOutputCommitter" issue,並在2.7中修復。

如果您在Google雲端平臺上尋找一個很好的託管Hadoop選項,您應該考慮Google Cloud Dataproc(文檔here),我們在這裏維護我們的發行版以確保我們快速獲取與Google雲端平臺相關的補丁。 Dataproc確實配置了mapreduce.fileoutputcommitter.algorithm.version,以便最終的提交作業速度很快。

對於更多「自己動手」的東西,您可以使用我們的命令行bdutil tool,它也有最新更新到use the fast FileOutputCommitter