HdfsDataExchangerhdfs 集群間數(shù)據(jù)交換
背景
當前比較流行的hdfs間數(shù)據(jù)遷移工具有hadoop默認提供的distcp,阿里開源的DataX,這些工具能夠滿足常規(guī)的大部分需求,但是當時碰到hadoop版本不一致、keberos授權等場景時就行不通了。針對這些特殊的應用場景和實際需求我就構思并實現(xiàn)了HdfsDataExchanger這種實現(xiàn)方案。通過在一臺可以訪問兩邊hadoop集群的中轉機上部署HdfsDataExchanger就可以實現(xiàn)將一個集群的數(shù)據(jù)遷移到另一個集群。HdfsDataExchanger提供單機多線程數(shù)據(jù)遷移,不支持分布式并行執(zhí)行。
功能介紹
不同版本的hdfs間文件遷移。
本地文件系統(tǒng)與hdfs間文件遷移。
原理說明
抽象一套hdfs文件操作接口。
使用源集群和目標集群對應版本的hadoop分別實現(xiàn)接口。
使用jetty的WebAppClassLoader分別加載兩套(源和目標)hdfs相關的jar,并創(chuàng)建對應的FileSystem。
-
使用源FileSystem讀取數(shù)據(jù)到緩沖區(qū),然后使用目標FileSystem將緩沖區(qū)的數(shù)據(jù)寫入到目標文件。
使用說明
data-exchanger目錄下包含完整的部署目錄
h1為hadoop1的配置(conf)和相關的jar包(jars)
h2為hadoop2的配置(conf)和相關的jar包(jars)
main為主程序相關的配置(conf)、相關的jar包(jars)和啟動腳本(bin)
配置說明
| 參數(shù)名 | 說明 |
|---|---|
| thread.count | 并行進行遷移數(shù)據(jù)的線程數(shù)量 |
| buffer.size | 讀取數(shù)據(jù)緩沖區(qū)大小 |
| src/dest.hdfs.resource.path | 源/目標hdfs的jar包目錄 |
| src/dest.filesystem.implement | 源/目標針對抽象出的hdfs接口(com.sebastian.fdx.fs.api.BaseFileSystem)的實現(xiàn)類,WebAppClassLoader根據(jù)此配置加載對應的實現(xiàn) |
| src/dest.hdfs.conf.path | 源/目標對應的core-site.xml和hdfs-site.xml |
h1和h2的jars目錄下應該包含依賴的所有hadoop jar包,當前只包含了fdx-hadoopX-filesystem-1.0-SNAPSHOT.jar,用戶在使用時需根據(jù)實際的hadoop版本自行編譯,并將依賴的jar和編譯出來的jar一并放到對應的目錄下。
main/jars目錄放fdx-executor和fdx-filesystem-api編譯出的jar以及依賴的所有jar。
main/conf/parameter.xml
執(zhí)行
bin/run.sh src_path1 src_path2 ... dest_path 將src_pathX下的所有文件、目錄復制到dest_path下


