我在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
)我也试过在一个文件上运行,同样的错误。
有什么建议吗?
4条答案
按热度按时间hlswsv351#
在尝试之后,我发现如果您对hadoop流媒体进行修改,您将在一个新目录中解压缩所有gzip文件。文件名都丢失了(改名为典型的x部分名称),但这对我很有效。
我推测这是因为hadoop在引擎盖下自动解压gzip文件,而cat只是响应解压后的输出
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”-但它工作得很好:)
zyfwsgd63#
一种简单的方法来解压/解压hdfs中的文件,无论出于什么原因
mm9b1k5b4#
hadoop可以读取gzip格式的压缩文件,但这与zip格式不同。hadoop无法读取zip文件。