一、什么是Flume
Flume是一种分布式的、可靠的和可用的服务,用于有效地收集、聚合和移动大量日志数据。它有一个简单灵活的基于流数据流的体系结构。它具有健壮性和容错性,具有可调可靠性机制和多种故障转移和恢复机制。它使用了一个简单的可扩展数据模型,允许在线分析应用程序。
二、Flume的体系架构
Flume有三个主要的组件source、channel、sink。以及每一个作用上图都有说明。
最重要的是配置一个agent,也就是说,使用Flume就是怎么配置agent,实现自己的需求。
三、安装Flume
tar -zxvf apache-flume-1.9.0-bin.tar.gz
四、创建一个agent:采集一个目录,保存HDFS
- 1、创建myagent目录,我们所有的agent都放在这个目录下面
- 2、在myagent目录下,创建a4.conf文件,a4就是一个名字,可以随便叫
- 3、编辑 vi a4.conf文件如下:
#定义agent名, source、channel、sink的名称
a4.sources = r1
a4.channels = c1
a4.sinks = k1
#具体定义source
a4.sources.r1.type = spooldir
a4.sources.r1.spoolDir = /training/logs
#定义拦截器,为消息添加时间戳
a4.sources.r1.interceptors = i1
a4.sources.r1.interceptors.i1.type = org.apache.flume.interceptor.TimestampInterceptor$Builder
#具体定义channel
a4.channels.c1.type = memory
a4.channels.c1.capacity = 10000
a4.channels.c1.transactionCapacity = 100
#具体定义sink
a4.sinks.k1.type = hdfs
a4.sinks.k1.hdfs.path = hdfs://192.168.92.111:9000/flume/%Y%m%d
a4.sinks.k1.hdfs.filePrefix = events-
a4.sinks.k1.hdfs.fileType = DataStream
#不按照条数生成文件
a4.sinks.k1.hdfs.rollCount = 0
#HDFS上的文件达到128M时生成一个文件
a4.sinks.k1.hdfs.rollSize = 134217728
#HDFS上的文件达到60秒生成一个文件
a4.sinks.k1.hdfs.rollInterval = 60
#组装source、channel、sink
a4.sources.r1.channels = c1
a4.sinks.k1.channel = c1
- 4、启动Flume ,在home目录下
bin/flume-ng agent -n a4 -f myagent/a4.conf -c conf -Dflume.root.logger=INFO,console
-n 代表,agent的名字
-f 代表,启动哪个配置文件
-c代表,后缀conf文件
console代表,终端输出
-Dflume.root.logger=INFO,输出级别
注意:一旦文件被放到“自动收集”目录中后,便不能修改,如果修改,flume会报错。此外,也不能有重名的文件,如果有,flume也会报错。
五、实时采集数据
只需修改上面的source就行
a4.sources.r1.type = exec
a4.sources.r1.command = tail -F /training/logs/test.txt
当监听的文件发生变化时,就会重复读取这个文件。
下面未进行测试,
a1.sources.r1.type = exec
a1.sources.r1.command = for i in /path/*.txt; do cat $i; done