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


