使用Kafka将数据导入Hadoop

时间:2014-11-04 12:10:50

标签: hadoop flume apache-kafka

首先,我在考虑使用什么来将事件引入Hadoop,在那里存储它们并定期对它们进行分析(可能使用Ooozie来安排定期分析)Kafka或Flume,并认为Kafka可能更好解决方案,因为我们还有一个进行事件处理的组件,所以这样,批处理和事件处理组件都以相同的方式获取数据。

但是知道我正在寻找具体的建议如何从经纪人那里获取数据到Hadoop。

我发现here Flume可以与Kafka结合使用

  • Flume - 包含Kafka Source(消费者)和Sink(制作人)

也可以在同一页面和Kafka documentation中找到名为Camus的内容

  • Camus - LinkedIn的Kafka => HDFS管道。这个用于LinkedIn的所有数据,效果很好。

我对能做到这一点的更好(更简单,记录更好的解决方案)感兴趣吗?另外,有没有任何示例或教程如何做?

我应该何时使用此变体而不是更简单的高级消费者

如果有另外一个/更好的解决方案而不是这两个,我会打开建议。

由于

2 个答案:

答案 0 :(得分:2)

您可以使用flume将数据从Kafka转储到HDFS。 Flume有kafka源和下沉。它是属性文件更改的问题。下面给出一个例子。

步骤:

  1. 创建一个kafka主题

    kafka-topics --create --zookeeper localhost:2181 --replication-factor 1 --     partitions 1 --topic testkafka
    
  2. 使用kafka控制台生成器

    写入上面创建的主题
    kafka-console-producer --broker-list localhost:9092 --topic testkafka
    
  3. 使用以下属性配置水槽代理

    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
    
  4. 将上述配置文件保存为example.conf

    1. 运行水槽剂

      flume-ng agent -n flume1 -c conf -f example.conf -    Dflume.root.logger=INFO,console
      
    2. 现在,数据将在以下路径下转储到HDFS位置

      /tmp/kafka/%{topic}/%y-%m-%d
      

答案 1 :(得分:0)

大多数时候,我看到人们使用加缪与azkaban

你可以在Mate1的github回购中实现Camus。它不是一个教程,但我认为它可以帮助你

https://github.com/mate1/camus