hadoop - 如何将Gobblin输出分成30分钟的分区?

标签 hadoop apache-kafka hdfs camus gobblin

我们正计划从加缪迁移到哥布林。在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/

还有其他可用于实现此目的的配置吗?

最佳答案

通过在自定义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);
}

现在将在所需的时间粒度上生成分区。

关于hadoop - 如何将Gobblin输出分成30分钟的分区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51421067/

相关文章:

java - 如何静态分析jar包(map-reduce应用程序)并提取一些影响执行时间的功能?

java - Kafka 简单消费者 - 迭代器出错

macos - MacOS 上的 Dockerized Kafka 失败

hadoop - hadoop中的数据比较

java - Mapreduce 作业因 IO 异常而失败

hadoop - 已安装 Spark 但未找到命令 'hdfs' 或 'hadoop'

Hadoop NameNode IP 地址

testing - 如何在2.4版中找到hadoop-exmaples.jar?

hadoop - JobTracker 失败

apache-kafka - Kafka多个使用者用于一个分区