Flume 修改TaildirSource源码支持递归目录

1. 下载flume源码, 并将Taildir Source相关源码复制到自己的项目中。


本例使用的源码为 flume-ng-1.6.0-cdh5.16.1
相关代码文件有:

  • ReliableTaildirEventReader.java
  • TaildirMatcher
  • TaildirSource
  • TaildirSourceConfiguration
  • TaildirSourceConfigurationContants

2. 修改TaildirMatcher.java相关代码


  • 添加递归获取文件的函数
  private List<File> getMatchingFilesNoCacheRecursion(){
    List<File> result = findFiles(new File(filePattern));
    return result;
  }

  private List<File> findFiles(File dir){
    List<File> result = Lists.newArrayList();
    if(dir.isFile()){
      result.add(dir);
      return result;
    }else{
      File[] subNames = dir.listFiles();
      for (File f: subNames){
        if(f.isFile()){
          result.add(f);
        }else{
          result.addAll( findFiles(f));
        }

      }

      return result;
    }


  }

  • 注册该函数
    修改getMatchingFiles函数,将
      lastMatchedFiles = sortByLastModifiedTime(getMatchingFilesNoCache());
      

修改为

    lastMatchedFiles = sortByLastModifiedTime(getMatchingFilesNoCacheRecursion());
  • 移除检测是否存在父目录的异常检测
    删除TaildirMatcher类构造函数中的以下代码
 // sanity check 删除以下两行
//    Preconditions.checkState(parentDir.exists(),
//        "Directory does not exist: " + parentDir.getAbsolutePath());

3. 打包并上传至相关文件夹

4. 方法的不足


  • 不支持正则表达式匹配
  • 可能有没有处理的异常

转载于:https://my.oschina.net/dreamness/blog/3081406

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值