查找用于 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 文件的压缩编解码器的主要内容,如果未能解决你的问题,请参考以下文章