一:安装和使用
Flume 的 rpm 安装方式很简单,这里不做说明。
示例1: avro 数据源
安装成功之后,在 /etc/flume/conf 目录创建 f1.conf 文件,内容如下
agent-1.channels.ch-1.type = memory
agent-1.sources.avro-source1.channels = ch-1
agent-1.sources.avro-source1.type = avro
agent-1.sources.avro-source1.bind = 0.0.0.0
agent-1.sources.avro-source1.port = 41414
agent-1.sources.avro-source1.threads = 5
agent-1.sinks.log-sink1.channel = ch-1
agent-1.sinks.log-sink1.type = logger
agent-1.channels = ch-1
agent-1.sources = avro-source1**加粗样式**
agent-1.sinks = log-sink1
关于 avro-source 配置说明,请参考 avro-source
接下来启动 agent:
$ flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/f1.conf
-Dflume.root.logger=DEBUG,console -n agent-1
参数说明:
-n 指定 agent 名称
-c 指定配置文件目录
-f 指定配置文件
-Dflume.root.logger=DEBUG,console 设置日志等级
下面可以启动一个 avro-client 客户端生产数据:
$ flume-ng avro-client -c /etc/flume-ng/conf -H localhost -p 41414 -F /etc/passwd
-Dflume.root.logger=DEBUG,console
示例2:spooldir 数据源
在 /etc/flume/conf 目录创建 f2.conf 文件,内容如下:
agent-1.channels = ch-1
agent-1.sources = src-1
agent-1.channels.ch-1.type = memory
agent-1.sources.src-1.type = spooldir
agent-1.sources.src-1.channels = ch-1
agent-1.sources.src-1.spoolDir = /root/log
agent-1.sources.src-1.fileHeader = true
agent-1.sinks.log-sink1.channel = ch-1
agent-1.sinks.log-sink1.type = logger
agent-1.sinks = log-sink1
关于 Spooling Directory Source 配置说明,请参考 SpoolingDirectory Source
接下来启动 agent
$ flume-ng agent -c /etc/flume-ng/conf -f /etc/flume-ng/conf/f2.conf
-Dflume.root.logger=DEBUG,console -n agent-1
然后,手动拷贝一个文件到 /root/log 目录,观察日志输出以及/root/log 目录下的变化
示例3:spooldir 数据源,写入 hdfs
在 /etc/flume/conf 目录创建 f3.conf 文件,内容如下
agent-1.channels.ch-1.type = file
agent-1.channels.ch-1.checkpointDir= /root/checkpoint
agent-1.channels.ch-1.dataDirs= /root/data
agent-1.sources.src-1.type = spooldir
agent-1.sources.src-1.channels = ch-1
agent-1.sources.src-1.spoolDir = /root/log
agent-1.sources.src-1.deletePolicy= never
agent-1.sources.src-1.fileHeader = true
agent-1.sources.src-1.interceptors =i1
agent-1.sources.src-1.interceptors.i1.type = timestamp
agent-1.sinks.sink_hdfs.channel = ch-1
agent-1.sinks.sink_hdfs.type = hdfs
agent-1.sinks.sink_hdfs.hdfs.path = hdfs://cdh1:8020/user/root/events/%Y-%m-%d
agent-1.sinks.sink_hdfs.hdfs.filePrefix = logs
agent-1.sinks.sink_hdfs.hdfs.inUsePrefix = .
agent-1.sinks.sink_hdfs.hdfs.rollInterval = 30
agent-1.sinks.sink_hdfs.hdfs.rollSize = 0
agent-1.sinks.sink_hdfs.hdfs.rollCount = 0
agent-1.sinks.sink_hdfs.hdfs.batchSize = 1000
agent-1.sinks.sink_hdfs.hdfs.writeFormat = text
agent-1.sinks.sink_hdfs.hdfs.fileType = DataStream
#agent-1.sinks.sink_hdfs.hdfs.fileType = CompressedStream
#agent-1.sinks.sink_hdfs.hdfs.codeC = lzop
agent-1.channels = ch-1
agent-1.sources = src-1
agent-1.sinks = sink_hdfs
关于 HDFS Sink 配置说明,请参考 HDFS Sink
说明:
通过 interceptors 往 header 里添加 timestamp,这样做,可以在 hdfs.path 引用系统内部的时间变量或者主机的 hostname。通过设置 hdfs.inUsePrefix,例如设置为 .时,hdfs 会把该文件当做隐藏文件,以避免在 mr 过程中读到这些临时文件,引起一些错误
如果使用 lzo 压缩,则需要手动创建 lzo 索引,可以通过修改HdfsSink 的代码,通过代码创建索引FileChannel 的目录最好是和 spooldir 的数据目录处于不同磁盘。