如何将gobblin输出划分为30分钟的分区?

0yycz8jy  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(403)

我们计划从加缪迁移到戈布林。在加缪,我们使用的配置如下:

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/
有没有其他配置可以用来实现这一点?

j7dteeu8

j7dteeu81#

通过在自定义writerpartitioner中实现partitionermethod获得了一个解决方法:
在分区器中获取记录级时间戳时,我们只需要使用下面提到的方法发送处理后的时间戳millis。

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);
}

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

相关问题