大数据集群内部都有节点级别和机架级别的容错机制(存储层对应的就是传统的三副本或纠删码机制),但对于一些数据安全性要求更改的场景,就需要做跨集群的数据同步了,比如在金融行业典型的两地三中心场景下就会周期性地做多个集群间的数据同步。另外有时出于压力测试或性能测试的需要,有时也会涉及到跨集群的数据同步(因为需要在测试环境尽可能地模拟生产环境的数据环境和数据体量)。
那么如何做hdfs/hive的跨集群数据同步呢?
对于hdfs,业界成熟的方案都是基于 Hadoop 原生的 distcp来做的,其底层原理是Yarn上执行的分布式的map/reduce程序,可以从原集群推送数据到目标集群(因为会占用原集群yarn中的计算资源,生产这么做的比较少),也可以从目标集群发起作业主动拉取原集群的数据(大家一般都是这么玩的);可以在未启用安全模式的环境下执行,也可以在启用了kerberos安全的环境中完成任务;可以在相同版本的集群间同步数据,也可以跨版本同步数据(此时需要使用webhdfs协议);同时有各种参数控制同步时的各种行为,如控制map任务个数的-m, 控制每个map可用带宽的 -bandwidth, 控制是否拷贝元数据的-p[rbugpcaxt] (rbugpcaxt 分别指:replication number, block size, user, group, permission,checksum-type, acl, xattr,以及 tiemstamp.), 控制是否结合使用快照snapshot的 -diff或-rdiff.
对于hive的跨集群数据同步,hive社区在推动 hive replication的方案,但因为各种前提和限制