背景
當前比較流行的hdfs間數據遷移工具有hadoop默認提供的distcp,阿里開源的DataX,這些工具能夠滿足常規的大部分需求,但是當時碰到hadoop版本不一致、keberos授權等場景時就行不通了。針對這些特殊的應用場景和實際需求我就構思並實現了HdfsDataExchanger這種實現方案。通過在一臺可以訪問兩邊hadoop集羣的中轉機上部署HdfsDataExchanger就可以實現將一個集羣的數據遷移到另一個集羣。HdfsDataExchanger提供單機多線程數據遷移,不支持分佈式並行執行。
功能
- 不同版本的hdfs間文件遷移
- 本地文件系統與hdfs間文件遷移
原理
- 抽象一套hdfs文件操作接口。
- 使用源集羣和目標集羣對應版本的hadoop分別實現接口。
- 使用jetty的WebAppClassLoader分別加載兩套(源和目標)hdfs相關的jar,並創建對應的FileSystem。
- 使用源FileSystem讀取數據到緩衝區,然後使用目標FileSystem將緩衝區的數據寫入到目標文件。
- 單機多線程執行,每個線程都以文件爲單位進行遷移,完成之後再拿取下一個待遷移的文件。