Flume是一个数据采集工具,可以很方便的将多种数据采集到Hadoop生态系统中。
安装十分便捷只需要下载解压到要采集的机器即可,重点是需要对flume的三大组件(source,channel,sink)的配置。
注:盗张官方的图
官方链接:Flume官方说明
内容如下:
#定义三大组件的名称,myagent可以自己定义
myagent.sources = source1
myagent.sinks = sink1
myagent.channels = channel1
# 配置source组件
myagent.sources.source1.type = spooldir
# 定义source类型,文件目录
myagent.sources.source1.spoolDir = /home/gugu/testdata/
# 指定输入目录
myagent.sources.source1.fileSuffix=.FINISHED
# 指定采集结束后添加的文件后缀
myagent.sources.source1.deserializer.maxLineLength=5120
# 单行最大字节数,如果超过将被截断
# 配置sink组件
myagent.sinks.sink1.type = hdfs
# sink的类型
myagent.sinks.sink1.hdfs.path =hdfs://master:9000/flume/test/log/%y-%m-%d/%H-%M
# 输出的hdfs路径
myagent.sinks.sink1.hdfs.filePrefix = app_log
# 生成文件的前缀(收集到的文件会被重命名成随机字符串)
myagent.sinks.sink1.hdfs.fileSuffix = .log
# 生成文件的后缀
myagent.sinks.sink1.hdfs.batchSize= 128
# 当文件达到多大时,刷新到hdfs,单位MB
myagent.sinks.sink1.hdfs.fileType = DataStream
# 输出到hdfs中文件类型,DataStream原始文件
myagent.sinks.sink1.hdfs.writeFormat =Text
# 写到hdfs前的文件格式,需要设置为Text
## roll:滚动切换:控制写文件的切换规则(如果不需要这个规则,设置为0)
myagent.sinks.sink1.hdfs.rollSize = 512000
## 按文件体积(字节)来切
myagent.sinks.sink1.hdfs.rollCount = 1000000
## 按event条数切
myagent.sinks.sink1.hdfs.rollInterval = 60
## 按时间间隔切换文件
## 控制生成目录的规则
myagent.sinks.sink1.hdfs.round = true
# 是否自动生成目录
myagent.sinks.sink1.hdfs.roundValue = 10
# 自动生成目录的时间值
myagent.sinks.sink1.hdfs.roundUnit = minute
# 自动 生成目录的时间单位
myagent.sinks.sink1.hdfs.useLocalTimeStamp = true
# 是否使用本地的时间戳取时间
# channel组件配置
myagent.channels.channel1.type = memory
# channel将数据存储的位置一般为memory/File
myagent.channels.channel1.capacity = 500000
## event条数
myagent.channels.channel1.transactionCapacity = 100
##flume事务控制所需要的缓存容量100条event,如果失败可以进行回滚
# 绑定source、channel和sink之间的连接
myagent.sources.source1.channels = channel1
myagent.sinks.sink1.channel = channel1
[gugu@master apache-flume-1.9.0-bin]$ bin/flume-ng agent -c conf/ -f conf/dir-hdfs.properties -n myagent -Dflume.root.logger=INFO,console
启动agent 配置文件路径 agent配置的文件 agent的名字 日志级别和打印到控制台
#最后一个参数可以去掉,加上能看到日志输出,正式环境可以去掉,由于一个配置文件中可以配置多个agent,因此agent的名字要与配置文件中定义的一致
在使用“myagent.channels.channel1.transactionCapacity”参数的时候需要注意,这个参数要大于“myagent.sources.source1.batchSize”,原因是source提供数据给channel,需要提供的数据量大于一个事务的数据条数,默认两个值都是100.