一、flume架构
一个flume进程分为三个部分:source、channel、sink,总体称为一个Agent,是一个JVM进程
1)source
作用:读取数据,传送(put)给channel一个putList(里面是多个event),可支持多种数据类型的读取:
exec:监听一个文件
spooling directory:监听一个文件夹
avro:数据源是Flume时使用
netcat:数据源是网络端口时使用,一般测试时使用
2)channel
作用:位于source和sink之间的缓冲区
· 当source-put-channel不成功时,数据会回滚到putList中
· 当sink-take-channel不成功时,数据会回滚到channel中
channel类型:
Memory Channel:基于内存的缓冲区
File Channel:基于磁盘的缓冲区
Kafka Channel:基于消息队列的缓冲区
3)sink
作用:不断地轮询读取(take)Channel中的事件且批量的从channel中移除他们,并将这些事件批量写入到存储系统、或被发送到另一个Flume Agent中
目的地类型:
HDFS:放到文件系统中
Kafka:放到消息队列中
Avro:目的地为下一个flume,用于两个Flume相连时
file_roll:放到本地文件中
logger:在控制台显示,一般测试时使用
二、Flume使用文档
1)开启flume
flume-ng agent
--name a3 给Agent起一个名字
--conf conf/ 表示flume的配置文件在flume/conf文件夹下
--conf-file job/flume-dir-hdfs.conf 指定本次Agent的配置在xxx中
2)复杂场景下Flume结构图绘制①
多个Flume串联时,需要指定不同端口号,根据端口号确定接受哪个Agent和发送给哪个Agent
注:
Flume-1;Flume-2发送到Flume-3的4141端口
Flume-3监听自己的4141端口(不能监听其他节点端口,只能其他节点sink发送到自己,监听自己)
3)复杂场景下Flume结构图绘制②
需求:
1、flume-1监控hive.log日志,flume-1的数据传送给flume-2,flume-2将数据追加到本地文件,同时将数据传输到flume-3。
2、flume-4监控本地另一个自己创建的文件any.txt,并将数据传送给flume-3。
3、flume-3将汇总数据写入到HDFS。