我正在尝试使用Confluent平台提供的kafka-hdfs-connector将数据从Kafka复制到Hive表中。虽然我能够成功地做到这一点,但我想知道如何根据时间间隔对输入数据进行分配。例如,我希望每5分钟创建一个新分区。
我用 partition.duration.ms 尝试了 io.confluent.connect.hdfs.partitioner.TimeBasedPartitioner ,但我认为我这样做是错误的。我在Hive表中只看到一个分区,所有数据都进入该特定分区。像这样:
hive> show partitions test;
OK
partition
year=2016/month=03/day=15/hour=19/minute=03
所有的avro对象都被复制到这个分区中。
相反,我希望有这样的东西:
hive> show partitions test;
OK
partition
year=2016/month=03/day=15/hour=19/minute=03
year=2016/month=03/day=15/hour=19/minute=08
year=2016/month=03/day=15/hour=19/minute=13
最初连接器将创建路径年= 2016 /月= 03 /天= 15 /小时= 19 /分钟= 03 ,并将继续将所有传入数据复制到此目录中以供下一个5分钟,并在第6分钟开始它应该创建一个新的路径,即年= 2016 /月= 03 /天= 15 /小时= 19 /分钟= 08 并复制下一个5的数据进入此目录的分钟,依此类推。
这是我的配置文件的样子:
name=hdfs-sink
connector.class=io.confluent.connect.hdfs.HdfsSinkConnector
tasks.max=1
topics=test
hdfs.url=hdfs://localhost:9000
flush.size=3
partitioner.class=io.confluent.connect.hdfs.partitioner.TimeBasedPartitioner
partition.duration.ms=300000
path.format='year'=YYYY/'month'=MM/'day'=dd/'hour'=HH/'minute'=MM/
locale=en
timezone=GMT
logs.dir=/kafka-connect/logs
topics.dir=/kafka-connect/topics
hive.integration=true
hive.metastore.uris=thrift://localhost:9083
schema.compatibility=BACKWARD
如果有人能指出我正确的方向,那将会非常有帮助。如果需要,我很乐意分享更多细节。不要让这个问题看起来像一个永无止境的问题。
非常感谢!
答案 0 :(得分:4)
你在path.format中的分钟字段是错误的:
path.format='year'=YYYY/'month'=MM/'day'=dd/'hour'=HH/'minute'=MM/
它应该是:
path.format='year'=YYYY/'month'=MM/'day'=dd/'hour'=HH/'minute'=mm/