谈谈MySQL到HBase数据迁移多种策略

2019-09-20 17:26:46 浏览数 (1)

《数据迁移》

漫步于数据的海洋

在实验中静静感受这些数据迁移的魅力

动手所到之处

都是一段代码

与终端交织而成的盛宴

by 光城

前面文章写了MySQL的插入,亿级数据的快速插入方法,以及MySQL入库HBase的策略方案。

本节则是在上述基础上做的更加高端的一部。同时对MySQL入库HBase做一个总结。

回顾之前,先给大家放一个我的总体框架图:

1

初出茅庐

初出茅庐

使用Sqoop,直接将MySQL同步HBase,天真啊,一个Sqoop能搞定?好用?

经过我的实践证明,小数据完全没问题,那这个成亿数据,就问题大了去了,很多人用这个根本完成不了这个需求,不过我完成了。

怎么做的呢?

如果直接输入Sqoop命令去导入,经过一段时间,就卡了,根本无法全部导入完毕,于是乎,分片导入思想诞生了,写个bash脚本,放在服务器或者自己机器上跑即可。

怎么分片?

这个就是所谓的1亿数据的分开插入,每次只针对一小部分数据使用Sqoop,做个循环,直到这一亿数据导入完,那新的问题又来。

速度如何保证?

如果分片,速度自然无法保证,这虽然完成了上述的需求,但是导入完毕的效率非常低,当时导入1.8亿条耗时70多个小时,大家可以看到效率多么低了吧,有没有解决办法?

当然有,接下来进入,第二个方案。

2

小有成就

小有成就

在使用Sqoop后,binlog与kafka大吼一声,我来也,对没错,第二个思路就是,使用maxwell提取binlog的增删改查操作,然后发送到kafka的监听的topic上,再通过Python的pykafka库对数据进行消费,利用thrift接口进行sink,也就是存入数据库,哈哈,听了这么多,我都晕死了。

那速度如何呢?

这个速度当然快了啊,如果使用Python操纵HBase单条插入,那就非常慢了,但是比上述的要快,是不是还有批量插入呢,没错,里面有个批量插入,直接可以实现2-3秒的2万数据导入,实现高效率导入,这个最终耗时可从原来的70多个小时到7个小时左右,直接提高了10倍!

生命不息,奋斗不止;

速度不够,不断调整。

3

游刃有余

游刃有余

接着我们来到了第三个方案,那就是Kafka-Flink,这个简直非常好的一个思路,上述方案二提供了Python入库,那么对于大数据来说,更多的是使用Java,于是就查资料,学习,就get到Flink这个点子上了,这个同步过程实际上就是ETL,算是数据仓库的一部分吧,上游的数据经过Flink做各种计算,过滤,再到下游,进行业务处理,那这个就是标准的数据仓库作业。

对于方案三,详细阐述一下,前面不变,依旧使用maxwell提取binlog,后面使用kafka消费后,通过Flink进行sink到HBase,Flink在这个中间起到一个过滤、map、求和等等的操作,我们可以通过Flink按照自己给定的时间来进行数据的sink,最后数据就抵达了下游,从MySQL真正实时同步到HBase。

那么问题来了,效率呢?

当然快的可怕,1s至少1w的速度,你们觉得1亿数据得多快。

漫步于数据的海洋

在实验中静静感受这些数据迁移的魅力

动手所到之处

都是一段代码

与终端交织而成的盛宴

0 人点赞