flume-ng学习之spooling directory类型source配置深入及解析



flume概述

Flume是一个分布式、可靠、高可用的海量日志聚合系统,支持在系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据的简单处理,并写到各种数据接收方的能力。
Flume主要由3个重要的组件构成:Source、Sink、Channel。

flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。

source可以接收外部源发送过来的数据。不同的source,可以接受不同的数据格式。比如有目录池(spooling directory)数据源,可以监控指定文件夹中的新文件变化,如果目录中有文件产生,就会立刻读取其内容。
channel是一个存储地,接收source的输出,直到有sink消费掉channel中的数据。channel中的数据直到进入到下一个channel中或者进入终端才会被删除。当sink写入失败后,可以自动重启,不会造成数据丢失,因此很可靠。
sink会消费channel中的数据,然后送给外部源或者其他source。如数据可以写入到HDFS或者HBase中。
flume允许多个agent连在一起,形成前后相连的多级跳。

flume-ng学习之spooling directory类型source配置深入及解析_第1张图片

flume配置

使用flume的核心是如何配置agent文件。agent的配置是一个普通文本文件,使用键值对形式存储配置信息,可以设置多个agent信息。配置的内容包括sourcechannelsink等。组件sourcechannelsink都有名称、类型和很多个性化的属性配置。
配置文件应该这么写
# list the sources, sinks and channels for the agent
.sources =
.sinks =
.channels =
# set channel for source
.sources..channels = ...
# set channel for sink
.sinks..channel =
# properties for sources
.sources.. =
# properties for channels
.channel.. =
# properties for sinks
.sources.. =

示例:

Spooling DirectorySource为例

              SpoolSource:是监测配置的目录下新增的文件,并将文件中的数据读取出来。需要注意两点:

1)拷贝到spool目录下的文件不可以再打开编辑。

2) spool目录下不可包含相应的子目录

 

agent1.sources =src1
agent1.sinks = sink1 sink2
agent1.channels = ch1 ch2

说明:agent1是代理名称,对应有source,名称是src1,;有两个sink,名称是sink1sink2;有两个channel,名称是ch1ch2

 

agent1.sources.src1.type= spooldir

说明:spooldir指源的类型,flume工程根据此字符串走入监控目录相关代码,进而启动线程(代码逻辑在flume-ng-core工程SpoolDirectorySource.java


agent1.sources.src1.spoolDir = /root/data/logs

说明:所监控的目录/root/data/logs,目前只支持监控一个目录,如有业务中需监控两个或以上的目录,可修改ReliableSpoolingFileEventReader.java中私有构造器中相关代码或者配置两个或以上相同的源。


agent1.sources.src1.ignorePattern = .*\\.txt 

说明:该配置项默认是(^$),官方解释:Regular expressionspecifying which files to ignore (skip)。如果配置就是过滤的文件,示例中就是所监控的目录下以.txt结尾的文件不进行处理,配置按照Java中正则表达式进行配置,代码中是调用Pattern.compile(ignorePattern)进行解析(ReliableSpoolingFileEventReader|line174),解析后在ReliableSpoolingFileEventReader.getNextFile()方法中与读取的文件名通过ignorePattern.matcher(fileName).matches()匹配,如果匹配到返回false,就过滤不处理。注意:往监控目录中写文件时不能写以点(.)开头的文件和自定义结尾名的文件。


agent1.sources.src1.deletePolicy = immediate

说明:处理后文件的删除策略,默认是never,不删除,处理后将文件重命名,默认在文件名追加.COMPLETED(可自定义配置),配置immediate就是立即删除。源代码中有延时(delay)删除策略,不过目前没有实现,来了句(implementdelay in the futureReliableSpoolingFileEventReader|line334


agent1.sources.src1.fileSuffix=.COMPLETED

说明:读取文件后默认给处理后文件追加的后缀名,默认的是(.COMPLETED),和deletePolicy= never配合使用

agent1.sources.src1.batchSize= 100

说明:批量读取文件的大小,不配置时默认是100

agent1.sources.src1.channels= ch1

agent1.sources.src1.channels= ch2

 

#配置memorychannel

agent1.channels.ch1.type = memory

agent1.channels.ch1.capacity = 10000

说明:capacity属性指通道容量

agent1.channels.ch1.transactionCapacity = 1000

说明:transactionCapacity属性指通道传输能力

agent1.channels.ch1.byteCapacityBufferPercentage = 20

agent1.channels.ch1.byteCapacity = 800000

#配置filechannel

agent1.channels.ch2.type = file

agent1.channels.ch2.checkpointDir =/root/flumechannel/checkpoint

agent1.channels.ch2.dataDirs =/root/flumechannel/data

#配置hdfssink

agent1.sinks.sink1.type = hdfs

agent1.sinks.sink1.channel = ch2

agent1.sinks.sink1.hdfs.path =hdfs://hadoop0:9000/flume/%Y-%m-%d/

agent1.sinks.sink1.hdfs.rollInterval=1

agent1.sinks.sink1.hdfs.fileType = DataStream

agent1.sinks.sink1.hdfs.writeFormat = Text

#配置hbasesink

#配置hbasesink2

agent1.sinks.sink2.type = hbase

agent1.sinks.sink2.channel = channel1

agent1.sinks.sink2.table = hmbbs

agent1.sinks.sink2.columnFamily = cf

agent1.sinks.sink2.serializer =flume.HmbbsHbaseEventSerializer

agent1.sinks.sink2.serializer.suffix = timestamp

agent1.sinks.sink2.serializer =org.apache.flume.sink.hbase.SimpleHbaseEventSerializer

 

启动代理的脚本

启动命令是flume-ng,命令在flume工程的bin目录下

-n指定agent名称

-c指定配置文件目录

-f指定配置文件

-Dflume.root.logger=INFO,console

因此完整命令:

bin/flume-ng agent -c conf -f conf/example.conf -n a1-Dflume.root.logger=INFO,console

 官方配置指南:

http://flume.apache.org/FlumeUserGuide.html

kafka  http://www.cnblogs.com/likehua/p/3999538.html

http://blog.jobbole.com/75328/


你可能感兴趣的:(flume-ng学习之spooling directory类型source配置深入及解析)