背景:flume可以实时的收集文件并传到hdfs上,它是一个高可靠的,分布式的海量日志采集、聚合和传输的系统。它可实现流式处理。自动故障转移。
1.首先安装好flume,因为是flume用java写的,所以要配置下jdk
2.运行时只要写好配置文件,agent.conf,然后用命令运行就行了
flume有三个组件source、channel、sink在agent.conf里需要配置好这3个组件。他们的作用如下所所示
channel是一个队列,可以收集多个source,但是只能连接一个sink,当数据过大时就保证了它的高可用性。
3.写agent.conf文件(在flume目录下的conf目录下有一个,样本flume-conf.properties.template,可作参考修改)
vi agent.conf (内容如下)
#定义3个组件的名称(仅仅是个名称,与下方的名称相对应)
agent.sources = source1
agent.channels = channel1
agent.sinks = sink1
#定义sources
agent.sources.source1.type = spooldir #spooldir的方式可实时监控目录下的文件,还有很多其它方式
agent.sources.source1.spoolDir=/opt/data/jiang #要监控的目录
agent.sources.source1.ignorePattern=^(.)*\\.txt$ #只监控.txt的文件(可换其它后缀)
# 定义channels
agent.channels.channel1.type = file #存放格式
agent.channels.channel1.checkpointDir = /opt/data/checkpoint #channel的存放目录
agent.channels.channel1.dataDirs = /opt/data/checkpoint/data
#定义sink
agent.sinks.sink1.type = hdfs #放到hdfs上
#这里的%Y%m%d 是日期变量。可生成不同时间戳的目录
agent.sinks.sink1.hdfs.path = hdfs://192.168.1.1:8020/user/jiang/flume/data/%Y%m%d
agent.sinks.sink1.hdfs.fileType = DataStream
agent.sinks.sink1.hdfs.writeFormat = Text
agent.sinks.sink1.hdfs.batchSize = 10
#用时间变量的话,这个必须设置成true
agent.sinks.sink1.hdfs.useLocalTimeStamp = true
#对应 source 和 sink到channel
agent.sources.source1.channels =channel1
agent.sinks.sink1.channel = channel1
4.执行agent.conf的命令
flume-ng agent
--conf conf #配置文件的目录
--conf-file agent.conf #文件名字
--name agent #agent的名字,跟上边对应
-Dflume.root.logger=INFO,console