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

原文链接: https://my.oschina.net/dreamness/blog/3081406

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


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

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

2. 修改TaildirMatcher.java相关代码


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

  private List findFiles(File dir){
    List 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

你可能感兴趣的:(Flume 修改TaildirSource源码支持递归目录)