如何在不使用hadoop的情况下读取hdfs上的snappy压缩文件?

6ojccjat  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(606)

我正在以快速压缩格式在hdfs上存储文件。我希望能够在本地linux文件系统上检查这些文件,以确保创建它们的hadoop进程执行正确。
当我在本地复制它们并尝试用google标准库对它们进行反压缩时,它告诉我文件缺少snappy标识符。当我试图通过插入一个快速标识符来解决这个问题时,它会弄乱校验和。
我能做些什么来读取这些文件,而不必编写单独的hadoop程序或通过类似hive的程序来传递它?

jecbmhm3

jecbmhm31#

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

hadoop fs -text /path/filename

使用cloudera或hdp上的最新命令:

hdfs dfs -text /path/filename

如果目的是下载文本格式的文件以进行额外的检查和处理,则该命令的输出可以通过管道传输到本地系统上的文件。也可以使用head只查看文件的前几行。

tmb3ates

tmb3ates2#

这是因为hadoop使用的snappy有更多的元数据,这些元数据不是像https://code.google.com/p/snappy/,您需要使用hadoop native snappy来取消对下载的数据文件的捕捉。

mqkwyuun

mqkwyuun3#

请看一下cloudera博客上的这篇文章。它解释了如何在hadoop中使用snappy。基本上,原始文本上的snappy文件是不可拆分的,因此不能跨多个主机读取单个文件。
解决方案是以容器格式使用snappy,因此实际上您使用的是hadoop SequenceFile 压缩变形很快。如本回答中所述,可以将属性mapred.output.compression.codec设置为org.apache.hadoop.io.compress.snappycodec,并将作业输出格式设置为 SequenceFileOutputFormat .
然后阅读它,你应该只需要使用 SequenceFile.Reader 因为编解码器信息存储在文件头中。

相关问题