我有很多的文件在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
)我也试过在一个单一的文件,同样的错误运行。
有什么建议?
问题的根本原因是:你的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” - 但它工作得很好:)
一个简单的方法来解压缩/解压缩无论出于何种原因中HDFS文件
hadoop fs -text /hdfs-path-to-zipped-file.gz | hadoop fs -put - /hdfs-path-to-unzipped-file.txt
围绕试验后,我发现,如果你这样做修改,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
Hadoop的可以读取gzip格式的压缩文件,但这是从zip格式不同。 Hadoop的无法读取压缩文件AFAIK。