Flume的定义
- Flume是一个分布式的、高可靠的、高可用的将大批量的不同数据源的日志数据收集、聚合、移动到数据中心(HDFS)进行存储的系统。即是日志采集和汇总的工具
- Logstash、FileBeat是ES栈的日志数据抽取工具,他们和Flume很类似,前者是轻量级、后者是重量级,若项目组使用的是ES栈技术,那完全可以使用Logstash取代Flume。
版本
- NG: 1.x的版本 (N=NEW)
- OG:0.9.x的版本,不用管(O=OLD)
- 由于我使用的是CDH5.7.0,故选择flume-ng-1.6.0-cdh5.7.0版本,注意此1.6和社区的1.6有差别。
-
flume的优势:
- 可以高速采集数据,采集的数据能够以想要的文件格式及压缩方式存储在hdfs上
- 事务功能保证了数据在采集的过程中数据不丢失
- 部分Source保证了Flume挂了以后重启依旧能够继续在上一次采集点采集数据,真正做到数据零丢失
-
flume的组成
- flume有3大组件
- source(源端数据采集):Flume提供了各种各样的Source、同时还提供了自定义的Source
- Channel(临时存储聚合数据):主要用的是memory channel和File channel(生产最常用),生产中channel的数据一定是要监控的,防止sink挂了,撑爆channel
- Sink(移动数据到目标端):如HDFS、KAFKA、DB以及自定义的sink
-
flume的架构
- flume的agent架构
- 单Agent:
- 串联Agent:
- 并联Agent(生产中最多的使用):
- 多sinkAgent(也很常见):
flume部署
-
打开官网http://archive.cloudera.com/cdh5/cdh/5/
-
上传并解压
1
2
3
4
5
|
[hadoop@hadoop001 app]$ rz
flume-ng-1.6.0-cdh5.7.0.tar.gz
[hadoop@hadoop001 app]$tar -xzvf flume-ng-1.6.0-cdh5.7.0.tar.gz
|
#修改配置文件,添加JAVA_HOME
1
2
3
4
|
[hadoop@hadoop001 app]$ cd ~/app/apache-flume-1.6.0-cdh5.7.0-bin
[hadoop@hadoop001 apache-flume-1.6.0-cdh5.7.0-bin]$ cp ~/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/flume-env.sh.template ~/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/flume-env.sh
[hadoop@hadoop001 apache-flume-1.6.0-cdh5.7.0-bin]$ vim ~/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/flume-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_45
|
#添加环境变量
1
2
3
4
5
6
|
hadoop@hadoop001 bin]$ soruce ~/.bash_profile
export FLUME_HOME=/home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin
export PATH=$FLUME_HOME/bin:$PATH
[hadoop@hadoop001 bin]$ source ~/.bash_profile
[hadoop@hadoop001 bin]$ which flume-ng
~/app/apache-flume-1.6.0-cdh5.7.0-bin/bin/flume-ng
|
-
Agent配置使用案列
- Flume的使用其实就是Source、Channel、Sink的配置
- Agent=Source+Channel+Sink,其实agent就是Flume的配置文件
- 一个配置文件可以配置多个Agent的。
- Event:Flume数据传输的最小单位,一个EVent就是一条记录,由head和body两个部分组成,head存储的是管道,body存储的是字节数组
-
Flume文件配置
[hadoop@hadoop001 conf]$ vim /home/hadoop/app/apache-flume-1.6.0-cdh5.7.0-bin/conf/example.conf