4

我在 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

4 回答 4

1

问题的根本原因是:您从 hadoop 获得了许多(文本)信息(在您接收数据之前)。

例如 hdfs dfs -cat hdfs://hdm1.gphd.local:8020/hive/gphd/warehouse/my.db/my/part-m-00000.gz | 猫猫 | wc -l 也不起作用 - 带有“gzip:stdin:不是 gzip 格式”错误消息。

因此,您应该跳过这个“不必要的”信息。就我而言,我必须跳过 86 行

因此我的一行命令将是这样的(用于计算记录): hdfs dfs -cat hdfs://hdm1.gphd.local:8020/hive/gphd/warehouse/my.db/my/part-m-00000.gz |尾-n+86 | 猫猫 | wc -l

注意:这是一种解决方法(不是真正的解决方案)并且非常丑陋 - 因为“86” - 但它工作正常:)

于 2014-09-30T16:42:11.450 回答
0

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

hadoop fs -text /hdfs-path-to-zipped-file.gz | hadoop fs -put - /hdfs-path-to-unzipped-file.txt
于 2014-06-29T16:13:17.383 回答
0

经过试验,我发现如果您对 hadoop 流进行此修改,您将在一个新目录中解压缩所有 gzip 文件。文件名全部丢失(重命名为典型的部分 XXXX 名称),但这对我有用。

我推测这是可行的,因为 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
于 2017-04-28T10:35:04.553 回答
-2

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

于 2013-08-24T23:25:54.427 回答