【Flume】使用Flume监控文件,并将文件上传至HDFS
编写conf文件
# 定义source、sinks、channels并且重命名
a1.sources = k1
a1.sinks = r1
a1.channels = c1
# 选择sources方法为exec来监控文件
a1.sources.k1.type = exec
# 输入监控文件的路径
# 其中F大写代表着即使监控的文件被删除了,只要再次生成文件名一样的文件,会再次监控此文件
# f小写意味着只要监控文件删除,就不再监控
a1.sources.k1.command = tail -F /home/data/flume/log
# 选择channels类型
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
#选择sinks类型
a1.sinks.r1.type = hdfs
# 输出文件的路径,其中%Y-%m-%d表示按照日期年-月-日创建文件夹
a1.sinks.r1.hdfs.path = hdfs://d:9000/flume/%Y-%m-%d
# 输出的文件的前缀是log-
a1.sinks.r1.hdfs.filePrefix = log-
# 输出的文件的后缀是.event
a1.sinks.r1.hdfs.fileSuffix = .event
# 输出文件的文件类型是DataStream
a1.sinks.r1.hdfs.fileType = DataStream
# 使用时间戳
a1.sinks.r1.hdfs.useLocalTimeStamp = true
# 每次读取1000个事件
a1.sinks.r1.hdfs.batchSize = 1000
# 是否按照事件滚动文件夹
a1.sinks.r1.hdfs.round = true
# 多少时间单位创建一个新的文件夹
a1.sinks.r1.hdfs.roundValue = 1
# 时间单位是
a1.sinks.r1.hdfs.roundUnit = hour
# 多久生成一个新文件
a1.sinks.r1.hdfs.rollInterval = 600
# 每个文件的滚动大小
a1.sinks.r1.hdfs.rollSize = 134217700
# 文件滚动和event数量无关
a1.sinks.r1.hdfs.rollCount = 0
# 最小冗余数
a1.sinks.r1.hdfs.minBlockReplicas = 1
# 将sources、sinks、channels进行绑定
a1.sinks.r1.channel = c1
a1.sources.k1.channels = c1
开启
/home/flume/bin/flume-ng agent --name a1 --conf conf --conf-file flume-file-hdfs.conf -Dflume.root.logger=INFO,console
向监控文件中输入数据
echo '1234' > log
反应
结果发现文件路径最后一个文件夹是日期
文件的前缀是log-,后缀是.event,中间是时间戳