Mysql 到 Hbase 數(shù)據(jù)如何實(shí)時(shí)同步,強(qiáng)大的 Streamsets 告訴你

很多情況大數(shù)據(jù)集群需要獲取業(yè)務(wù)數(shù)據(jù)键闺,用于分析寿烟。通常有兩種方式:

  • 業(yè)務(wù)直接或間接寫入的方式
  • 業(yè)務(wù)的關(guān)系型數(shù)據(jù)庫同步到大數(shù)據(jù)集群的方式

第一種可以是在業(yè)務(wù)中編寫代碼,將覺得需要發(fā)送的數(shù)據(jù)發(fā)送到消息隊(duì)列辛燥,最終落地到大數(shù)據(jù)集群韧衣。

第二種則是通過數(shù)據(jù)同步的方式盅藻,將關(guān)系型數(shù)據(jù)同步到大數(shù)據(jù)集群购桑,可以是存儲(chǔ)在 hdfs 上畅铭,使用 hive 進(jìn)行分析,或者是直接存儲(chǔ)到 hbase 中勃蜘。

其中數(shù)據(jù)同步又可以大致分為兩種:增量同步硕噩、CRUD 同步。

增量同步是只將關(guān)系型數(shù)據(jù)庫中新增的數(shù)據(jù)進(jìn)行同步缭贡,對(duì)于修改炉擅、刪除操作不進(jìn)行同步,這種同步方式適用于那些一旦生成就不會(huì)變動(dòng)的數(shù)據(jù)阳惹。
CRUD 同步則是數(shù)據(jù)的增谍失、刪、改都需要進(jìn)行同步莹汤,保證兩個(gè)庫中的數(shù)據(jù)一致性快鱼。

本文不講 binlog + Canal + 消息隊(duì)列 + JAR 實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步的方案,也不講使用 Sqoop 進(jìn)行離線同步纲岭。而是講解如何使用 Streamsets 零代碼完成整個(gè)實(shí)時(shí)同步流程抹竹。關(guān)于 Streamsets 具體是什么,以及能做哪些其他的事情止潮,大家可以前往 Streamsets 官網(wǎng)進(jìn)行了解窃判。從筆者了解的信息,在數(shù)據(jù)同步方面 Streamsets 十分好用喇闸。

要實(shí)現(xiàn) mysql 數(shù)據(jù)的實(shí)時(shí)同步袄琳,首先我們需要打開其 binlog 模式,具體怎么操作網(wǎng)上有很多教程燃乍,這里就不進(jìn)行闡述了唆樊。

那么,現(xiàn)在就直接進(jìn)入正題吧橘沥。

安裝

下載

Streamsets 可以直接從官網(wǎng)下載: https://archives.streamsets.com

這里安裝的是 Core Tarball 格式,當(dāng)然你也可以直接選擇下載 Full Tarball窗轩、Cloudera Parcel 或者其他格式。下載 Core Tarball 的好處是體積小座咆,后期需要什么庫的時(shí)候可以自行在 Streamsets Web 頁進(jìn)行下載痢艺。相對(duì)于 Core Tarball,F(xiàn)ull Tarball 默認(rèn)幫你下載了很多庫介陶,但是文件體積相對(duì)較大(>4G),并且可能很多庫我們暫時(shí)使用不到堤舒。

streamsets
streamsets

或者你可以直接使用這個(gè)鏈接進(jìn)行下載:https://archives.streamsets.com/datacollector/3.7.1/tarball/streamsets-datacollector-core-3.7.1.tgz

解壓啟動(dòng)

Streamsets Core Tarball 下載好后,直接解壓就可以使用哺呜,非常方便舌缤。

 tar xvzf streamsets-datacollector-core-3.7.1.tgz
 cd streamsets-datacollector-3.7.1/bin/
 ./streamsets dc
Java 1.8 detected; adding $SDC_JAVA8_OPTS of "-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -Djdk.nio.maxCachedBufferSize=262144" to $SDC_JAVA_OPTS
Configuration of maximum open file limit is too low: 1024 (expected at least 32768). Please consult https://goo.gl/6dmjXd

