一.flume介绍
1.flume是一个分布式的日志采集系统
2.在flume系统中,最核心的是agent,每个agent都相当于一个数据传递员。
在agent内部有source,sink,channel
source是获取数据的来源
sink是采集数据的传送目的,往下一级agent传递或者网存储系统传递数据
channel是agent内部传输通道,用于将数据从source传到sink
3.单个agent采集
多个agent采集
二.flume的简单使用--采集来自端口的信息
1.首先要在flume的conf目录下新建一个文件netcat-logger.conf(文件名自定义)
2.在该文件下编写以下内容
a1.sources = r1a1.sinks = k1a1.channels = c1# describe sourcea1.sources.r1.type = netcata1.sources.r1.bind = localhosta1.sources.r1.port = 44444# describe sinka1.sinks.k1.type = logger# describe channela1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100# describe the ralationship between source channel sinka1.sources.r1.channels = c1a1.sinks.k1.channel = c1
注意:最后一行的a1.sinks.k1.channel就是这么写,而不是a1.sinks.k1.channels
3.启动flume
在flume目录下输入如下命令
bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console
其中 -c是指定配置文件所在目录
-f是配置采集方案的文件
-n是指定我们的agent的名字
-Dflume.root.logger=INFO,console 是设置日志等级
4.测试
首先打开telnet,并向flume监听的端口发送消息
telnet localhost 44444
这时候在telnet发送的消息,flume都会在终端打印出来
telnet发送内容:
flume采集到的内容:
三.flume的简单使用--采集文件流信息
1.首先要在flume的conf目录下新建一个文件netcat-logger.conf(文件名自定义)
2.在该文件下编写以下内容
a1.sources = r1a1.sinks = k1a1.channels = c1# describe sourcea1.sources.r1.type = spooldira1.sources.r1.spoolDir = [监测的本地文件目录地址]a1.sources.r1.fileHeader = true# describe sinka1.sinks.k1.type = logger# describe channela1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100# describe the ralationship between source channel sinka1.sources.r1.channels = c1a1.sinks.k1.channel = c1
3.启动flume
在flume目录下输入如下命令
bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console
其中 -c是指定配置文件所在目录
-f是配置采集方案的文件
-n是指定我们的agent的名字
-Dflume.root.logger=INFO,console 是设置日志等级
4.测试
首先向待检测目录粘贴一个文件
flume采集之后会在终端输出信息
在检测目录中,传入的文件会被修改文件名,即在文件名后边添加.COMPLETED.
四.flume的简单使用--采集文件流信息到hdfs
1.首先要在flume的conf目录下新建一个文件netcat-logger.conf(文件名自定义)
2.在该文件下编写以下内容
a1.sources = r1a1.sinks = k1a1.channels = c1# describe source,here is the file test.loga1.sources.r1.type = exec# we will wirte something to the test.loga1.sources.r1.command = tail -F [本地文件路径]a1.sources.r1.channels = c1# describe the sinka1.sinks.k1.type = hdfsa1.sinks.k1.channel = c1a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/a1.sinks.k1.hdfs.filePrefix = events-a1.sinks.k1.hdfs.round = truea1.sinks.k1.hdfs.roundValue = 10a1.sinks.k1.hdfs.roundUnit = minute # 以下三个条件满足一条就会将记录下沉到hdfs# 条件1:时间间隔是3sa1.sinks.k1.hdfs.rollInterval = 3# 条件2:文件写入字符数量超过500字节a1.sinks.k1.hdfs.rollSize = 500# 条件3:文件的更新事件超过20条a1.sinks.k1.hdfs.rollCount = 20a1.sinks.k1.hdfs.batchSize = 5a1.sinks.k1.hdfs.useLocalTimeStamp = truea1.sinks.k1.hdfs.fileType = DataStreama1.channels.c1.type = memorya1.channels.c1.capacity = 1000a1.channels.c1.transactionCapacity = 100a1.sources.r1.channels = c1a1.sinks.k1.channel = c1
3.启动flume
在flume目录下输入如下命令
bin/flume-ng agent -c conf -f conf/netcat-logger.conf -n a1 -Dflume.root.logger=INFO,console
其中 -c是指定配置文件所在目录
-f是配置采集方案的文件
-n是指定我们的agent的名字
-Dflume.root.logger=INFO,console 是设置日志等级
4.测试
首先要建立一个本地文件,之后要定时写入数据定时写入数据脚本如下,直接在终端输入这些命令就可以做到定时向文件写入数据"1111"
while truedoecho 1111 >> [文件路径]sleep 1done
之后在flume终端会打印消息
此时查看hdfs,会发现指定目录下也会有文件产生
此时说明数据已经写入到hdfs