Hadoop将平面文件流式传输到gzip

时间:2016-11-01 09:54:46

标签: hadoop gzip hadoop-streaming

我一直在尝试使用hadoop-streaming.jar在hadoop中压缩文件(管道分离的csv)。我在stackoverflow上找到了以下线程: Hadoop: compress file in HDFS? 我尝试了两种解决方案(cat / cut for mapper)。虽然我最终在HDFS中使用了一个gzip压缩文件,但它现在每行末尾都有一个制表符。任何想法如何摆脱这些?最后一个标签弄乱了我的最后一栏。

我已经尝试了以下两个命令(有很多种口味):

hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar \
  -Dmapred.output.compress=true \
  -Dmapred.compress.map.output=true \
  -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
  -Dmapred.reduce.tasks=0 \
  -input <filename> \
  -output <output-path> \
  -mapper "cut -f 2"

hadoop jar /usr/hdp/current/hadoop-mapreduce-client/hadoop-streaming.jar \
  -Dmapred.reduce.tasks=0 \
  -Dmapred.output.compress=true \
  -Dmapred.compress.map.output=true \
  -Dmapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \
  -input <filename> \
  -output <output-path> \
  -mapper /bin/cat \
  -inputformat org.apache.hadoop.mapred.TextInputFormat \
  -outputformat org.apache.hadoop.mapred.TextOutputFormat

我知道mapreduce会输出一个键值分隔标题,但是&#34; cut -f 2&#34; (也试过&#34; cut -f 2 -d,&#34;)应该只返回值部分,而不是选项卡。那么为什么每一行都以标签结尾?

我希望有人能够启发我。

0 个答案:

没有答案