【发布时间】:2017-06-24 16:19:04
【问题描述】:
虽然我能够将 Flume 数据(来自 Kafka)正确存储在 HDFS 中,但我无法将它们存储在 HBase 中...平台是 Cloudera 5.10.1。
我的水槽配置是:
tier1.sources = source1
tier1.channels = channel1
#tier1.sinks = hdfs1
tier1.sinks = hbase1
tier1.sources.source1.type = org.apache.flume.source.kafka.KafkaSource
tier1.sources.source1.zookeeperConnect = master3d.localdomain:2181
tier1.sources.source1.topics.regex = application.data.*
tier1.sources.source1.channels = channel1
tier1.sources.source1.interceptors = i1
tier1.sources.source1.interceptors.i1.type = timestamp
tier1.sources.source1.kafka.consumer.timeout.ms = 100
tier1.sources.source1.kafka.consumer.group.id = flume
tier1.channels.channel1.type = memory
tier1.channels.channel1.capacity = 10000
tier1.channels.channel1.transactionCapacity = 1000
tier1.sinks.hbase1.type = hbase
tier1.sinks.hbase1.table = application_data
tier1.sinks.hbase1.columnFamily = json
tier1.sinks.hbase1.serializer = org.apache.flume.sink.hbase.SimpleHbaseEventSerializer
tier1.sinks.hbase1.channel = channel1
#tier1.sinks.hdfs1.type = hdfs
#tier1.sinks.hdfs1.hdfs.path = /tmp/kafka/%{topic}/%y-%m-%d
#tier1.sinks.hdfs1.hdfs.rollInterval = 5
#tier1.sinks.hdfs1.hdfs.rollSize = 0
#tier1.sinks.hdfs1.hdfs.rollCount = 0
#tier1.sinks.hdfs1.hdfs.fileType = DataStream
#tier1.sinks.hdfs1.channel = channel1
我通过以下方式创建了 Hbase 表:
hbase(main):005:0> create 'application_data', 'json'
0 row(s) in 1.2250 seconds
但是对该表的扫描命令总是返回
hbase(main):021:0> scan 'application_data'
ROW COLUMN+CELL
0 row(s) in 0.0100 seconds
我已将 Flume 和 Hbase Master 置于 DEBUG 中,但我没有看到任何错误或警告。我可以看到 Flume 用户在 Hbase 中获得连接并检查表的存在。 HBase 上没有 Kerberos 身份验证。 Kafka 主题确实有数据,因为我刚刚仔细检查了控制台使用者和 hdfs 接收器。
我只是想知道是否有人可以在这里看到错误或指出我正确的方向。我想我在这里没有做任何奇怪的事情。
谢谢!
【问题讨论】:
-
或许可以考虑使用 Kafka Connect 而不是 Flume。 HBase 有几个 Kafka Sink 连接器,例如 docs.datamountaineer.com/en/latest/hbase.html
-
谢谢汉斯!我知道那个连接器,但我的客户更喜欢 Cloudera-only 解决方案。根据文档,上述内容应该可以正常工作。
-
我有类似的设置并在生产中使用 Hbase sink,但我通常自己实现HbaseEventSerializer。而且我还指定了 zookeeper 主机,但是,它是可选属性。
标签: hadoop hbase cloudera flume