Apache Flume 简明教程

Apache Flume - Configuration

安装 Flume 后,我们需要使用配置文件对其进行配置,配置文件是一个具有 key-value pairs 的 Java 属性文件。我们需要将值传递到文件中的键。

在 Flume 配置文件中,我们需要 −

  1. 命名当前代理的组件。

  2. Describe/Configure the source.

  3. Describe/Configure the sink.

  4. Describe/Configure the channel.

  5. 将源和汇聚绑定到通道。

通常我们可以在 Flume 中有多个代理。我们可以使用唯一名称来区分每个代理。并使用此名称,我们必须配置每个代理。

Naming the Components

首先,您需要对组件命名/列出组件,例如代理的源、汇聚和通道,如下所示。

agent_name.sources = source_name
agent_name.sinks = sink_name
agent_name.channels = channel_name

Flume 支持各种源、汇聚和通道。它们列在下面的表格中。

Sources

Channels

Sinks

Avro 源Thrift 源Exec 源JMS 源Spooling 目录源Twitter 1% firehose 源Kafka 源NetCat 源Sequence Generator 源Syslog 源Syslog TCP 源Multiport Syslog TCP 源Syslog UDP 源HTTP 源Stress 源Legacy 源Thrift Legacy 源Custom 源Scribe 源

Memory 通道JDBC 通道Kafka 通道File 通道Spillable Memory 通道Pseudo Transaction 通道

HDFS 汇聚Hive 汇聚Logger 汇聚Avro 汇聚Thrift 汇聚IRC 汇聚File Roll 汇聚Null 汇聚HBase 汇聚AsyncHBase 汇聚MorphlineSolr 汇聚ElasticSearch 汇聚Kite Dataset 汇聚Kafka 汇聚

您可以使用其中的任何一个。例如,如果使用 Twitter 源通过内存通道将 Twitter 数据传输到 HDFS 收集器,且代理名称 ID 为 TwitterAgent ,则:

TwitterAgent.sources = Twitter
TwitterAgent.channels = MemChannel
TwitterAgent.sinks = HDFS

列出代理组件后,您必须通过向属性提供值来描述源、收集器和通道。

Describing the Source

每个源将有一个单独的属性列表。名为“type”的属性是每个源的共有属性,用于指定我们正在使用的源类型。

除属性“type”外,还需要提供特定源的所有 required 属性的值才能对其进行配置,如下所示。

agent_name.sources. source_name.type = value
agent_name.sources. source_name.property2 = value
agent_name.sources. source_name.property3 = value

例如,如果我们考虑 twitter source ,则以下属性是我们必须为其提供值才能对其进行配置的属性。

TwitterAgent.sources.Twitter.type = Twitter (type name)
TwitterAgent.sources.Twitter.consumerKey =
TwitterAgent.sources.Twitter.consumerSecret =
TwitterAgent.sources.Twitter.accessToken =
TwitterAgent.sources.Twitter.accessTokenSecret =

Describing the Sink

与源一样,每个收集器都将有一个单独的属性列表。名为“type”的属性是每个收集器的共有属性,用于指定我们正在使用的收集器类型。除属性“type”外,还需要提供特定收集器所有 required 属性的值才能对其进行配置,如下所示。

agent_name.sinks. sink_name.type = value
agent_name.sinks. sink_name.property2 = value
agent_name.sinks. sink_name.property3 = value

例如,如果我们考虑 HDFS sink ,则以下属性是我们必须为其提供值才能对其进行配置的属性。

TwitterAgent.sinks.HDFS.type = hdfs (type name)
TwitterAgent.sinks.HDFS.hdfs.path = HDFS directory’s Path to store the data

Describing the Channel

Flume 提供了多种通道可以在源和收集器之间传输数据。因此,除了源和通道之外,还需要描述代理中使用的通道。

要描述每个通道,您需要设置必需的属性,如下所示。

agent_name.channels.channel_name.type = value
agent_name.channels.channel_name. property2 = value
agent_name.channels.channel_name. property3 = value

例如,如果我们考虑 memory channel ,则以下属性是我们必须为其提供值才能对其进行配置的属性。

TwitterAgent.channels.MemChannel.type = memory (type name)

Binding the Source and the Sink to the Channel

由于通道连接了源和收集器,因此需要将两者都绑定到通道,如下所示。

agent_name.sources.source_name.channels = channel_name
agent_name.sinks.sink_name.channels = channel_name

以下示例展示了如何将源和收集器绑定到通道。在此,我们考虑 twitter source, memory channel,HDFS sink

TwitterAgent.sources.Twitter.channels = MemChannel
TwitterAgent.sinks.HDFS.channels = MemChannel

Starting a Flume Agent

配置完成后,我们必须启动 Flume 代理。执行方式如下:

$ bin/flume-ng agent --conf ./conf/ -f conf/twitter.conf
Dflume.root.logger=DEBUG,console -n TwitterAgent

其中:

  1. agent - 启动 Flume 代理的命令

  2. --conf ,-c<conf> - 使用 conf 目录中的配置文件

  3. -f<file> - 如果缺少,指定配置文件路径

  4. --name, -n <name> - twitter 代理的名称

  5. -D property =value - 设置 Java 系统属性值。