如何限制 apache gobblin 输出产生的文件数量?

How to limit the amount of files produced by apache gobblin's output?

我目前正在使用 apache gobblin 读取 kafka 主题。我查看了文档以检查是否有限制 gobblin 生成的文件数量的配置,但找不到它。

是否可以限制这个?

谢谢!

没有配置可以直接控制 Gobblin 为 Kafka -> 数据湖摄取生成的文件数量。有几个因素决定文件输出的数量:1. 创建的工作单元数量,以及 2. 您的管道是否使用 PartitionedDataWriter。在分区写入的情况下,文件的数量最终由输入数据流决定。例如,如果您的管道使用 TimeBasedAvroWriterPartitioner(通常用于以 YYYY/MM/DD/HH 格式写出文件)配置,并将 Kafka 消息的事件时间作为分区键,您最终会得到很多小文件如果您的输入 Kafka 流有大量延迟数据,则在您的目标系统中。

但是,您确实有一些配置可以限制 Kafka 源在给定 运行 中创建的工作单元的数量。在 Kafka 的情况下,每个工作单元对应于分配给单个 Gobblin 任务的单个主题的主题分区的子集。

  1. mr.job.max.mappers:限制每个 运行 中创建的映射器(或 Gobblin 任务)的数量(因此,限制工作单元的总数),以及
  2. mr.target.mapper.size:直观地映射到每个 Gobblin 任务将拉入单个 运行.
  3. 的最大记录数

您可以减少第一个配置并将第二个配置设置为更大的值,这将达到减少工作单元数量和输出文件数量的预期效果。

除了上述配置外,Gobblin 还有一个压缩实用程序(MapReduce 作业),可将数据摄取管道生成的小文件合并为少量大文件。一个常见的生产设置是 运行 以 hourly/daily 节奏进行压缩,以限制数据湖中的文件数量。请参阅:https://gobblin.readthedocs.io/en/latest/user-guide/Compaction/ 了解更多详情。