本次采用三台机器: data1为元数据采集器; data2为数据缓存器; data3为数据存储器; data1的配置文件:flume-conf.properties #向agent1采集实例中注册一个采集源名称sc1 agent1.sources = sc1 #向agent1采集实例中注册一个缓存频道ch1 agent1.channels = ch1 #向agent1采集实例中注册一个输出槽 sk1 agent1.sinks = sk1 #以下为sc1采集源的配置 #采集源类型 spooldir agent1.sources.sc1.type = spooldir #采集到的数据通过ch1缓存频道缓存 agent1.sources.sc1.channels = ch1 #采集文件夹 agent1.sources.sc1.spoolDir = /usr/local/test #编码,flume默认为utf-8 agent1.sources.sc1.inputCharset=utf-8 #已采集标识 .s agent1.sources.sc1.fileSuffix =.s #以下为ch1缓冲频道的配置ss #缓冲频道类型 file agent1.channels.ch1.type = file #检查点文件目录 agent1.channels.ch1.checkpointDir = /var/flume/data/checkpoint #缓存数据文件夹 agent1.channels.ch1.dataDirs = /var/flume/data #以下为输出槽设置 #输出槽类型为Avro agent1.sinks.sk1.type = avro #输出哪个缓存频道中的数据 agent1.sinks.sk1.channel = ch1 #输出到哪个主机 agent1.sinks.sk1.hostname = data1 #输出到哪个端口 agent1.sinks.sk1.port = 41414s data2的配置文件:flume-conf.properties #向agent1采集实例中注册一个采集源名称sc1 agent1.sources = sc1 #向agent1采集实例中注册一个缓存频道ch1 agent1.channels = ch1 #向agent1采集实例中注册一个输出槽 sk1 agent1.sinks = sk1 #以下为sc1采集源的配置 #采集源类型 avro agent1.sources.sc1.type = avro #采集到的数据通过ch1缓存频道缓存 agent1.sources.sc1.channels = ch1 #绑定IP地址 agent1.sources.sc1.bind = 0.0.0.0 #监听端口号 agent1.sources.sc1.port = 41414 #以下为ch1缓冲频道的配置 #缓冲频道类型 file agent1.channels.ch1.type = file #检查点文件目录 agent1.channels.ch1.checkpointDir = /var/flume/data/checkpoint #缓存数据文件夹 agent1.channels.ch1.dataDirs = /var/flume/data #以下为输出槽设置 #输出槽类型为Avro agent1.sinks.sk1.type = avro #输出哪个缓存频道中的数据 agent1.sinks.sk1.channel = ch1 #输出到哪个主机 agent1.sinks.sk1.hostname = data2 #输出到哪个端口 agent1.sinks.sk1.port = 41414 data3的配置文件:flume-conf.properties #向agent1采集实例中注册一个采集源名称sc1 agent1.sources = sc1 #向agent1采集实例中注册一个缓存频道ch1 agent1.channels = ch1 #向agent1采集实例中注册一个输出槽 sk1 agent1.sinks = sk1 #以下为sc1采集源的配置 #采集源类型 avro agent1.sources.sc1.type = avro #采集到的数据通过ch1缓存频道缓存 agent1.sources.sc1.channels = ch1 #绑定IP地址 agent1.sources.sc1.bind = 0.0.0.0 #监听端口号 agent1.sources.sc1.port = 41414 agent1.sources.sc1.interceptors = i1 agent1.sources.sc1.interceptors.i1.type = timestamp #缓冲频道类型 file agent1.channels.ch1.type = file #检查点文件目录 agent1.channels.ch1.checkpointDir = /var/flume/data/checkpoint #缓存数据文件夹 agent1.channels.ch1.dataDirs = /var/flume/data #加入hdfs文件输出编码---默认的为sequenceFile,输出会有乱码,使用DataStream会直接按照源文件输出 agent1.sinks.sk1.hdfs.fileType=DataStream #以下为输出槽设置 #输出槽类型为hdfs agent1.sinks.sk1.type = hdfs #输出哪个缓存频道中的数据 agent1.sinks.sk1.channel = ch1 #hdfs路径按年月日进行日志文件的分文件夹保存 agent1.sinks.sk1.hdfs.path =/flume/events/%y-%m-%d #存储文件前缀 agent1.sinks.sk1.hdfs.filePrefix = events- #是否进行轮循归档 agent1.sinks.sk1.hdfs.round = false #是否使用用户本地时间戳,如果设置为false则不能使用上面的文件夹创建方式 agent1.sinks.sk1.hdfs.useLocalTimeStamp = true 需要注意的问题: 由于此次实现是使用flume和hadoop结合的方式实现的,所以flume各个环节在启动的过程中,都需要使用hadoop的jar包,尤其是sink端的flume启动时是必须要有hadoop的jar作为支持的,否则启动会报错。 鉴于hadoop的jar包比较多,结合实验后的结果,发现在/hadoop/更目录下的所有jar是都需要拷贝到flume/lib下的。另外,hadoop/lib目录下的commons-configuration-1.6.jar这个jar也是需要的,注意拷贝到flume/lib目录下。 --数据采集测试: 首先在监控目录下放入测试文件:test.log --启动指令(先启动数据存储机data3,再启动数据缓存机data2,最后启动数据源采集机data1): bin/flume-ng agent -n agent1 -c conf -f conf/flume-conf.properties -Dflume.root.logger=DEBUG,console --指令详解: -n 指定agent名称 -c 指定配置文件目录 -f 指定配置文件 -Dflume.root.logger=DEBUG,console
备注:如果要监控一个指定的文件,则在数据采集机器上使用指令,
agent1.sources.source1.
command
= tail -F /home/yong/Work/flum-1.6/tail_log_exec
agent1.sources.source1.
type
=
exec
同时注掉
#采集源类型 spooldir agent1.sources.sc1.type = spooldir
保留采集的文件名称: #在source机器上配置 agent1.sources.sc1.basenameHeader = true agent1.sources.sc1.basenameHeaderKey = fileName #在输出存储机器上配置 agent1.sinks.sk1.hdfs.filePrefix = %{fileName} #临时文件的采集时间10s agent1.sinks.sk1.hdfs.rollInterval = 10 #多大的文件就开始分成小文件 agent1.sinks.sk1.hdfs.rollSize = 1024000 agent1.sinks.sk1.hdfs.rollCount = 0 agent1.sinks.sk1.hdfs.idleTimeout=0