使用Hadoop流解压文件(Unzip files using hadoop streaming)

2019-07-21 02:44发布

我有很多的文件在HDFS中,所有的人里面坐了一个CSV文件的zip文件。 我想解压缩文件,这样我就可以在上面运行streaming作业。

我试过了:

hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming.jar \
    -D mapred.reduce.tasks=0 \
    -mapper /bin/zcat -reducer /bin/cat \
    -input /path/to/files/ \
    -output /path/to/output

不过,我得到一个错误( subprocess failed with code 1 )我也试过在一个单一的文件,同样的错误运行。

有什么建议?

Answer 1:

问题的根本原因是:你的Hadoop得到很多(文本的)的相关信息(才能接收数据)。

例如HDFS DFS -cat HDFS://hdm1.gphd.local:8020 /蜂巢/ gphd /仓储/ my.db /我的/部分M-00000.gz | 用zcat | WC -l会也不行 - 与“压缩:标准输入:非gzip格式”的错误消息。

因此,你应该跳过这个“unneccesary”的相关信息。 在我来说,我必须跳过86行

因此,我的一行命令将这个(用于计数记录):HDFS DFS -cat HDFS://hdm1.gphd.local:8020 /蜂房/ gphd /仓库/ my.db /我的/部分-M-00000.gz |尾-n + 86 | 用zcat | 厕所-l

注:这是一种解决方法(不是一个真正的解决方案),并非常难看 - 因为“86” - 但它工作得很好:)



Answer 2:

一个简单的方法来解压缩/解压缩无论出于何种原因中HDFS文件

hadoop fs -text /hdfs-path-to-zipped-file.gz | hadoop fs -put - /hdfs-path-to-unzipped-file.txt


Answer 3:

围绕试验后,我发现,如果你这样做修改,Hadoop的数据流,你会得到一个新的目录中解压缩所有的gzip文件。 文件名都丢失了(改名为典型的部分-XXXX名),但是这为我工作。

我推测这个作品,因为Hadoop的自动解压缩引擎盖下gzip压缩的文件,和猫只是呼应的是解压缩输出

hadoop jar /usr/iop/4.2.0.0/hadoop-mapreduce/hadoop-streaming.jar \
    -D mapred.reduce.tasks=0 \
    -mapper /bin/cat \
    -input  /path-to-gzip-files-directory \
    -output /your-gunzipped-directory


Answer 4:

Hadoop的可以读取gzip格式的压缩文件,但这是从zip格式不同。 Hadoop的无法读取压缩文件AFAIK。



文章来源: Unzip files using hadoop streaming