从 Hadoop Streaming 读取 HDFS 上的 Snappy 压缩数据

Read Snappy Compressed data on HDFS from Hadoop Streaming

我的 HDFS 系统中有一个文件夹,其中包含使用 Snappy 编解码器压缩的文本文件。

通常,在 Hadoop Streaming 作业中读取 GZIP 压缩文件时,会自动解压。但是,使用 Snappy 压缩数据时不会发生这种情况,我无法处理数据。

如何读取这些文件并在 Hadoop Streaming 中处理它们?

非常感谢。

更新:

如果我使用命令 hadoop fs -text file 它会起作用。该问题仅在使用 hadoop 流时发生,数据在传递到我的 python 脚本之前未解压缩。

您是否在 core-site 中配置了 snappy 编解码器,例如:

<property>
  <name>io.compression.codecs</name>
  <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec,org.apache.hadoop.io.compress.BZip2Codec</value>
</property>

我想我找到了问题的答案。如果有人能证实这一点就太好了。

正在浏览 Cloudera 博客。我发现 this article 解释了 Snappy 编解码器。可以这样读:

One thing to note is that Snappy is intended to be used with a container format, like Sequence Files or Avro Data Files, rather than being used directly on plain text, for example, since the latter is not splittable and can’t be processed in parallel using MapReduce.

因此,可以使用 hadoop fs -text 读取使用 Snappy 编解码器在 HDFS 中压缩的文件,但不能在 Hadoop 流作业 (MapReduce) 中读取。