如果在運(yùn)行的時(shí)候遇到上面的報(bào)錯(cuò),修改操作系統(tǒng)的 open files 限制數(shù)量即可。

#vi /etc/security/limits.conf

添加兩行內(nèi)容:

  • soft nofile 65536
  • hard nofile 65536

運(yùn)行 'ulimit -n' 既可以看到 open files 設(shè)置值已生效国撵。

Web 頁

Streamsets 擁有一個(gè) Web 頁陵吸,默認(rèn)端口是 18630。瀏覽器中輸入 ip:18630 即可進(jìn)入 streamsets 的頁面介牙,默認(rèn)用戶名壮虫、密碼都是 admin。


streamsets
streamsets

Pipeline

準(zhǔn)備工作

因?yàn)樾枰獙?mysql 的數(shù)據(jù)實(shí)時(shí)同步到 hbase 中环础,但是下載的 Core Tarball 中沒有 MySQL Binary Log 以及 hbase 兩個(gè) stage library囚似,所以在 create new pipeline 之前需要先安裝它們。

安裝 MySQL Binary Log 庫

streamsets
streamsets

安裝 Hbase 庫,這里注意一下线得,hbase 庫位于 CDH 中饶唤,所以選擇一個(gè) CDH 版本進(jìn)行安裝

streamsets
streamsets

安裝好后在 Installed Stage Libraries 中就能看到已經(jīng)安裝了 MySQL Binary Log 和 Hbase


streamsets
streamsets

創(chuàng)建 Pipeline

MySQL Binary Log

創(chuàng)建一個(gè) MySQL Binary Log


streamsets
streamsets

設(shè)置 mysql 的連接參數(shù)(Hostname, Port 以及 Server ID),這里的 Server ID 與 mysql 配置文件(一般是 /etc/my.cnf)中的 server-id 保持一致


streamsets
streamsets

設(shè)置 mysql 的用戶名贯钩、密碼


streamsets
streamsets

其他設(shè)置:我們?cè)?Include Tables 欄設(shè)置了兩張表(表與表之間用逗號(hào)隔開)募狂,意思是監(jiān)控這兩張表的數(shù)據(jù)變化,其他表不關(guān)心魏保。


streamsets
streamsets

Stream Selector

創(chuàng)建一個(gè) Stream Selector熬尺,并將剛剛創(chuàng)建的 MySQL Binary Log 指向這個(gè) Stream Selector。 設(shè)置過濾條件谓罗, 比如說 ${record:value("/Table")=='cartype'} 就是過濾 cartype 表粱哼。

可以看到 Stream Selector 有兩個(gè)出口(1 和 2),后面我們將會(huì)看到: 1 輸出到 Hbase, 2 數(shù)據(jù)到 Trash


streamsets
streamsets

Hbase & Trash

分別創(chuàng)建 Hbase 和 Trash檩咱,連接到 Stream Selector 上


streamsets
streamsets

配置 Hbase


streamsets
streamsets

Trash 無需進(jìn)行配置

驗(yàn)證 & 啟動(dòng)

驗(yàn)證

點(diǎn)擊右上角的“眼鏡”揭措,驗(yàn)證整個(gè)流程是否有問題。

這里報(bào)錯(cuò):"java.lang.RuntimeException:Unable to get driver instance for jdbcUrl"刻蚯。這個(gè)報(bào)錯(cuò)的原因是缺少 mysql 連接的 jar 包绊含。解決起來也很簡單,下載一個(gè) jar 包然后放到 streamsets 指定的目錄下炊汹。我這邊的完整目錄是:/opt/streamsets/streamsets-datacollector-3.7.1/streamsets-libs/streamsets-datacollector-mysql-binlog-lib/lib/mysql-connector-java-5.1.26-bin.jar躬充, mysql-connector-java-5.1.26-bin.jar 就是我下載的 jar 包。

