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

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

  • Avro
  • 镶木地板
  • 序列文件

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

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

【问题讨论】:

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

标签: hadoop compression avro parquet sequencefile


【解决方案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
    编解码器在输出中应该是可读的。
  • 不错!很高兴知道。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-16
  • 2012-01-29
  • 1970-01-01
相关资源
最近更新 更多