如何在不使用Hadoop的情况下阅读HDFS上的Snappy压缩文件?

时间:2013-05-21 16:23:45

标签: hadoop compression hdfs snappy

我以Snappy压缩格式将文件存储在HDFS上。我希望能够在我的本地Linux文件系统上检查这些文件,以确保创建它们的Hadoop进程已正确执行。

当我在本地复制它们并尝试使用Google标准库解压缩它们时,它告诉我该文件缺少Snappy标识符。当我尝试通过插入Snappy标识符来解决这个问题时,它会弄乱校验和。

如果不必编写单独的Hadoop程序或通过Hive之类的程序传递这些文件,我该怎么做才能阅读这些文件?

3 个答案:

答案 0 :(得分:21)

我终于发现我可以使用以下命令读取HDFS上Snappy压缩文件的内容:

hadoop fs -text filename

如果要以文本格式下载文件以进行其他检查和处理,则可以将该命令的输出通过管道传送到本地系统上的文件。您也可以使用head来查看文件的前几行。

答案 1 :(得分:3)

请查看this post on Cloudera blog。它解释了如何将Snappy与Hadoop一起使用。基本上,原始文本上的Snappy文件不可拆分,因此您无法跨多个主机读取单个文件。

解决方案是以容器格式使用Snappy,所以基本上你使用压缩集为Hnaop SequenceFile作为Snappy。如上所述in this answer,您可以将属性 mapred.output.compression.codec 设置为 org.apache.hadoop.io.compress.SnappyCodec 并设置您的工作输出格式为SequenceFileOutputFormat

然后要阅读它,您只需要使用SequenceFile.Reader,因为编解码器信息存储在文件头中。

答案 2 :(得分:0)

多数民众赞成因为hadoop使用的snappy有一些更多的元数据,这些数据并不像https://code.google.com/p/snappy/这样的库不受欢迎,你需要使用hadoop native snappy来解除你下载的数据文件。