【问题标题】:avro.codec not working in hdfs sink connector for snappy compressionavro.codec 在 hdfs sink 连接器中无法快速压缩
【发布时间】:2024-04-25 05:25:01
【问题描述】:

我正在使用融合的 hdfs 接收器连接器,我以 avro 格式插入数据。

我希望使用 snappy 压缩来压缩数据。

Kafka: Does Confluent’s HDFS connector support Snappy compression? 我使用了上面线程中提到的解决方案

我添加了配置

avro.codec=snappy

但是,它对我不起作用 如 中一样,创建的文件未使用 snappy 压缩进行压缩。 通常,当我运行 spark 作业时,我的文件会附加 .snappy 文件扩展名 但是,在这种情况下,我认为不会发生这种情况。我假设我的文件没有被 snappy 压缩。

还有其他我遗漏的配置吗?

【问题讨论】:

  • “没有用”是什么意思?当您设置该属性时,您希望看到什么?
  • 与中一样,创建的文件未使用 snappy 压缩进行压缩。通常,当我运行 spark 作业时,我的文件会附加 .snappy 文件扩展名但是,在这种情况下,我没有看到这种情况发生。我假设我的文件没有被 snappy 压缩。
  • 文件扩展名没有任何意义,Kafka Connect AvroFormat 总是以 avro 文件扩展名作为后缀。我忘记了我是如何检查的,但我认为您需要使用十六进制查看器来检查数据以查看它在 Avro 标头中显示“snappy”(我使用 S3 Connect,而不是 HDFS,但我认为 Avro 文件编写器是相同的)... 如果您在没有编解码器的情况下编写相同的数据,您可能还会看到更大的文件
  • 好的!非常感谢!我使用 [hadoop jar /path/to/avro-tools.jar getmeta FILE_LOCATION_ON_HDFS --key 'avro.codec' ] 来检查我的文件的压缩情况,它显示出来了!这是我的一个错误,它工作得很好!谢谢!

标签: apache-kafka hdfs avro apache-kafka-connect confluent-platform


【解决方案1】:

如果您有可用的 Avro 工具,则可以使用它来检查文件

$ java -jar avro-tools-1.8.1.jar getmeta kafka-connect-file.avro

avro.schema {"type":"record","name":"...
avro.codec  snappy

还有一个十六进制编辑器

$ cat kafka-connect-file.avro | xxd | grep -B1 snappy

00001c00: 656e 7422 7d14 6176 726f 2e63 6f64 6563  ent"}.avro.codec
00001c10: 0c73 6e61 7070 7900 9fd1 5fb0 2a3a 45ba  .snappy..._.*:E.

要将文件转换为非快速的 Avro 文件,您可以使用 Avro 工具的recodec

$ java -jar avro-tools-1.8.1.jar recodec kafka-connect-file.avro > non-snappy.avro
$ ls -l *.avro  # Should see slight difference in Avro file sizes

【讨论】: