使用hadoop流媒体解压文件

zengzsys  于 2021-06-03  发布在  Hadoop
关注(0)|答案(4)|浏览(395)

我在hdfs中有很多文件,它们都是一个zip文件,里面有一个csv文件。我正在尝试解压缩这些文件,以便对它们运行流式处理作业。
我试过:

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 )我也试过在一个文件上运行,同样的错误。
有什么建议吗?

hlswsv35

hlswsv351#

在尝试之后,我发现如果您对hadoop流媒体进行修改,您将在一个新目录中解压缩所有gzip文件。文件名都丢失了(改名为典型的x部分名称),但这对我很有效。
我推测这是因为hadoop在引擎盖下自动解压gzip文件,而cat只是响应解压后的输出

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
ztmd8pv5

ztmd8pv52#

问题的根本原因是:您从hadoop获得许多(文本)信息(在接收数据之前)。
e、 g.hdfs dfs-cathdfs://hdm1.gphd.local:8020/hive/gphd/warehouse/my.db/my/part-m-00000.gz | zcat | wc-l也不工作-出现“gzip:stdin:not in gzip format”错误消息。
因此,您应该跳过这个“不必要的”信息。我得跳过86行
因此,我的一行命令是(用于计算记录):hdfs dfs-cathdfs://hdm1.gphd.local:8020/hive/gphd/warehouse/my.db/my/part-m-00000.gz | tail-n+86 | zcat | wc-l
注意:这是一个解决方法(不是一个真正的解决方案),非常难看-因为“86”-但它工作得很好:)

zyfwsgd6

zyfwsgd63#

一种简单的方法来解压/解压hdfs中的文件,无论出于什么原因

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

mm9b1k5b4#

hadoop可以读取gzip格式的压缩文件,但这与zip格式不同。hadoop无法读取zip文件。

相关问题