1. 程式人生 > >Flume 修改TaildirSource原始碼支援遞迴目錄

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;
    }


  }

  • 註冊該函式
    修改```函式,將
      lastMatchedFiles = sortByLastModifiedTime(getMatchingFilesNoCache());
      

修改為

    lastMatchedFiles = sortByLastModifiedTime(getMatchingFilesNoCacheRecursion());
  • 移除檢測是否存在父目錄的異常檢測
    刪除TaildirMatcher類建構函式中的以下程式碼
 // sanity check 刪除以下兩行
//    Preconditions.checkState(parentDir.exists(),
//        "Directory does not exist: " + parentDir.getAbsolutePath());

3. 打包並上傳至相關資料夾

4. 方法的不足


  • 不支援正則表示式匹配
  • 可能有沒有