flume配置简介
配置简介
总的来说:
source用来接收数据
sinks用来发送数据
channel用来缓存数据
以下是一些相关类型,以后将会用到。
1.Source组件类型(用于接收从某个地方发送过来的数据)
Netcat Source
接受来自于数据客户端的请求数据,常用于测试开发
Exec Source
运行一个给定的unix指令,将指令的执行结果作为数据来源
Spooling Directory Source
监视指定目录的新文件,并从出现的新文件中解析事件
Kafka Source
获取来自于Kafka集群中数据
Sequence Generator Source
序列产生器,计数器从0开始每次+1到LONG.MAX_VALUE
Avro Source
接受来自于Avro Client请求数据,类似于Netcat Source
通常用于构建Flume集群和RPC通信数据的手机
2.Channel组件类型(用于缓存数据)
Memory Channel
将Event事件对象缓存到内存中
优点:快
缺点:存在数据丢失风险
JDBC Channel
将Event事件对象保存到DB中,目前只支持Derby
优点:安全
缺点:效率较低
File Channel
将Event事件对象保存到文件中
优点:安全
缺点:效率较低
Kafka Channel
将Event事件写入保存到Kafka集群
优点:高可用,数据备份
3.Sink组件(主要是输出文件,或者输出到其他主机或者发送信息到其他地方)
Logger Sink
以日志的形式输出采集到的数据
HDFS Sink
将采集到的数据最终写出到HDFS分布式文件系统,支持两种文件格式:文本和序列
注意:文件格式DataStream,采集到的数据不会进行序列化处理
每隔十分钟产生一个数据文件目录
File Roll Sink
基于文件滚动的sink输出,将采集到的数据写入保存到本地文件系统
Null Sink
将采集到所有的数据,全部丢弃
HBaseSinks
将采集到的数据写出保存到HBase非关系型数据库
安装flume(这里使用的是1.9版本)
这个文档建议用于1.6版本以上,因为涉及一些方法要自行调试,旧版本会比较麻烦。
1.下载安装前所需要的插件,用来简单测试flume。
yum install -y nc 下载插件
把我们要用的安装包下载
flume官方下载链接
安装包(点击就可以下载)
上传完我们的flume,然后解压,这些步骤不懂自行上网查询。
2.配置环境
export FLUME_HOME=你的flume路径
export PATH=$PATH:$FLUME_HOME/bin
export FLUME_CONF_DIR=$FLUME_HOME/conf
3.启动hadoop这里建议使用完全分布式,这里会涉及多个agent。
4.启动flume文件方法
[root@master conf]# flume-ng agent -n a1 -c ./ -f /example.conf -Dflume.root.logger=INFO,console
或者在flume/conf/flume.env.sh文件中加入
export JAVA_OPTS="-Dflume.root.logger=INFO,console"
各种配置文件
带有文件1,2的注意分开不同机器,注意看一下文档内容了解一下。
1、提示:
目前我这里用的是俩台机器分别都有hadoop3.x,flume1.9
192.168.120.129是我的主机
192.168.120.134是我的副机
2、各种配置方法
在flume目录中的conf目录
1、非持久化保存数据:文件名 example.conf
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1
a1.sinks = k1
a1.channels = c1
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
#配置sink类型为sink
a1.sinks.k1.type = logger
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
新打开一个会话窗口,链接flume。
nc localhost 44444(端口号)
然后随便输入文字
2、持久化保存数据
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1
a1.sinks = k1
a1.channels = c1 c2
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
#配置sink类型为sink
a1.sinks.k1.type = logger
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.channels.c2.type = file
a1.channels.c2.checkpointDir = /usr/local/src/flume/checkpoint
a1.channels.c2.dataDirs = /usr/local/src/flume/data
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c2
新打开一个会话窗口,链接flume。
nc localhost 44444(端口号)
然后随便输入文字
3、单个日志监控
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1
a1.sinks = k1
a1.channels = c1
#配置soure类型为exec
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F app.log
#配置sink类型为sink
a1.sinks.k1.type = logger
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
新打开一个会话窗口,链接flume。
nc localhost 44444(端口号)
然后随便输入文字
4、多个日志监控
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1
a1.sinks = k1
a1.channels = c1
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.positionFile =/usr/local/src/flume/conf/position.json
a1.sources.r1.filegroups.f1 = /usr/local/src/flume/conf/app.log
a1.sources.r1.filegroups.f2 = /usr/local/src/flume/conf/logs/.*log
a1.sinks.k1.type = logger
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
新打开一个会话窗口,链接flume。
nc localhost 44444(端口号)
然后随便输入文字
5、多个agent监控
文件一:
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1
a1.sinks = k1 k2
a1.channels = c1 c2
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
#配置sink类型为sink
a1.sinks.k1.type = logger
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = 192.168.120.129
a1.sinks.k2.port = 55555
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.channels.c2.type = memory
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2
文件二:
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1 r2
a1.sinks = k1
a1.channels = c1
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.positionFile =/usr/local/src/flume/conf/position.json
a1.sources.r1.filegroups.f1 = /usr/local/src/flume/conf/app.log
a1.sources.r1.filegroups.f2 = /usr/local/src/flume/conf/logs/.*log
a1.sources.r2.type = avro
a1.sources.r2.bind = 192.168.120.129
a1.sources.r2.port = 55555
#配置sink类型为sink
a1.sinks.k1.type = logger
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
a1.sources.r2.channels = c1
新打开文件1的会话窗口,链接flume。
nc localhost 44444(端口号)
然后随便输入文字
6、拦截器:
文件1:
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1
a1.sinks = k1 k2
a1.channels = c1 c2
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
#添加拦截器
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = host
#配置sink类型为sink
a1.sinks.k1.type = logger
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = 192.168.120.129
a1.sinks.k2.port = 55555
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
a1.channels.c2.type = memory
#将source 和 sink 绑定到channel 上
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1
文件2:
#定义agent名称为a1
#设置3个组件的名称
a1.sources =r1 r2
a1.sinks = k1
a1.channels = c1
#配置source类型为NetCat,监听地址为本机,端口为44444
a1.sources.r1.type = TAILDIR
a1.sources.r1.filegroups = f1 f2
a1.sources.r1.positionFile =/usr/local/src/flume/conf/position.json
a1.sources.r1.filegroups.f1 = /usr/local/src/flume/conf/app.log
a1.sources.r1.filegroups.f2 = /usr/local/src/flume/conf/logs/.*log
a1.sources.r2.type = avro
a1.sources.r2.bind = 192.168.120.129
a1.sources.r2.port = 55555
#配置sink类型为sink
a1.sinks.k1.type = logger
#配置channel类型为内存,内存队列最大容量为1000,一个事务中从source接收的Events数量或者发送给sink的Eveents数量最大为100
a1.channels.c1.type = memory
a1.channels.c1.capacity