背景
当前比较流行的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