Flume
Flume是Cloudera提供的日志收集系统,具有分布式、高可靠、高可用性等特点,对海量日志采集、聚合和传输,Flume支持在日志系统中制定各类数据发送,同时,Flume提供对数据进行简单处理,并写到各种数接受方的能力。其设计的原理也是基于将数据流,如日志数据从各种网站服务器上汇集起来存储到HDFS,HBase等集中存储器中。
Flume的核心是把数据从数据源收集过来,在送到目的地,为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据
Flume传输的数据基本单位是Event,如果是文本文件,通常是一行记录,这也是事务的基本单位。Event从Source,流向Channel,再到Sink,本身为一个byte数组,并可携带headers信息。Event代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去
Flume运行的核心是Agent。它是一个完整的数据收集工具,含有三个核心组件,分别是source、channel、sink。通过这些组件,Event可以从一个地方流向另外一个地方
Flume允许多个agent连在一起,形成前后相连的多级跳:
核心组件:source channel sink
source:source负责接收event或通过特殊机制产生event,并将events批量的放到一个或多个channel;source必须至少和一个channel关联
channel:channel位于source和sink之间,用于缓存进来的event;当Sink成功的将event发送到下一跳的channel或最终目的时候,event从Channel移除
sink:Sink负责将event传输到下一跳或最终目的;sink在设置存储数据时,可以向文件系统、数据库、Hadoop存数据,在日志数据较少时,可以将数据存储在文件系中,并且设定一定的时间间隔保存数据。在日志数据较多时,可以将相应的日志数据存储到hadoop中,便于日后进行相应的数据分析;必须作用于一个确切的channel
安装部署:
1.下载 http://mirror.bit.edu.cn/apache/flume/1.6.0/
2.解压 tar -xvf apache-flume-1.6.0-bin.tar.gz tar -xvf apache-flume-1.6.0-src.tar.gz
3.将源码合并至安装目录apache-flume-1.6.0-bin下:
cp -r apache-flume-1.6.0-src apache-flume-1.6.0-bin/
3.配置环境变量 vim ~/.bash_profile
export FLUME_HOME=/home/lan/apache-flume-1.6.0-bin/
export PATH=$PATH:$FLUME_HOME/bin
4.测试flume-ng是否安装成功:flume-ng version
测试flume-ng功能:将收集到的日志输出到hdfs上为
新建一个flume代理agent1的配置文件example.conf:
cd apache-flume-1.6.0-bin/conf/ vim example.conf
#agent1
agent1.sources = source1
agent1.sinks = sink1
agent1.channels = c1
#source1
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /home/lan/agent1log
agent1.sources.source1.channels = c1
agent1.sources.source1.fileHeader = false
#sink1
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path = hdfs://master:9000/agentlog
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat = TEXT
agent1.sinks.sink1.hdfs.rollInteval = 4
agent1.sinks.sink1.channel = c1
#channel1
agent1.channels.c1.type = file
agent1.channels.c1.checkpointDir = /home/lan/agent1_tmp1
agent1.channels.c1.dataDirs = /home/lan/agent1_tmpdata
#agent1.channels.channel1.capacity = 10000
#agent1.channels.channel.transactionCapacity = 1000
新建agent1log :mkdir agent1log
启动flume-ng:
cd apache-flume-1.6.0-bin
flume-ng agent -n agent1 -c conf -f /home/lan/apache-flume-1.6.0-bin/conf/example.conf -Dflume.root.logger=DEBUG,console
另启一个terminal,在监测目录下创建新的文件test2.txt
cd ~/agent1log
vim test2.txt
查看sink1的输出,发现目标路径下有一个以FlumeData开始,产生文件的时间戳为后缀的文件,说明flume能监测到目标目录变化,将产生变化的部分实时地收集到sink的输出中。