前言
在一个完整的大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统,而这些辅助工具在hadoop生态体系中都有便捷的开源框架,如图所示:
Flume的一些简介
- Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
- Flume可以采集文件,socket数据包等各种形式源数据,又可以将采集到的数据输出到 * HDFS、hbase、hive、kafka等众多外部存储系统中
- 一般的采集需求,通过对flume的简单配置即可实现
- Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景
flume如何搜集日志?
我们把flume比作情报人员
(1)搜集信息
(2)获取记忆信息
(3)传递报告间谍信息
flume是怎么完成上面三件事情的,三个组件:
source: 搜集信息
channel:传递信息
sink:存储信息
Flume架构
Flume基础架构,如下图:
这是一个flume-ng 最简单的图。flume-ng 是由一个个agent组成的。一个agent就像一个细胞一样。
Flume的多agent架构,如下图:
上面是两个agent链接在一起的,再看看更多的……
Flume的合并(合作)架构,如下图:
你是不是觉得这种设计是不是吊炸天了,可以随意组合,跟搭积木一样。跟Storm的设计思想是差不多的,何止吊炸天啊,简直就是吊炸天 、、、
Flume的多路复用架构,如下图:
agent的构造
每个agent里都有三部分构成:source、channel和sink。
就相当于source接收数据,通过channel传输数据,sink把数据写到下一端。这就完了,就这么简单。其中source有很多种可以选择,channel有很多种可以选择,sink也同样有多种可以选择,并且都支持自定义。饿靠!太灵活了。想怎么玩就怎么玩,这你妹的!
同时,如上上图所示,agent还支持选择器,就是一个source支持多个channel和多个sink,这样就完成了数据的分发,就是这么牛逼的感觉。
基本思路我们了解了,下面就开始我们的安装吧
1、Flume的安装非常简单,只需要解压即可,当然,前提是已有hadoop环境
上传安装包到数据源所在节点上
然后解压 tar -zxvf apache-flume-1.6.0-bin.tar.gz
2、然后进入flume的目录,修改conf下的flume-env.sh,在里面配置JAVA_HOME
export JAVA_HOME=/usr/local/jdk1.7.0
修改 flume-site.xml 配置文件(貌似没有该步骤,貌似也可以修改,研究后再来弄吧!)
3、验证 flume是否安装成功
要是你的有问题,请检查flume的版本和hadoop的版本是不是对应。本教程不适合Flume-NG旧版本
[hadoop@master conf]$ ../bin/flume-ng version
Flume 1.5.0Flume 1.6.0
Source code repository: https:
Revision: 2561a23240a71ba20bf288c7c2cda88f443c2080
Compiled by hshreedharan on Mon May 11 11:15:44 PDT 2015
From source with checksum b29e416802ce9ece3269d34233baf43f
出现这样的信息表示安装成功了
4、根据数据采集的需求配置采集方案,描述在配置文件中(文件名可任意自定义)
5、指定采集方案配置文件,在相应的节点上启动flume agent
下面就是我们最喜爱的Demo源码时间了
1、在/usr/local/hadoop/logs/目录下创建test.log文件夹。用shell的循环一直不停的向log文件中输入数据,模仿一个真实的日志来源,实时不断的使用flume上传文件。
while true;
do echo 1111111111111111111 >> /usr/local/hadoop/logs/test.log;
sleep 0.5;
done
然后在Flume的文件夹下创建tail-hdfs.conf采集配置信息文件。
Demo的思路就是将用shell写的循环的打入的脚本信息以我想要的规则导入HDFS:
规则:
1、打入我指定的Hdfs中/flume/lzq/%y-%m-%d/%H%M/的目录
2、3秒换一个目录
3、传入数据达到50重新创建目录
4、10分钟更换一个大目录
5、一个小目录中只能保存20个文件
6、只创建5个大目录
# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#exec 指的是命令
# Describe/configure the source
a1.sources.r1.type = exec
#F根据文件名追中, f根据文件的nodeid追中
a1.sources.r1.command = tail -F /usr/local/hadoop/logs/test.log
a1.sources.r1.channels = c1
# Describe the sink
#下沉目标
a1.sinks.k1.type = hdfs
a1.sinks.k1.channel = c1
#指定目录, flum帮做目的替换
a1.sinks.k1.hdfs.path = /flume/lzq/%y-%m-%d/%H%M/
#文件的命名, 前缀
a1.sinks.k1.hdfs.filePrefix = lzq-
#10 分钟就改目录
a1.sinks.k1.hdfs.round = true
a1.sinks.k1.hdfs.roundValue = 10
a1.sinks.k1.hdfs.roundUnit = minute
#文件滚动之前的等待时间(秒)
a1.sinks.k1.hdfs.rollInterval = 3
#文件滚动的大小限制(bytes)
a1.sinks.k1.hdfs.rollSize = 50
#写入多少个event数据后滚动文件(事件个数)
a1.sinks.k1.hdfs.rollCount = 20
#5个事件就往里面写入
a1.sinks.k1.hdfs.batchSize = 5
之后我们就可以执行需要的Flume采集配置信息
bin/flume-ng agent -c conf -f conf/tail-hdfs.conf -n a1
之后就去查看HDFS的/flume/lzq有没有相应的文件
不停的刷新,一直有诶(建议用HDFS网页刷,命令行的速度承受不了我的心)
出去撒个尿,回来。小目录的20个文件满了,出去看,大目录也床架了诶。。。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)