Flume 修改TaildirSource原始碼支援遞迴目錄
阿新 • • 發佈:2019-07-31
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. 方法的不足
- 不支援正則表示式匹配
- 可能有沒有