【问题标题】:How to partition Gobblin output to 30 min partitions?如何将 Gobblin 输出分区为 30 分钟分区?
【发布时间】:2018-12-27 11:57:30
【问题描述】:

我们计划从加缪迁移到地精。在 Camus 中,我们使用了下面提到的配置:

etl.partitioner.class=com.linkedin.camus.etl.kafka.partitioner.TimeBasedPartitioner
etl.destination.path.topic.sub.dirformat=YYYY/MM/dd/HH/mm
etl.output.file.time.partition.mins=30

但在 Gobblin 中,我们的配置如下:

writer.file.path.type=tablename
writer.partition.level=minute (other options: daily,hourly..)
writer.partition.pattern=YYYY/MM/dd/HH/mm

这会在分钟级别上创建目录,但我们需要 30 分钟的分区。

在官方文档中找不到太多帮助:http://gobblin.readthedocs.io/en/latest/miscellaneous/Camus-to-Gobblin-Migration/

还有其他配置可以用来实现这个吗?

【问题讨论】:

    标签: hadoop apache-kafka hdfs camus gobblin


    【解决方案1】:

    通过在自定义 WriterPartitioner 中实现 partitionerMethod 获得了解决方法:

    在分区器中获取记录级时间戳时,我们只需要使用下面提到的方法发送处理后的时间戳毫秒。

    public static long getPartition(long timeGranularityMs, long timestamp, DateTimeZone outputDateTimeZone) {
        long adjustedTimeStamp = outputDateTimeZone.convertUTCToLocal(timestamp);
        long partitionedTime = (adjustedTimeStamp / timeGranularityMs) * timeGranularityMs;
        return outputDateTimeZone.convertLocalToUTC(partitionedTime, false);
    }
    

    现在分区正在以所需的时间粒度生成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-02
      • 2020-03-22
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-08-26
      • 1970-01-01
      相关资源
      最近更新 更多