Hadoop:使用NLineInputFormat进行压缩?

时间:2013-03-27 21:40:21

标签: hadoop split compression streaming

$ cat abook.txt | base64 –w 0 >onelinetext.b64
$ hadoop fs –put onelinetext.b64 /input/onelinetext.b64
$ hadoop jar hadoop-streaming.jar  \
    -input /input/onelinetext.b64 \
    -output /output \
    -inputformat org.apache.hadoop.mapred.lib.NLineInputFormat \
    –mapper wc 
  

Num任务:1,输出有一行:

     

第1行:1 2 202699

这是有道理的,因为每个映射器都有一行。

$ bzip2 onelinetext.b64
$ hadoop fs –put onelinetext.b64.bz2  /input/onelinetext.b64.bz2
$ hadoop jar hadoop-streaming.jar \
      -Dmapred.input.compress=true \
      -Dmapred.input.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
      -input /input/onelinetext.b64.gz \
      -output /output \
      -inputformat org.apache.hadoop.mapred.lib.NLineInputFormat \
      –mapper wc 

我期待与上面相同的结果,'在处理单行文本(即wc)之前应该进行coz解压缩,但是,我得到了:

  

Num任务:397,输出有397行:

     

Line1-396:0 0 0

     

第397行:1 2 202699

知道为什么这么多mapred.map.tasks<> 1?分裂? 我故意选择gzip,因为我认为它不能拆分。 使用bzip2和lzop编解码器时,我得到了类似的结果。

提前感谢您的回答。

1 个答案:

答案 0 :(得分:0)

我认为这取决于你正在使用的Hadoop版本。例如,有HADOOP-4012 ...