談談MySQL到HBase數據遷移多種策略

  • 2019 年 10 月 6 日
  • 筆記

《數據遷移》

漫步於數據的海洋

在實驗中靜靜感受這些數據遷移的魅力

動手所到之處

都是一段程式碼

與終端交織而成的盛宴

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億數據得多快。

漫步於數據的海洋

在實驗中靜靜感受這些數據遷移的魅力

動手所到之處

都是一段程式碼

與終端交織而成的盛宴

Tags: