我的HDFS系统中有一个文件夹,其中包含使用Snappy编解码器压缩的文本文件。
通常,在Hadoop Streaming作业中读取GZIP压缩文件时,会自动进行解压缩。但是,使用Snappy压缩数据时不会发生这种情况,我无法处理数据。
如何阅读这些文件并在Hadoop Streaming中处理它们?
非常感谢提前。
更新:
如果我使用命令hadoop fs -text file
它可以工作。问题只发生在使用hadoop流时,数据在传递给我的python脚本之前没有解压缩。
答案 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)中读取。