還有一點(diǎn)就是事先要將 Hbase 中相對(duì)應(yīng)的表創(chuàng)建好讨便,不然驗(yàn)證會(huì)提示錯(cuò)誤充甚。


streamsets
streamsets

接著在頁面上重啟 streamsets 即可。

streamsets
streamsets

重新驗(yàn)證霸褒,發(fā)現(xiàn)成功了伴找。

streamsets
streamsets

點(diǎn)擊右上角播放標(biāo)簽,啟動(dòng)流程废菱,這樣整個(gè)流程就已經(jīng)完成了(數(shù)據(jù)已經(jīng)在進(jìn)行實(shí)時(shí)同步)技矮,查看各個(gè) Stage 既可以看到有多少數(shù)據(jù)流入抖誉,多少數(shù)據(jù)流出。也可以直接進(jìn)入 hbase 數(shù)據(jù)庫中查看是否有數(shù)據(jù)生成衰倦。


streamsets
streamsets

以上就是如何使用 Streamsets 實(shí)時(shí)同步 mysql 數(shù)據(jù)到 hbase 中的整個(gè)操作流程袒炉。大家肯定發(fā)現(xiàn)了,整個(gè)流程沒有編寫任何的代碼耿币,相對(duì)于 binlog + Canal + 消息隊(duì)列 + JAR 的方案是不是高效一些呢梳杏。當(dāng)然任何方案都會(huì)有優(yōu)缺點(diǎn),Streamsets 這種方案的更多實(shí)際體驗(yàn)還需要更多的觀察淹接。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市叛溢,隨后出現(xiàn)的幾起案子塑悼,更是在濱河造成了極大的恐慌,老刑警劉巖楷掉,帶你破解...
    沈念sama閱讀 211,123評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件厢蒜,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡烹植,警方通過查閱死者的電腦和手機(jī)斑鸦,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來草雕,“玉大人巷屿,你說我怎么就攤上這事《蘸纾” “怎么了嘱巾?”我有些...
    開封第一講書人閱讀 156,723評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诫钓。 經(jīng)常有香客問我诅迷,道長嵌戈,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,357評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮猎莲,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘辅肾。我一直安慰自己锻拘,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評(píng)論 5 384
  • 文/花漫 我一把揭開白布纯路。 她就那樣靜靜地躺著或油,像睡著了一般。 火紅的嫁衣襯著肌膚如雪驰唬。 梳的紋絲不亂的頭發(fā)上顶岸,一...
    開封第一講書人閱讀 49,760評(píng)論 1 289
  • 那天腔彰,我揣著相機(jī)與錄音,去河邊找鬼辖佣。 笑死霹抛,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的卷谈。 我是一名探鬼主播杯拐,決...
    沈念sama閱讀 38,904評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼世蔗!你這毒婦竟也來了端逼?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤污淋,失蹤者是張志新(化名)和其女友劉穎顶滩,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體寸爆,經(jīng)...
    沈念sama閱讀 44,118評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡礁鲁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了赁豆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仅醇。...
    茶點(diǎn)故事閱讀 38,599評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖魔种,靈堂內(nèi)的尸體忽然破棺而出析二,到底是詐尸還是另有隱情,我是刑警寧澤务嫡,帶...
    沈念sama閱讀 34,264評(píng)論 4 328
  • 正文 年R本政府宣布甲抖,位于F島的核電站,受9級(jí)特大地震影響心铃,放射性物質(zhì)發(fā)生泄漏准谚。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評(píng)論 3 312
  • 文/蒙蒙 一去扣、第九天 我趴在偏房一處隱蔽的房頂上張望柱衔。 院中可真熱鬧,春花似錦愉棱、人聲如沸唆铐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽艾岂。三九已至,卻和暖如春朋其,著一層夾襖步出監(jiān)牢的瞬間王浴,已是汗流浹背脆炎。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評(píng)論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氓辣,地道東北人秒裕。 一個(gè)月前我還...
    沈念sama閱讀 46,286評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像钞啸,于是被迫代替她去往敵國和親几蜻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容