从Hadoop Streaming中读取有关HDFS的Snappy压缩数据

时间:2017-01-07 16:33:21

标签: hadoop hdfs hadoop-streaming compression snappy

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

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

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

非常感谢提前。

更新:

如果我使用命令hadoop fs -text file它可以工作。问题只发生在使用hadoop流时,数据在传递给我的python脚本之前没有解压缩。

2 个答案:

答案 0 :(得分:1)

您是否在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>

答案 1 :(得分:1)

我想我能回答这个问题。如果有人能证实这一点,那就太好了。

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

  

需要注意的一点是,Snappy旨在与容器格式一起使用,例如序列文件或Avro数据文件,而不是直接用于纯文本,例如,因为后者不可拆分而且不能使用MapReduce并行处理。

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