2015-06-05 89 views
1

嗨,我有一個MR2作業,它將以壓縮方式壓縮的avro數據作爲輸入,處理它並將數據輸出到輸出目錄轉換爲avro格式。期望的是,這個輸出avro數據也應該快速壓縮,但不是。 MR工作是一個只有地圖的工作。mapreduce作業沒有正確設置壓縮編碼解碼器

我已經在我的代碼

conf.set("mapreduce.map.output.compress", "true"); conf.set("mapreduce.map.output.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec");

設置以下屬性,但如果你想用活潑的還是輸出不活潑的壓縮

+0

該命令僅壓縮映射階段的中間輸出,而不是最終輸出。 – vefthym

+0

但它的地圖只有工作 –

回答

2

以下的伎倆 FileOutputFormat.setCompressOutput(job, true); FileOutputFormat.setOutputCompressorClass(job, org.apache.hadoop.io.compress.SnappyCodec.class);

請注意,這有設置outputpath之前以相同的順序做做如上圖所示。

0

,只需設置參數org.apache.hadoop.io.compress.SnappyCodec是不夠的。你應該從谷歌下載snappy並構建它們,然後將構建文件複製到hadoop lib目錄中。

你可以在谷歌搜索「如何在hadoop上使用snappy」,有一篇文章,但它是用中文寫的。 link

0

你現在擁有的是壓縮映射階段的中間輸出。相反,你應該使用下面的命令(見this presentation,特別是滑動9瞭解更多詳情):

conf.setOutputFormat(SequenceFileOutputFormat.class); 
conf.set("mapreduce.output.fileoutputformat.compress.codec", "org.apache.hadoop.io.compress.SnappyCodec"); 

或任何你想要的替代品,但不包括在這些配置中的單詞「地圖」,否則會被關於中間輸出。

+0

其地圖只有工作....沒有減速器 –