HDFS中数据迁移的使用场景和考量因素
数据迁移使用场景
- 冷热集群数据同步、分类存储
- 集群数据整体搬迁
- 当公司业务迅速的发展,导致的当前的服务器数量资源出现临时紧张的时候,为了更高效的利用资源,会将A机房数据整体迁移到B机房的,原因可能是B机房机器多,而且B机房本身开销较A机房低些等
- 数据的准实时同步
- 数据准实时同步的media在于数据的双倍份可用,比如某天A集群突然宣告不允许再使用了,此时可以将线上使用集群直接切向B的同步集群,因为B集群实时同步A集群数据,拥有完全一致的真实数据和元数据信息,所以对于业务方使用而言是不会收到任何影响的。
数据迁移要素考量
- Bandwidth-带宽
- 带宽用的多了,会影响到线上业务的任务运行,带宽用的少了又会导致数据同步满的问题。
- performance-性能
- 是采用简单的单机程序?还是多线程的性能更佳的分布式程序?
- data-increment-增量同步
- 当TB,PB级别的数据需要同步的时候,如果每次以全量的方式去同步数据,结果一定是非常糟糕。如果仅针对变化的增量数据进行同步将会是不错的选择。可以陪着HDFS快照等技术实现增量数据同步。
- syncable-数据迁移的同步性
- 数据迁移的过程中需要保证周期内数据是一定能够同步完的,不能差距太大。比如A集群7天内的增量数据,我只要花半天就可以完全同步到B集群,然后我有可以等到下周再次进行同步,最可怕的事情在于A集群的7天内的数据,我的程序花了7天还同步不完,然后下一个周期又来了,这样就无法做到准实时的一致性,其实7天还是一个比较大的时间,最好是能达到按天同步。
HDFS分布式拷贝工具-DistCp
- DistCp是Hadoop中的一种工具,在hadoop-tools工程下,作为独立子工程存在。
- 定位用于数据迁移,定期在集群之间和集群内部备份数据
- 在备份过程中,每次运行distcp都成为一个备份周期。尽管性能相对较慢,但他的普及程度已经越来越高
- distcp底层使用MapReduce在集群之间或并行在同一集群内复制文件。执行复制的MapReduce只有mapper阶段
distcp的优势性能
- 带宽限流
- distcp可以通过命令参数bandwidth来为程序进行带宽限流
- 增量数据同步
- 在distcp中可以通过updata,append和diff这三个参数实现增量同步
- updata 只拷贝不存在的文件或者目录
- append 最佳目标路径下已存在的文件
- diff 通过快照的diff对比信息来同步源端路径与目标路径
updata解决了新增文件、目录的同步。append解决已存在的增量更新同步。diff解决删除或重命名类型文件的同步
- 高效的性能:分布式特性
- distcp底层使用MapReduce执行数据同步,MapReduce本身是一类分布式程序
命令
- 其中source_path,target_path需要带上地址前缀以区分不同的集群
bash
hadoop distcp hdfs://src_cluster:8020/user/data hdfs://dest_cluster:8020/user/data_backup
这个命令告诉distcp工具将hdfs://src_cluster:8020/user/data目录下的数据复制到hdfs://dest_cluster:8020/user/data_backup目录下。