【问题标题】:Using Kafka to import data to Hadoop使用 Kafka 将数据导入 Hadoop
【发布时间】:2014-11-04 12:10:49
【问题描述】:

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

但我知道我正在寻找具体的建议,如何将数据从代理获取到 Hadoop。

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

  • Flume - 包含 Kafka Source(消费者)和 Sink(生产者)

在同一页面和Kafka documentation 中还发现有一个叫做Camus 的东西

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

我感兴趣的是什么会更好(更容易,更好的文档化解决方案)来做到这一点?另外,有没有示例或教程如何做到这一点?

我什么时候应该使用这种变体而不是更简单的高级消费者

如果有比这两个更好的解决方案,我愿意提供建议。

谢谢

【问题讨论】:

标签: hadoop flume apache-kafka


【解决方案1】:

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

步骤:

  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
    

将上面的配置文件保存为example.conf

  1. 运行水槽代理

    flume-ng agent -n flume1 -c conf -f example.conf -    Dflume.root.logger=INFO,console
    

数据现在将转储到以下路径下的 HDFS 位置

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

【讨论】:

  • 主题块在目标路径中填充了一个空值,至少在我的情况下......官方水槽文档没有列出“主题”景观序列。你试过了吗?我需要它工作。谢谢
【解决方案2】:

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

您可以在 Mate1 的 github 存储库中了解他们对 Camus 的实现。这不是一个教程,但我认为它可以帮助你

https://github.com/mate1/camus

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多