$ 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
タスク数: 1、出力には次の 1 行があります。
1 行目: 1 2 202699
マッパーごとに1行が意図されているため、これは理にかなっています。
$ 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
上記と同じ結果が得られると予想していますが、1 行のテキスト (つまり wc) を処理する前に解凍が行われるはずですが、次の結果が得られます。
タスク数: 397、出力には 397 行あります。
Line1-396: 0 0 0
397 行目: 1 2 202699
mapred.map.tasks <>1 が非常に多い理由は何ですか? 分裂?gzip は分割できないと思うので、意図的に gzip を選択します。bzip2 と lzop コーデックを使用すると、同様の結果が得られました。
事前にご回答いただきありがとうございます。