初识flume
Posted 萧殄之家
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识flume相关的知识,希望对你有一定的参考价值。
一、Overview
1. 简介
Apache Flume是一个分布式,可靠且可用的系统,用于有效地从许多不同的源收集,聚合和移动大量日志数据到集中式数据存储。
Apache Flume的使用不仅限于日志数据聚合。由于数据源是可定制的,因此Flume可用于传输大量事件数据,包括但不限于网络流量数据,社交媒体生成的数据,电子邮件消息以及几乎任何可能的数据源。
2. 数据流模型
二、Setup
1. 配置agent
Flume agent 的配置保存在一个本地的配置文件中,这是一个遵循 Java 配置文件格式的文本文件。我们可以在同一个配置文件中配置一个或者多个 agent(s),配置文件中包含每个 agent 的 source 、sink 和 channel 属性,已经它们之间如何连接(wired)在一起来形成数据流。
2. 配置 agent 中的单个组件
3. 连接这些组件
agent 需要知道要加载哪些单独的组件,以及它们如何连接起来形成数据流。这是通过列出agent中的每个 source、sink 和 channel 的名称来完成的,配置文件中需要为每个 source 和 sink 指定连接的 channel 。比如,一个 agent 将 events 从一个叫做 avroWeb 的 Avro source, 经过名称为file-channel 的 channel 传递到叫做 hdfs-cluster1 的 HDFS sink,在配置文件中要包含这些组件的名称,并且将 file-channel 作为共享的 channel,连接到 avroWEb source 和 hdfs-cluster1 sink 上。
4. 开启 agent
通过 shell 命令 flume-ng 来开启 agent,需要运行的脚本位于 flume 发行版的 bin 目录下。你需要指定 agent 的名称、配置目录和配置文件。
以下为一个简单实例:
这个例子给出一个配置文件示例,描述一个单节点的 flume 部署。这个配置文件可以让你生成 events,随后在控制台打印出 logs。
# example.conf: A single-node Flume configuration
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
这个配置文件定义了一个名为 a1 的 agent, a1 的 source 监听着来自端口 44444 的数据,a1 的 channel 将 event 数据缓存在内存中, a1 的 sink 将 event 数据打印到控制台。这个配置文件给各种组件进行了命名,然后指定了它们的类型和配置参数。一个给定的配置文件可以定义多个命名 agents,当一个给定的 flume 进程启动时,flume 会传递一个标志(flag),告诉它要显示哪一个命名 agent。
我们可以用下面的命令启动 flume:
[/usr/local/Cellar/flume/1.8.0]$ flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console
注意,在一个完整部署中,们通常会包括另外一个选项:
--conf=<conf-dir>
,<conf-dir>
目录包括shell
脚本flume-env.sh
和一个log4j
属性文件。在本例中,我们传递了一个Java
选项,强制 flume 将日志输出至控制台,并且不使用自定义环境脚本。
重新打开一个终端,使用 telnet 连接本地 44444 端口,向 flume 发送 event:
telnet localhost 44444
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Hello nihao!
OK
flume 收到 event:
[/usr/local/Cellar/flume/1.8.0]$
...
...
...
2019-02-25 19:52:44,098 INFO source.NetcatSource: Source starting
2019-02-25 19:52:44,126 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]
2019-02-25 19:53:48,514 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 6E 69 68 61 6F 21 0D Hello nihao!. }
以上是关于初识flume的主要内容,如果未能解决你的问题,请参考以下文章
打怪升级之小白的大数据之旅(七十一)<Hadoop生态:初识Flume>
打怪升级之小白的大数据之旅(七十一)<Hadoop生态:初识Flume>
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段