查找用于 hadoop 文件的压缩编解码器

Posted

技术标签:

【中文标题】查找用于 hadoop 文件的压缩编解码器【英文标题】:Find compression codec used for an hadoop file 【发布时间】:2018-10-20 18:10:03 【问题描述】:

给定一个压缩文件,在 hadoop 平台上编写,采用以下格式之一:

Avro 镶木地板 序列文件

如何找到使用的压缩编解码器?假设使用以下压缩编解码器之一(并且文件名中没有文件扩展名):

活泼 Gzip(Avro 不支持) 放气(Parquet 不支持)

【问题讨论】:

您可以尝试使用十六进制编辑器或以其他方式检查原始字节... Avro 和 Parquet 至少具有明确定义的二进制格式,并将列出它们的内部压缩 【参考方案1】:

Parquet 的 Java 实现包括 parquet-tools 实用程序,提供了多个命令。请参阅其documentation page 了解构建和入门。各个命令的更详细描述由parquet-tools 自己打印。您要查找的命令是meta。这将显示各种元数据,包括压缩。您可以找到示例输出 here,显示 SNAPPY 压缩。

请注意,整个文件的压缩算法不必相同。不同的列块可以使用不同的压缩,因此压缩编解码器没有单个字段,而是每个列块都有一个字段。 (列块是属于一个行组的列的一部分。)然而,在实践中,您可能会发现所有列块都使用相同的压缩编解码器。

Avro 也有一个类似的实用程序,称为avro-tool。我对它不是很熟悉,但它 has 一个 getmeta 命令应该会显示你使用的压缩编解码器。

【讨论】:

这似乎是正确的做法,我会接受答案。有没有像 avro-tools 或 parquet-tools 这样的工具让 SequenceFile 提取元数据信息? 对不起,我不知道有任何命令行工具可以检查序列文件的元数据。虽然 API 允许查询,但这需要编写一个小型 Java 程序。 是的。显示序列文件的前 100 个字节似乎也足够了,例如: hdfs dfs -cat /path/to/file | head -c 100 SEQ!org.apache.hadoop.io.LongWritableorders'org.apache.hadoop.io.compress.GzipCodec 编解码器在输出中应该是可读的。 不错!很高兴知道。

以上是关于查找用于 hadoop 文件的压缩编解码器的主要内容,如果未能解决你的问题,请参考以下文章

Media Player 无法播放该文件。可能是播放机不支持该文件类型,或者不支持用于压缩该文件的编解码器

选择用于屏幕录制的视频编解码器

Huffman树及其编解码

Hadoop 序列文件中的压缩

使用 windows 编解码器解码音频文件

Hadoop 压缩页眉和页脚