0
点赞
收藏
分享

微信扫一扫

【Flume中间件】(3)实时监听文件到HDFS系统


实时监听文件到HDFS系统

之前测试了监听一个文件的新内容,然后打印到了控制台,现在我们需要将监控到的内容放到HDFS中进行存储,其实和控制台一样,只不过是将sink源改到HDFS,修改一下相关的配置。

【Flume中间件】(3)实时监听文件到HDFS系统_java

a1.sources = r1
a1.sinks = k1
a1.channels = c1

a1.sources.r1.type = exec
a1.sources.r1.command=tail -F /home/hadoop/data/file
# 指定用什么去解析上面的命令
a1.sources.r1.shell=/bin/bash -c

a1.sinks.k1.type = hdfs
# 配置hdfs存储的路径,这里我设置的是动态路径,按照时间命名的文件夹
a1.sinks.k1.hdfs.path=hdfs://hadoop102:9000/flume/%Y%m%d/%H
# 给存储到HDFS的文件加个前缀标明该数据为日志信息
a1.sinks.k1.hdfs.filePrefix=logs-
# 是否按照时间进行滚动文件夹,对应上面配置的动态文件夹
a1.sinks.k1.hdfs.round=true
a1.sinks.k1.hdfs.roundValue=1
# 设置时间量级为秒、分钟还是小时
a1.sinks.k1.hdfs.roundUnit=hour
# 是否使用本地时间戳,我测试了一下,如果这里设置成false,HDFS目录不会发生变化,可能是hdfs配置的动态时间路径就是按照时间戳配置的
a1.sinks.k1.hdfs.useLocalTimeStamp=true
# 积攒多少个Event才会flush到HDFS
a1.sinks.k1.hdfs.batchSize=1000
# 文件类型
a1.sinks.k1.hdfs.fileType=DataStream
# 多久会生成一个新的文件,如果监听的文件没有变化,尽管到了时间也不会产生新文件,产生新文件需要事件去触发
a1.sinks.k1.hdfs.rollInterval=30
# 每个文件大小达到多少会进行滚动
a1.sinks.k1.hdfs.rollSize=134217700
# 设置文件的滚动与事件无关
a1.sinks.k1.hdfs.rollCount=0

a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

HDFS的目录我们不需要提前建立,flume会自动为我们创建指定目录

【Flume中间件】(3)实时监听文件到HDFS系统_flume_02

【Flume中间件】(3)实时监听文件到HDFS系统_flume_03

我们可以看到文件的命名就是以我们设置的logs-作为前缀,后面拼接的是时间戳。


举报

相关推荐

0 条评论