Flume-ng HDFS Sink “丢数据”

http://blog.51cto.com/boylook/1308188

线上对Flume流入HDFS配置path:p1,每分钟切一个文件,定期从p1move完成的(rename)文件到外部表进行计算分析,发现有“丢数据”现象:即在p1下经常看到几GB.tmp文件,查看Flume日志发现当出现CallTimeout Exception :HDFS IO ERROR后,sink一直向.tmp写入,而不进行rename.

Flume HDFS Sink正常写入流程见:http://boylook.blog.51cto.com/7934327/1298627

默认情况下,当BucketWriter flush超过calltimeoutdefault:10s)时,会报出异常,这时可能HDFS或者网络异常,如果恰好到达了rollintervalbucketWriter执行close->flush也会报出同样的异常:Unexpectederror,没有执行到renameBucket,此后该bucketWriter保持打开状态(因为intervalroll只在bucketWriter打开时进行一次调度),一直进行数据写入不再roll直到1.创建写的路径2.Flume重启 3.打开到达maxOpenFiles,这些是不可接受的.

查看源码发现在每次flush时会判断是否使用idleTime,如果使用则会调度一个idleHandler thread进行清理:1.关闭bucketWriter 2.LRUList中摘除掉bucketWriter,而默认竟然是不启用的=.=,后设置idleTime稍大于roll interval后,不再出现“数据丢失”

BTW,对于HDFS SINKcallTimeoutidleTimeout的默认值真是太傻了...


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值