背景
當前比較流行的hdfs間數據遷移工具備hadoop默認提供的distcp,阿里開源的DataX,這些工具可以知足常規的大部分需求,可是當時碰到hadoop版本不一致、keberos受權等場景時就行不通了。針對這些特殊的應用場景和實際需求我就構思並實現了HdfsDataExchanger這種實現方案。經過在一臺能夠訪問兩邊hadoop集羣的中起色上部署HdfsDataExchanger就能夠實現將一個集羣的數據遷移到另外一個集羣。HdfsDataExchanger提供單機多線程數據遷移,不支持分佈式並行執行。git
功能
- 不一樣版本的hdfs間文件遷移
- 本地文件系統與hdfs間文件遷移

原理
- 抽象一套hdfs文件操做接口。
- 使用源集羣和目標集羣對應版本的hadoop分別實現接口。
- 使用jetty的WebAppClassLoader分別加載兩套(源和目標)hdfs相關的jar,並建立對應的FileSystem。
- 使用源FileSystem讀取數據到緩衝區,而後使用目標FileSystem將緩衝區的數據寫入到目標文件。
- 單機多線程執行,每一個線程都以文件爲單位進行遷移,完成以後再拿取下一個待遷移的文件。

Github
https://github.com/SebastinHe/HdfsDataExchangergithub