基于flume框架的ORCSink开发中遇到的坑(一)

最近做了一个基于flume 1.7 的sink,用于写hdfs orc文件,中间遇到了几个坑,下面把思路和遇到的问题一一记录下来。

1. 开发思路

首先的实现场景是这样的:从channel拿数据-->sink拿到数据后做分类-->分类后将数据写入对应的orc文件->文件关闭。技术要点是这样:

1.1  线程池管理hdfs操作

在分类写orc文件这环节,我开了两个线程池,一个用来管理每类文件的hdfs操作,创建/写入/关闭hdfs上的orc文件;一个用来管理文件的滚动,在某一个时机,例如文件写入条数到达某个上限或者文件闲置到达一定时间,将当前文件关闭并创造新文件。

这个是hdfs操作线程池的代码逻辑:

//创建一个线程池,线程执行对象
callTimeoutPool = Executors.newFixedThreadPool(threadsPoolSize,
            new ThreadFactoryBuilder().setNameFormat(timeoutName).build());

//callTimeoutPool执行线程任务,任务继承于callable,执行后返回Future对象
private <T> T callWithTimeout(final CallRunner<T> callRunner)
      throws IOException, InterruptedException {
    Future<T> future = callTimeoutPool.submit(new Callable<T>() {
      ...
    } 
}

//任务内
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值