很多情況大數(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í)使用不到堤舒。
或者你可以直接使用這個(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。
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 庫
安裝 Hbase 庫,這里注意一下线得,hbase 庫位于 CDH 中饶唤,所以選擇一個(gè) CDH 版本進(jìn)行安裝
安裝好后在 Installed Stage Libraries 中就能看到已經(jīng)安裝了 MySQL Binary Log 和 Hbase
創(chuàng)建 Pipeline
MySQL Binary Log
創(chuàng)建一個(gè) MySQL Binary Log
設(shè)置 mysql 的連接參數(shù)(Hostname, Port 以及 Server ID),這里的 Server ID 與 mysql 配置文件(一般是 /etc/my.cnf)中的 server-id 保持一致
設(shè)置 mysql 的用戶名贯钩、密碼
其他設(shè)置:我們?cè)?Include Tables 欄設(shè)置了兩張表(表與表之間用逗號(hào)隔開)募狂,意思是監(jiān)控這兩張表的數(shù)據(jù)變化,其他表不關(guān)心魏保。
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
Hbase & Trash
分別創(chuàng)建 Hbase 和 Trash檩咱,連接到 Stream Selector 上
配置 Hbase
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 即可。
重新驗(yàn)證霸褒,發(fā)現(xiàn)成功了伴找。
點(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 實(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)還需要更多的觀察淹接。