首先,我在考虑使用什么来将事件引入Hadoop,在那里存储它们并定期对它们进行分析(可能使用Ooozie来安排定期分析)Kafka或Flume,并认为Kafka可能更好解决方案,因为我们还有一个进行事件处理的组件,所以这样,批处理和事件处理组件都以相同的方式获取数据。
但是知道我正在寻找具体的建议如何从经纪人那里获取数据到Hadoop。
我发现here Flume可以与Kafka结合使用
也可以在同一页面和Kafka documentation中找到名为Camus的内容
我对能做到这一点的更好(更简单,记录更好的解决方案)感兴趣吗?另外,有没有任何示例或教程如何做?
我应该何时使用此变体而不是更简单的高级消费者?
如果有另外一个/更好的解决方案而不是这两个,我会打开建议。
由于
答案 0 :(得分:2)
您可以使用flume将数据从Kafka转储到HDFS。 Flume有kafka源和下沉。它是属性文件更改的问题。下面给出一个例子。
步骤:
创建一个kafka主题
kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 -- partitions 1 --topic testkafka
使用kafka控制台生成器
写入上面创建的主题kafka-console-producer --broker-list localhost:9092 --topic testkafka
使用以下属性配置水槽代理
flume1.sources = kafka-source-1
flume1.channels = hdfs-channel-1
flume1.sinks = hdfs-sink-1
flume1.sources.kafka-source-1.type = org.apache.flume.source.kafka.KafkaSource
flume1.sources.kafka-source-1.zookeeperConnect = localhost:2181
flume1.sources.kafka-source-1.topic =testkafka
flume1.sources.kafka-source-1.batchSize = 100
flume1.sources.kafka-source-1.channels = hdfs-channel-1
flume1.channels.hdfs-channel-1.type = memory
flume1.sinks.hdfs-sink-1.channel = hdfs-channel-1
flume1.sinks.hdfs-sink-1.type = hdfs
flume1.sinks.hdfs-sink-1.hdfs.writeFormat = Text
flume1.sinks.hdfs-sink-1.hdfs.fileType = DataStream
flume1.sinks.hdfs-sink-1.hdfs.filePrefix = test-events
flume1.sinks.hdfs-sink-1.hdfs.useLocalTimeStamp = true
flume1.sinks.hdfs-sink-1.hdfs.path = /tmp/kafka/%{topic}/%y-%m-%d
flume1.sinks.hdfs-sink-1.hdfs.rollCount=100
flume1.sinks.hdfs-sink-1.hdfs.rollSize=0
flume1.channels.hdfs-channel-1.capacity = 10000
flume1.channels.hdfs-channel-1.transactionCapacity = 1000
将上述配置文件保存为example.conf
运行水槽剂
flume-ng agent -n flume1 -c conf -f example.conf - Dflume.root.logger=INFO,console
现在,数据将在以下路径下转储到HDFS位置
/tmp/kafka/%{topic}/%y-%m-%d
答案 1 :(得分:0)
大多数时候,我看到人们使用加缪与azkaban
你可以在Mate1的github回购中实现Camus。它不是一个教程,但我认为它可以帮助你