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类型说明
MemoryEvent 数据存储在内存中
FileEvent数据存储在磁盘文件中
——————————————————————————————————
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相关属性:


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值