Flume:
** Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、传输、聚合的系统。
** Flume仅仅运行在linux环境下
** flume.apache.org(Documentation--Flume User Guide)
Flume体系结构(Architecture):(见图)
Source: 用于采集数据,Source是产生数据流的地方,同时Source会将产生的数据流传输到Channel
Channel:连接 source 和 sink的数据传输通道
Sink: 从Channel收集数据,将数据写到目标源,可以是下一个Source也可以是HDFS或者HBase
数据种类:
** 系统(通常指web应用)产生的的日志,(能被flume够实时捕获)
** 系统中自定义方法、命令产生的数据,(也能被flume够实时捕获)
获取数据的方式
** 传统方式:
脚本+命令 ==>【周期性】上传数据到HDFS,然后进行分析
如:load data local inpath ...
缺点:繁琐、效率低、容易遗漏
** 采用flume框架
优点:简单、高效、实时性捕获
----flume安装-----------------------------
1、解压(建议安装到cdh目录里)
tar zxf /opt/softwares/flume-ng-1.5.0-cdh5.3.6.tar.gz
2、改名,并修改flume-env.sh
$ mv flume-env.sh.template flume-env.sh
export JAVA_HOME=/opt/modules/jdk1.7.0_67
3、使用flume-ng命令
$ bin/flume-ng
--conf 指定配置目录
--name 指定Agent的名称
--conf-file 指定具体的配置文件
====案例1===========================================================
需求:使用flume监控某个端口,把从端口写入的数据输出为logger
1、复制
[lxl@lxl01 apache-flume-1.5.0-cdh5.3.6-bin]$ cd conf/
$ cp -a flume-conf.properties.template flume-telnet.conf
2、修改flume-telnet.conf
24行以下全删了,然后复制下面内容进去
# Name the components on this agent
# a1为代理(中介)实例名,任意命名,agent分三部分
a1.sources = r1
a1.sinks = k1
a1.channels = c1
# Describe/configure the source
# netcat是用于调试和检查网络的工具包,windows和linux(redhat)均可用,需要安装
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
# Describe the sink
# 可以在文档Flume Sinks--Logger Sink部分查找
# 往日志文件里面写
a1.sinks.k1.type = logger
# Use a channel which buffers events in memory
# 内存channel
a1.channels.c1.type = memory
# channel里存放的最大event数
a1.channels.c1.capacity = 1000
# 每个事务支持的最大event数
a1.channels.c1.transactionCapacity = 100
# 绑定source和sink到channel
# 注意:这里有's'
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1
*** 配置文件的使用:
a) 命名
b) 配置source、sink、channel
c) 关联
---------------------
测试:
*** 安装telnet
$ su -
# yum -y install telnet
*** 启动flume,'-D'设置日志级别和输出源
$ bin/flume-ng agent --conf conf/ --name a1 --conf-file conf/flume-telnet.conf -Dflume.root.logger=INFO,console
*** 打开另外一个窗口
$ netstat -an|grep 44444 --检查是否有程序(flume)在监听44444端口
$ telnet localhost 44444 --连接本机的44444端口&