Flume 小记(三) HttpSource 存入本地

本文介绍了如何使用 Flume 的 HttpSource 结合 FileRollSink 将数据存储到本地。虽然 FileRollSink 文件命名和滚动有限制,但通过自定义配置,实现了按日期和时间间隔创建文件夹和文件。配置中包含了 Timestamp 和 Host Interceptors,以及一个自定义 Interceptor 用于添加特定格式的时间戳到 header,以便于文件命名。
摘要由CSDN通过智能技术生成

HttpSource -> File Roll Sink

  FileRollSink 可以将source中的数据存如本地,但FileRollSink文件名不能自定义,而且不能定时滚动文件,只能按时间间隔滚动,可以自己定义sink,来做定时写文件,参考了 http://blog.csdn.net/tswisdom/article/details/41483471 这篇文章。

  本文利用文件Sink,实现了按固定格式目录输出,收集完成结果存放需要按天生成文件夹,按每5分钟生成文件,比如2012年12月29日12点26分的日志,需要放到/data/flume_test/20121229/log-1225-对应的文件中。


配置文件

a1.sources=r1
a1.sinks=k1
a1.channels=c1
 
a1.sources.r1.type=http
a1.sources.r1.bind=localhost
a1.sources.r1.port=50000
a1.sources.r1.channels=c1
a1.sources.r1.handler=com.test.flume.PlainJSONHandler
a1.sources.r1.interceptors = i1 i2 logformat
 
a1.sources.r1.interceptors.i1.preserveExisting = true
a1.sources.r1.interceptors.i1.type = timestamp
a1.sources.r1.interceptors.i2.type = host
a1.sources.r1.interceptors.i2.hostHeader = hostname
a1.sources.r1.interceptors.logformat.type = com.test.flume.LogFormatInterceptor$Builder
 
a1.sinks.k1.channel=c1
a1.sinks.k1.type=com.test.flume.FileSink
#a1.sinks.k1.sink.directory=/data/flume_test2/
#a1.sinks.k1.sink.rollInterval = 3600
a1.sinks.k1.sink.batchSize=100
a1.sinks.k1.file.path = /data/flume_test2/%{dayStr}
a1.sinks.k1.file.filePrefix = log-%{hourStr}%{minStr}-
a1.sinks.k1.file.txnEventMax = 10000
a1.sinks.k1.file.maxOpenFiles = 5
 
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
a1.channels.c1.transactionCapacity=100

注:拦截器 Interceptors 设置在Source 和Source 写入数据的Channel 之间,Source 接收到的事件在写入到对应的Channel之前,拦截器都可以转换或者删除这些事件,这里使用了三个 interceptor : i1, i2, logformat,

   (1) i1 是一个Timestamp Interceptor,会在在event 的 header 里添加了  timestamp, preserveExisting 的 默认值是false,其作用是如果timestamp已经存在,应该被保护;

   (2) i2 是一个 Host Interceptor,会在在event 的 header 里添加了  host, hostHeader 的默认值是host,是header的key名称, Host Interceptor( i2 ) 还有个属性为 useIP    默认值是true,使用ip,而非hostname;

   (3) logformat 使用了自定义的 Interceptor, 主要为header 添加了{dayStr} {hourStr} {minStr} 以供 后面的sink使用


Code

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值