内容简介:BDS针对开源HBase目前存在的同步迁移痛点,自主研发的一套数据迁移的平台。有关于BDS的基本介绍,可以查看《BDS-HBase数据迁移同步的利器》。本文主要介绍目前在阿里云上,BDS是如何进行HBase集群之间的数据迁移和数据的实时同步的。对于历史存量数据的迁移,我们是通过拷贝文件的方式,将数据文件拷贝到目标集群,然后统一对文件进行Bulkload,将数据装载到目标表中。
概览
BDS针对开源HBase目前存在的同步迁移痛点,自主研发的一套数据迁移的平台。有关于BDS的基本介绍,可以查看《BDS-HBase数据迁移同步的利器》。本文主要介绍目前在阿里云上,BDS是如何进行HBase集群之间的数据迁移和数据的实时同步的。
架构
-
BDS采用分布式的架构,由BDSMaster节点生成、调度任务给各个BDSWorker节点
-
BDSWorker节点负责具体的任务执行,是无状态的,方便扩容、升级
-
Reader 和 Writer 插件化,支持跨版本,异构数据源的迁移和实时数据同步
历史数据迁移方案
对于历史存量数据的迁移,我们是通过拷贝文件的方式,将数据文件拷贝到目标集群,然后统一对文件进行Bulkload,将数据装载到目标表中。
迁移流程 :
-
客户提交历史数据迁移的任务
-
BDSMaster获取原表的Region分区情况,针对每一个Region分区生成一个Task,平均下发给各个BDSWorker节点
-
BDSWorker节点接收到Task任务之后,会迁移指定Region分区下的HFile文件,HFile的拷贝走的是字节流的拷贝,并且能够自动处理Region的Split、Merge、Compaction等操作导致HFile文件的变化,保证文件迁移过程中的不丢失
-
BDSMaster在迁移过程中会对各个BDSWorker上执行的任务进度、详情进行监控,对于超时的任务,异常任务进行重试
-
所有的任务都迁移完成之后,BDSMaster会通知目标集群进行数据的装载,将数据装载到目标表中
BDSWorker 宕机的处理
BDSMaster通过ZK监听各个BDSWorker的状态,当某个BDSWorker宕机,BDSMaster会将宕机BDSWorker上正在执行的Task,重新下发给其他的BDSWorker,其他BDSWorker接收到重试的Task,会从中断的地方开始重试,防止重复迁移已经迁移完成的数据。
对Region的Split、Merge、Compaction的处理
Region的Split、Merge、Compction会导致HFile文件在迁移的过程中不断的发生的变化
-
某个文件在迁移的时候被Compaction合并了,文件就不存在了
-
某个Region在迁移的时候发生了split,Region不存在了
-
迁移的时候HFile是个引用文件,不包含实际的数据,只是对源文件的引用
针对HFile文件是个引用文件、HFile文件被合并了,BDSWorker会自动处理,保证数据的不丢失,针对Region的Split、Merge,BDSMaster会感知原表的变化,获取新生成的Region生成新Task,下发给BDSWorker去执行。
Bulkload优化
数据文件拷贝完成,在对数据进行装载的时候需要对HFile排序、切分和分组,当原表和目标表的分区很不一致,就会导致大量的HFile被切分,从而影响bulkload的速度。
因此,我们在拷贝文件的时候BDS会自动对要分区的文件进行拆分,在Bulkload的时候就可以直接load各个HFile文件到对应的Region分区中。
数据本地化率的优化
数据迁移完,RegionServer在读取文件数据的时候,可能存在大量的远程读(数据不落在本地的DN上,需要访问远端的DN),会导致读RT变高。
BDS在迁移文件的时候,会尽可能的将数据写到对应RegionServer所在的DN上。
BDS vs 开源方案
-
在迁移过程中,几乎不会和集群的HBase交互,只和集群的HDFS进行交互,尽可能的避免了对在线业务的影响
-
文件的迁移走的是文件字节流的拷贝,因此比通常API层的数据迁移通常能节省50%以上的流量
-
迁移不需要修改源集群目标的配置,也不需要在集群上做什么操作,不占用HBase集群的存储、计算、内存等资源
-
数据迁移考虑本地化率,可以保证迁移完之后目标集群有更好的读rt
-
迁移的文件根据目标表的分区情况自动拆分,大大提高了大表数据装载的速度
-
有完善的failover机制,支持异常任务重试,断点续传
-
BDSWorker无状态,升级、扩容非常容易,便于运维
-
支持配置的热更新,可以设置每个BDSWorker启动的线程数以及每个线程迁移的速度
实时数据同步方案
-
BDSMaster会不停扫描源集群HDFS上的日志
-
针对新生成的log会生成对应的Task,下发给各个BDSWorker
-
BDSWorker针对每个Task,会创建TaskTunnel,TaskTunnel 包含 Reader、Queue、Writer,Reader 负责读取 log并将读取的log数据丢到queue中,writer异步消费queue中的数据发往目标集群
支持跨版本、异构数据源的实时数据同步
TaskTunnel中的Reader和Writer我们采用的是插件化的方式,针对不同的源端和目标端,我们使用对应版本的Reader和Writer,BDS不仅支持跨版本HBase的同步,甚至支持异构数据源的数据同步。
抗热点
对于原生的HBase Replication来说,写热点的RegionServer会生成更多的日志,同步压力也会更大,往往会导致这台RegionServer的数据同步不过来。遇到热点的问题,你可以用一些运维的方式去解决。比如从热点服务器移走Region,降低吞吐与负载,但热点并不保证是恒定的,可能会跳跃在各个服务器。
于BDS,由BDSMaster统一获取源集群的日志,然后平均分配给各个BDSWorker,因此每个BDSWorker处理的日志数量基本是相同的。及时源集群RegionServer存在写热点,但热点RegionServer的日志也能被平摊到各个BDSWorker去执行,从而避免因热点导致的同步延迟。
同步积压
-
HBase Replication
对于HBase Replication来说,同步逻辑是集成在RegionServer中的,因此数据的同步和RegionServer本身的读写相互影响,又因为HBase服务于客户端的线程数,要远远大于Replication的线程数。面对高负载的写场景数据复制基本很难消化庞大的写吞吐,就会导致同步积压。面对数据的同步积压,通过开大线程数量不一定能解决问题,因为RegionServer此时的负载可能已经很高了。也不太容易通过横向扩展节点来解决同步积压的问题,因为扩展节点我需要扩展RegionServer节点以及DataNode节点,只能在业务低峰期的时候慢慢的消费。
-
BDS
对于BDS来说,BDS采用读写异步的方式,可以通过以下几种方式来解决同步积压的问题
-
增加BDSWorker节点,来提高整个迁移服务的吞吐
-
动态配置每个BDSWorker处理日志的线程数,来提升单个节点日志处理的并发度
-
动态配置每个TaskTunnel的Writer数量,从而提升单个日志的处理吞吐
同步监控
对于同步的监控,我们定义
同步延迟 = 数据被同步到目标集群的时间t2 - 数据被写入到源集群的时间t1 ≈ 读延迟 + 读耗时 + 在队列等待耗时 + 写耗时
-
读延迟:表示数据被写入HDFS上的HLog到我们从读取的HDFS上读到这条数据的时间间隔
-
读耗时:从文件中读取一批数据的耗时
-
队列等待时间:数据被读出来添加到队列中的等待时间
-
写耗时:数据被写入到目标集群的耗时
我们需要监控这几项指标,就能比较方便的定位同步过程中的问题:
-
当写耗时增大,我们可以定位目标集群可能存在了一些问题或者网络存在问题
-
当队列等待的耗时较大,说明写入速度赶不上读取的速度,我们可以通过适当增加写线程数量,来提高写速度
-
读耗时变大,我们就能定位读取HLog存在一些问题,可能是网络延迟变大
-
读延迟不断变大,我们就可以定位BDS同步吞吐不够,同步不过来了,需要添加节点,调整同步并发
BDS vs HBase Replication
-
功能性
-
支持跨版本的同步
-
支持双向同步、环状同步
-
稳定性
-
独立于HBase,不受RegionServer读写影响
-
同步过程基本不会访问源HBase集群,只读取源HDFS上的日志
-
可以控制同步的线程数和节点的并发数
-
抗热点,同步的任务平均分配到各个BDSWorker节点
-
对业务影响更小
-
更加完善的failover机制
-
易运维
-
监控同步时延,上下游流量,读写耗时等指标
-
任务失败,延迟过大报警
-
BDSWorker stateless,便于扩展、系统升级
-
完善的监控、报警机制
-
性能
-
可以通过扩展节点数量来提升迁移同步的速度
-
支持动态配置线程数
-
读写异步
总结
BDS已经在阿里云上线了,方便云上的客户在自建HBase、EMR HBase、Apsara HBase之间进行数据的迁移和实时数据同步。
在云上已经服务40多个客户,帮助客户实现集群之间的无缝迁移,集群的升配,主备容灾,数据迁移同步规模达到400多T(单副本)。
云上有迁移需求的客户,可以查看
《BDS服务介绍》 ,或者联系侧田。大家工作学习遇到HBase技术问题,把问题发布到HBase技术社区论坛http://hbase.group,欢迎大家论坛上面提问留言讨论。想了解更多HBase技术关注HBase技术社区公众号(微信号:hbasegroup),非常欢迎大家积极投稿。
本群为HBase+Spark技术交流讨论,整合最优质的专家资源和技术资料会定期开展线下技术沙龙,专家技术直播,专家答疑活动
点击链接钉钉入群:https://dwz.cn/Fvqv066s或扫码进群
本群为Cassandra技术交流讨论,整合最优质的专家资源和技术资料会定期开展线下技术沙龙,专家技术直播,专家答疑活动
Cassandra 社区钉钉大群:https://c.tb.cn/F3.ZRTY0o
Cassandra 技术社区微信公众号:
以上所述就是小编给大家介绍的《HBase实践 | BDS-HBase数据迁移同步方案的设计与实践》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 简单数据库迁移实践
- 优酷 Mac 迁移 Swift 实践
- Swift Static Libraries迁移实践
- 3 种常见有效云迁移最佳实践
- Hive 迁移 Presto 的技术实践
- 小米 Kylin 平滑迁移 HBase 实践
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
算法与数据结构(第二版)
傅清祥、王晓东 / 电子工业出版社 / 2001-8-1 / 34.00
本书是《计算机学科教学计划1993》的配套教材之一。它覆盖了《计算机学科教学计划1993》中开列的关于算法与数据结构主科目的所有知识单元。其主要内容有:算法与数据结构的概念、抽象数据类型(ADT)、基于序列的ADT(如表,栈,队列和串等)。反映层次关系的ADT(如树,堆和各种平衡树等)、关于集合的ADT(如字典,优先队列和共查集等)、算法设计的策略与技巧、排序与选择算法、图的算法、问题的计算复杂性一起来看看 《算法与数据结构(第二版)》 这本书的介绍吧!