一、基本概念
1.flume定义
flume 是一个分布式的、可靠的、可用的服务,用于高效的收集、聚合和移动大量的流式数据
注意:flume-ng只有一个节点agent。不是传统意义上的分布式的,没有主从节点,没有什么直接的联系,彼此之间是独立的,对各个组件进行配置实现数据的移动
2.功能:
收集数据(source)
聚合数据(channel)
移动数据(sink)
3.agent
agent是一个JVM进程,可以将event从外部源流向下一个目标(agent 由三个组件source、channel、sink组成的)
4.三大组件
source:Java的程序,负责数据流的采集,从监控的地方采集数据流到channel中(相当于cp)
channel:source采集的数据流临时存放的地方,数据流就只有一份,sink取走了之后数据就没有了(相当于MV)
sink:Java程序,负责将数据从channel中移动到目标地
5.event
event:是数据移动的基本单位,由零个或者多个header和正文body组成
header:是key-value形式存在的,用来传输正文之外的额外信息(如事件的时间戳或事件来源的服务器主机名)
body:是一个字节数组,包含了实际的内容
数据都是以字节的形式存储的,默认是将每一行数据分装成为一个event(实现方式:按字节读取,当遇到"\n"时封装成Event)
6.flume的可靠性
event存储在每个agent的channel中,然后sink将event传递给下一个agent中或者终端存储库(如HDFS)。只有将event存储到下一个agent的channel中或者终端存储库中后,才会从通道中删除这些文件
7.flume可恢复性(本地磁盘通道)
本地磁盘通道:将event存储本地,速度慢,但是当agent进程死亡时保留在channel中的event不会丢失
内存通道:将event存储在内存中的队列中,这更快,但是当agent进程死亡时仍然留在内存channel中的event无法恢复
二、安装部署测试
1.CDH版本下载地址
http://archive.cloudera.com/cdh5/cdh/5/flume-ng-1.6.0-cdh5.14.4.tar.gz
2.解压安装
tar -zxvf /opt/tools/flume-ng-1.6.0-cdh5.14.4.tar.gz -C /opt/modules/
3.修改配置文件
mv conf/flume-env.sh.template conf/flume-env.sh
vim flume-env.sh
export JAVA_HOME=/opt/modules/jdk1.8.0_91
4.简单测试
将hive日志动态采集到日志中显示:编写agent文件,里面配置source,channel,sink三个部分
//define the agent a1.sources = s1 a1.channels = c1 a1.sinks = k1 //define the source a1.sources.s1.type = exec a1.sources.s1.command = tail -F /opt/modules/hive-1.1.0-cdh5.7.6/hive.log a1.sources.s1.channels = c1 //define the channel a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 //define the sink a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = /flume/part/daystr=%Y%m%d/hour=%H a1.sinks.k1.hdfs.fileType = DataStream a1.sinks.k1.hdfs.rollInterval = 0 a1.sinks.k1.hdfs.rollSize = 10240 a1.sinks.k1.hdfs.rollCount = 0 a1.sinks.k1.hdfs.useLocalTimeStamp = true a1.sinks.k1.channel = c1
5.运行配置文件
bin/flume-ng agent --conf conf/ --name a1 --conf-file /opt/data/flume.conf -Dflume.root.logger=INFO,console
bin/flume-ng agent --conf|-c flume_conf_dir --name|-n agent_name --conf-file|-f file_path -Dflume.root.logger=INFO,console
--conf|-c:指定flume的conf文件目录
--conf-file|-f:运行的文件地址
--name|-n:运行agent的名称
-Dflume.root.logger=INFO,console:调整flume的日志级别