Flume实战(1)—single agent flow的实现

1.理论基础

Data Flow Model

# 列出agent的 sources, sinks and channels 
<Agent>.sources = <Source>
<Agent>.sinks = <Sink>
<Agent>.channels = <Channel1> <Channel2>

# 设置source的channel
<Agent>.sources.<Source>.channels = <Channel1> <Channel2> ...

# 设置sink的channel
<Agent>.sinks.<Sink>.channel = <Channel1>

需要注意的是:
- 一个source可以对接多个channel
- 一个sink只能对接一个channel

实现一个数据流的需求关键点就在于source和sink类型的选择

—> source和link的类型选择可以查看上一篇文章:Flume 理论

更详细的可查看官方文档


source,channel,sink 常用类型快速查看

Source类型 说明
Avro 支持avro 协议
Spooling 监听本地文件夹,把新增的文件采集到flume
netcat 从网络端口接受文本数据(多用于测试调试)
kafka 用于从kafka中读取数据
—————————— ————————————————————————
Channel类型 说明
Memory Event 数据存储在内存中
File Event数据存储在磁盘文件中
—————————— ————————————————————————
Sink 类型 说明
logger 把数据输出成logger日志(测试调试)
hdfs 把数据写入hdfs
avro 发送到此接收器的flume event将转化为avro event 并发送至配置的主机名:端口号
kafka 将数据发送至kafka

2. 示例一

需求:监控master节点8888端口的写入数据并输出到logger中。

分析:
- Source:数据流入,通过监控给定端口获取流数据,因此Source可选类型netcat
- Sink:数据流出,需求要求输出到logger中,因此可选logger类型

另外还需要安装两个工具:nc,telnet
centerOS 可以分别执行:yum install nc 和yum install telnet 进行安装。

步骤:
- 1.新建任意目录,目录下新建文件:nc_to_logger.conf

  • 2.配置文件代码如下
# 列出agent的source,channel,sink
a1.sources = s1
a1.channels = c1
a1.sinks = k1

#---------------------------
# 设置source的属性
a1.sources.s1.type = netcat
a1.sources.s1.bind = master
a1.sources.s1.port = 8888

# 设置channel的属性
a1.channels.c1.type = memory

#  设置sinks的type
a1.sinks.k1.type = logger

#-----------------------------
# 设置source的channel
a1.sources.s1.channels = c1

# 设置sink的channel
a1.sinks.k1.channel = c1
  • 3.运行
flume-ng agent -c conf -f nc_to_logger.conf -n a1 -Dflume.root.logger=INFO,console
  • 测试

前期准备:所有节点都配置好host,两台测试节点都需安装nc,telnet

另一台机器上命令行输入:telnet master 8888
随意输入字符,换行,看监控的master机器上是否有logger输出

结果如下:
slave1 节点:

master节点:

Event是Flume数据流传输中的基本数据单元,Source组件采集到数据将其包装成Event,推入Channel,Channel 又将Event 传输到Sink,最后由Sink进行输出。


3.实例二

需求:监控目录/usr/local/test/myFlumeTest/SpoolingDir,当有新增文件时将其写入hdfs中。

分析:
- Source:数据流入,通过监控指定目录获取数据,因此Source可选类型spooling
- Sink:数据流出,需求要求输出到hdfs中,因此选择hdfs类型

步骤:
- 1.写配置文件spooling_to_hdfs.conf,代码如下

```
# 列出agent的source,channel,sink
a1.sources = s1
a1.channels = c1
a1.sinks = k1

#---------------------------
# 设置source的属性
a1.sources.s1.type = spooldir
a1.sources.s1.spoolDir = /usr/local/test/myFlumeTest/SpoolingDir

# 设置channel的属性
a1.channels.c1.type = memory

#  设置sinks的type
a1.sinks.k1.type = hdfs
a1.sinks.k1.hdfs.path = /spoolingDir
a1.sinks.k1.hdfs.fileType = DataStream
a1.sinks.k1.hdfs.writeFormat = Text

#-----------------------------
# 设置source的channel
a1.sources.s1.channels = c1

# 设置sink的channel
a1.sinks.k1.channel = c1
```

- 2.运行

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

- 3.测试
- 1.模拟文件新增:在其他目录新建文件,随意写入内容,复制到监控的目录下。
- 2.查看hdfs文件目录,查看文件是否写入

![](http://ok7mrfi5x.bkt.clouddn.com/flume_test_04.png)

可以看到hdfs上新增了文件:/spoolingDir/FlumeData.1530794689076,打印查看结果如下

更多示例可自行进行测试:Source类型,Sink类型两两组合。
关于各种类型的参数设置可参考官方文档中的说明:

如:
Spooling Directory Source相关属性:


学会看文档也是一项很重要的技能啊:)

猜你喜欢

转载自blog.csdn.net/oXiMing1/article/details/80944178