Flume(1.11.0版本)
简介
概述
-
Flume本身是由Cloudera公司开发的后来贡献给了Apache的一套针对日志数据进行收集(collecting)、汇聚(aggregating)和传输(moving)的机制
-
Flume本身提供了简单且灵活的结构来完成日志数据的传输
-
Flume有两大版本:
- Flume0.X:又称之为
Flume-og
,依赖于Zookeeper部署,需要提供的格式文件相对复杂,所以现在市面上已经不使用了 - Flume1.X:又称之为
Flume-ng
,不依赖于Zookeeper部署,需要提供的格式文件结构明确且简单,所以是现在流通的版本
- Flume0.X:又称之为
基本概念
-
Event
-
Flume会将收集到的每一条日志封装成一个Event
-
Event本质上就是一个json串,即Flume会将收集到的日志封装成json的形式,Event中固定的包含两部分:headers和body
{ "headers":{ },"body":""}
-
-
Agent:Flume流动模型的基本组成结构,至少包含3部分
- Source:从数据源采集数据 - collecting
- Channel:临时存储数据 - aggregating
- Sink:将数据写出到目的地 - moving
流动模型
-
单级流动
-
多级流动:又称之为串联流动
-
扇入流动:又称之为并联流动、聚集流动
-
扇出流动:又称之为复用流动
-
复杂流动:按照需求将多个流动进行组合,那么就是复杂流动
参数解释
参数 | 解释 |
---|---|
--name 或者-n |
指定要运行的agent的名字 |
--conf 或者-c |
Flume的原生配置 |
--conf-file 或者-f |
执行的文件 |
-D |
指定运行其他的参数 |
flume.root.logger |
指定日志的打印级别,级别分为INFO ,WARN 和ERROR ,可以指定打印位置console 和logfile |
Source
NetCat TCP Source
-
Netcat TCP Source监听TCP请求,在使用的时候需要监听指定的主机和端口,从这个指定主机的指定端口来接收TCP请求,并且将TCP请求内容作为日志来进行收集
-
默认情况下,每一条数据大小不能超过512B,可以通过参数
max-line-length
来修改-
在Flume中,所有的流动模型,不是通过代码来指定,而是通过格式文件来配置,所以实际过程中,往往会要求格式文件存放在统一的位置上。上课过程中,统一要求将格式文件放到
/opt/software/flume-1.11.0/data
下cd /opt/software/flume-1.11.0/ mkdir data cd data
-
编辑格式文件,文件名和后缀名可以自己定义 properties文件的 key = value 格式配置在vim会有颜色上的区分,便于阅读。
vim basic.propertie
在文件中添加
# 给Agent起名 a1就是这个agent的名字 # 给Source起名 # 如果有多个Source,那么名字之间用空格隔开 a1.sources = s1 # 给Channel起名 a1.channels = c1 # 给Sink起名 a1.sinks = k1 # 配置Source a1.sources.s1.type = netcat a1.sources.s1.bind = 0.0.0.0 a1.sources.s1.port = 8090 # 配置Channel a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 1000 # 配置Sink a1.sinks.k1.type = logger # 将Source和Channel绑定 a1.sources.s1.channels = c1 # 将Sink和Channel绑定 a1.sinks.k1.channel = c1
-
执行
flume-ng agent --name a1 --conf $FLUME_HOME/conf --conf-file basic.properties -Dflume.root.logger=INFO,console
-
复制窗口之后,发送TCP请求
nc hadoop01 8090
-
Exec Source
-
Exec Source运行指定命令,监听命令结果,将命令结果作为日志进行收集
-
案例:监听指定文件,如果文件中新添了数据,那么自动收集这个文件中的数据
-
构建空文件
touch /opt/software/flume-1.11.0/data/a.txt
-
监听这个文件,如果这个文件中新添了数据,自动收集数据作为日志
vim execsource.properties
在文件中添加
a1.sources = s1 a1.channels = c1 a1.sinks = k1 # 配置Exec Source # Source的类型 a1.sources.s1.type = exec # 监听指定的命令 a1.sources.s1.command = tail -F /opt/software/flume-1.11.0/data/a.txt # 指定命令的脚本类型 a1.sources.s1.shell = /bin/sh -c a1.channels.c1.type = memory a1.sinks.k1.type = logger a1.sources.s1.channels = c1 a1.sinks.k1.channel = c1
-
执行命令
flume-ng agent -n a1 -c $FLUME_HOME/conf -f execsource.properties -Dflume.root.logger=INFO,console
-
在新窗口中追加数据
echo "testing" >> /opt/software/flume-1.11.0/data/a.txt echo "exec" >> /opt/software/flume-1.11.0/data/a.txt
AVRO Source
-
AVRO Source接收被AVRO序列化之后的数据,结合AVRO Sink,可以实现复杂的流动模型
-
案例
-
编辑文件
-
-
-