我需要有关我想以镶木地板格式(带有每日分区器)放入HDFS的kafka主题的帮助。
我在kafka主题中有很多数据,基本上都是这样的json数据:
{"title":"Die Hard","year":1988,"cast":["Bruce Willis","Alan Rickman","Bonnie Bedelia","William Atherton","Paul Gleason","Reginald VelJohnson","Alexander Godunov"],"genres":["Action"]}
{"title":"Toy Story","year":1995,"cast":["Tim Allen","Tom Hanks","(voices)"],"genres":["Animated"]}
{"title":"Jurassic Park","year":1993,"cast":["Sam Neill","Laura Dern","Jeff Goldblum","Richard Attenborough"],"genres":["Adventure"]}
{"title":"The Lord of the Rings: The Fellowship of the Ring","year":2001,"cast":["Elijah Wood","Ian McKellen","Liv Tyler","Sean Astin","Viggo Mortensen","Orlando Bloom","Sean Bean","Hugo Weaving","Ian Holm"],"genres":["Fantasy »]}
{"title":"The Matrix","year":1999,"cast":["Keanu Reeves","Laurence Fishburne","Carrie-Anne Moss","Hugo Weaving","Joe Pantoliano"],"genres":["Science Fiction"]}
该主题的名称是:test
我想将这些数据以拼花格式放入我的HDFS群集中。 但是我在接收器连接器配置上遇到了麻烦。 我为此使用融合的hdfs-sink-connector。
这是我到目前为止要做的:
{
"name": "hdfs-sink",
"config": {
"name": "hdfs-sink",
"connector.class": "io.confluent.connect.hdfs.HdfsSinkConnector",
"tasks.max": "1",
"topics": "test",
"hdfs.url": "hdfs://hdfs-IP:8020",
"hadoop.home": "/user/test-user/TEST",
"flush.size": "3",
"locale": "fr-fr",
"timezone": "UTC",
"format.class": "io.confluent.connect.hdfs.parquet.ParquetFormat",
"partitioner.class": "io.confluent.connect.hdfs.partitioner.DailyPartitioner",
"consumer.auto.offset.reset": "earliest",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter.schemas.enable": "true",
"value.converter.schemas.enable": "true"
}
}
一些关于为什么我如此配置连接器的解释:
我知道,也许我必须使用纲要注册表将数据格式化为镶木地板,但是我不知道该怎么做。并且有必要吗?
您能帮我吗?
谢谢
答案 0 :(得分:1)
我还没有亲自使用ParquetFormat
,但是
AvroConverter
,并添加value.converter.schema.registry.url
属性,这要求您必须运行并安装Confluent Schema Registry,是的。 "value.converter.schemas.enable": "true"
,并且我猜您的连接器无法正常工作,因为您的记录不是上述格式。 基本上,没有模式,JSON解析器将无法知道Parquet需要编写哪些“列”。
Daily Partitioner每天不创建一个文件,仅创建一个目录。每个flush.size
您将获得一个文件,并且还为刷新文件的预定轮换间隔进行了配置。此外,每个Kafka分区将只有一个文件。
此外,"consumer.auto.offset.reset": "earliest",
仅在connect-distribtued.properties
文件中有效,而不适用于基于每个连接器的AFAIK。
由于我个人没有使用过ParquetFormat
,所以我可以提供所有建议,但是我使用other tools like NiFi来达到类似的目标,这将使您不必更改现有的Kafka生产者代码。
或者,使用JSONFormat
代替,但是,Hive集成不会自动运行,并且表必须是预定义的(无论如何,这都将需要您的主题有一个架构)。