2014-05-20 33 views
0

我運行Hadoop的數據流作業,像這樣:Hadoop的流產生,儘管mapred.output.compress無壓縮文件=真

hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar 
     -Dmapred.reduce.tasks=16 
     -Dmapred.output.compres=true 
     -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec 
     -input foo 
     -output bar 
     -mapper "python zot.py" 
     -reducer /bin/cat 

我得到其中包含正確的數據輸出目錄16個文件,但這些文件不壓縮:

$ hadoop fs -get bar/part-00012 
$ file part-00012 
part-00012: ASCII text, with very long lines 
  1. 爲什麼part-00012不壓縮?
  2. 如何將我的數據集拆分爲一個小數字(比如16個)gzip壓縮文件?

PS。另見「Using gzip as a reducer produces corrupt data

PPS。這是用於vw

PPPS。我想我可以做hadoop fs -get,gzip,hadoop fs -put,hadoop fs -rm 16倍,但是這看起來像是一種非同向的方式。

回答

1

您的mapred.output.compres參數中存在拼寫錯誤。如果你看看你的工作歷史,我會打賭它關閉。

此外,您可以避免將reduce階段放在一起,因爲這只是捕獲文件。除非您特別需要16部分文件,否則請嘗試將其僅保留爲地圖。

hadoop jar /opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-streaming.jar 
    -Dmapred.reduce.tasks=0 
    -Dmapred.output.compress=true 
    -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec 
    -input foo 
    -output bar 
    -mapper "python zot.py"