ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步
Oracle里存儲的結(jié)構(gòu)化數(shù)據(jù)導(dǎo)出到Hadoop體系做離線計算是一種常見數(shù)據(jù)處置手段。近期有場景需要做Oracle到Hadoop體系的實時導(dǎo)入,這里以此案例做以介紹。
Oracle作為商業(yè)化的數(shù)據(jù)庫解決方案,自發(fā)性的獲取數(shù)據(jù)庫事務(wù)日志等比較困難,故選擇官方提供的同步工具OGG(Oracle GoldenGate)來解決。
安裝與基本配置
環(huán)境說明
軟件配置角色數(shù)據(jù)存儲服務(wù)及版本OGG版本IP源服務(wù)器OracleRelease11.2.0.1Oracle GoldenGate 11.2.1.0 for Oracle on Linux x86-6410.0.0.25
目標(biāo)服務(wù)器Hadoop 2.7.2Oracle GoldenGate for Big Data 12.2.0.1 on Linux x86-6410.0.0.2
以上源服務(wù)器上OGG安裝在Oracle用戶下,目標(biāo)服務(wù)器上OGG安裝在root用戶下。
注意
Oracle導(dǎo)出到異構(gòu)的存儲系統(tǒng),如MySQL,DB2,PG等以及對應(yīng)的不同平臺,如AIX,Windows,Linux等官方都有提供對應(yīng)的Oracle GoldenGate版本,可在這里或者在舊版本查詢下載安裝。
Oracle源端基礎(chǔ)配置
將下載到的對應(yīng)OGG版本放在方便的位置并解壓,本示例Oracle源端最終的解壓目錄為/u01/gg。配置環(huán)境變量
這里的環(huán)境變量主要是對執(zhí)行OGG的用戶添加OGG相關(guān)的環(huán)境變量,本示例為Oracle用戶添加的環(huán)境變量如下:(/home/oracle/.bash_profile文件)
Oracle打開歸檔模式
使用如下命令查看當(dāng)前是否為歸檔模式(archive)
如非以上狀態(tài),手動調(diào)整即可
Oracle打開日志相關(guān)
OGG基于輔助日志等進行實時傳輸,故需要打開相關(guān)日志確保可獲取事務(wù)內(nèi)容。通過一下命令查看當(dāng)前狀態(tài):
如果以上查詢結(jié)果非YES,可通過以下命令修改狀態(tài):
Oracle創(chuàng)建復(fù)制用戶
為了使Oracle里用戶的復(fù)制權(quán)限更加單純,故專門創(chuàng)建復(fù)制用戶,并賦予dba權(quán)限
最終這個ggs帳號的權(quán)限如下所示:
OGG初始化
進入OGG的主目錄執(zhí)行./ggsci,進入OGG命令行
Oracle創(chuàng)建模擬復(fù)制庫表
模擬建一個用戶叫tcloud,密碼tcloud,同時基于這個用戶建一張表,叫t_ogg。
目標(biāo)端基礎(chǔ)配置
將下載到的對應(yīng)OGG版本放在方便的位置并解壓,本示例Oracle目標(biāo)端最終的解壓目錄為/data/gg。配置環(huán)境變量
這里需要用到HDFS相關(guān)的庫,故需要配置java環(huán)境變量以及OGG相關(guān),并引入HDFS的相關(guān)庫文件,參考配置如下:
OGG初始化
目標(biāo)端的OGG初始化和源端類似進入OGG的主目錄執(zhí)行./ggsci,進入OGG命令行
Oracle源配置
Oracle實時傳輸?shù)紿adoop集群(HDFS,Hive,Kafka等)的基本原理如圖:
根據(jù)如上原理,配置大概分為如下步驟:源端目標(biāo)端配置ogg管理器(mgr);源端配置extract進程進行Oracle日志抓取;源端配置pump進程傳輸抓取內(nèi)容到目標(biāo)端;目標(biāo)端配置replicate進程復(fù)制日志到Hadoop集群或者復(fù)制到用戶自定義的解析器將最終結(jié)果落入到Hadoop集群。
配置全局變量
在源端服務(wù)器OGG主目錄下,執(zhí)行./ggsci到OGG命令行下,執(zhí)行如下命令:
其中./globals變量沒有的話可以用edit params ./globals來編輯添加即可(編輯器默認(rèn)使用的vim)
配置管理器mgr
在OGG命令行下執(zhí)行如下命令:
說明:PORT即mgr的默認(rèn)監(jiān)聽端口;DYNAMICPORTLIST動態(tài)端口列表,當(dāng)指定的mgr端口不可用時,會在這個端口列表中選擇一個,最大指定范圍為256個;AUTORESTART重啟參數(shù)設(shè)置表示重啟所有EXTRACT進程,最多5次,每次間隔3分鐘;PURGEOLDEXTRACTS即TRAIL文件的定期清理
在命令行下執(zhí)行start mgr即可啟動管理進程,通過info mgr可查看mgr狀態(tài)
添加復(fù)制表
在OGG命令行下執(zhí)行添加需要復(fù)制的表的操作,如下:
配置extract進程
配置extract進程OGG命令行下執(zhí)行如下命令:
說明:第一行指定extract進程名稱;dynamicresolution動態(tài)解析;SETENV設(shè)置環(huán)境變量,這里分別設(shè)置了Oracle數(shù)據(jù)庫以及字符集;userid ggs,password ggs即OGG連接Oracle數(shù)據(jù)庫的帳號密碼,這里使用2.3.4中特意創(chuàng)建的復(fù)制帳號;exttrail定義trail文件的保存位置以及文件名,注意這里文件名只能是2個字母,其余部分OGG會補齊;table即復(fù)制表的表明,支持*通配,必須以;結(jié)尾
接下來在OGG命令行執(zhí)行如下命令添加extract進程:
最后添加trail文件的定義與extract進程綁定:
可在OGG命令行下通過info命令查看狀態(tài):
配置pump進程
pump進程本質(zhì)上來說也是一個extract,只不過他的作用僅僅是把trail文件傳遞到目標(biāo)端,配置過程和extract進程類似,只是邏輯上稱之為pump進程
在OGG命令行下執(zhí)行:
說明:第一行指定extract進程名稱;passthru即禁止OGG與Oracle交互,我們這里使用pump邏輯傳輸,故禁止即可;dynamicresolution動態(tài)解析;userid ggs,password ggs即OGG連接Oracle數(shù)據(jù)庫的帳號密碼,這里使用2.3.4中特意創(chuàng)建的復(fù)制帳號;rmthost和mgrhost即目標(biāo)端OGG的mgr服務(wù)的地址以及監(jiān)聽端口;rmttrail即目標(biāo)端trail文件存儲位置以及名稱
分別將本地trail文件和目標(biāo)端的trail文件綁定到extract進程:
同樣可以在OGG命令行下使用info查看進程狀態(tài):
配置define文件
Oracle與MySQL,Hadoop集群(HDFS,Hive,kafka等)等之間數(shù)據(jù)傳輸可以定義為異構(gòu)數(shù)據(jù)類型的傳輸,故需要定義表之間的關(guān)系映射,在OGG命令行執(zhí)行:
在OGG主目錄下執(zhí)行:
./defgen paramfile dirprm/tcloud.prm
完成之后會生成這樣的文件/u01/gg/dirdef/tcloud.t_ogg,將這個文件拷貝到目標(biāo)端的OGG主目錄下的dirdef目錄即可。
目標(biāo)端的配置
創(chuàng)建目標(biāo)表(目錄)
這里主要是當(dāng)目標(biāo)端為HDFS目錄或者Hive表或者MySQL數(shù)據(jù)庫時需要手動先在目標(biāo)端創(chuàng)建好目錄或者表,創(chuàng)建方法都類似,這里我們模擬實時傳入到HDFS目錄,故手動創(chuàng)建一個接收目錄即可
hadoop –fs mkdir /gg/replication/hive/
配置管理器mgr
目標(biāo)端的OGG管理器(mgr)和源端的配置類似,在OGG命令行下執(zhí)行:
配置checkpoint
checkpoint即復(fù)制可追溯的一個偏移量記錄,在全局配置里添加checkpoint表即可
保存即可
配置replicate進程
在OGG的命令行下執(zhí)行:
說明:REPLICATE r2hdfs定義rep進程名稱;sourcedefs即在3.6中在源服務(wù)器上做的表映射文件;TARGETDB LIBFILE即定義HDFS一些適配性的庫文件以及配置文件,配置文件位于OGG主目錄下的dirprm/hdfs.props;REPORTCOUNT即復(fù)制任務(wù)的報告生成頻率;GROUPTRANSOPS為以事務(wù)傳輸時,事務(wù)合并的單位,減少IO操作;MAP即源端與目標(biāo)端的映射關(guān)系
其中property=dirprm/hdfs.props的配置中,最主要的幾項配置及注釋如下:
具體的OGG for Big Data支持參數(shù)以及定義可參考地址
最后在OGG的命令行下執(zhí)行:
將文件與復(fù)制進程綁定即可
測試
啟動進程
在源端和目標(biāo)端的OGG命令行下使用start [進程名]的形式啟動所有進程。
啟動順序按照源mgr——目標(biāo)mgr——源extract——源pump——目標(biāo)replicate來完成。
檢查進程狀態(tài)
以上啟動完成之后,可在源端與目標(biāo)端的OGG命令行下使用info [進程名]來查看所有進程狀態(tài),如下:
源端:
目標(biāo)端:
所有的狀態(tài)均是RUNNING即可。(當(dāng)然也可以使用info all來查看所有進程狀態(tài))
測試同步更新效果
測試方法比較簡單,直接在源端的數(shù)據(jù)表中insert,update,delete操作即可。由于Oracle到Hadoop集群的同步是異構(gòu)形式,目前尚不支持truncate操作。
源端進行insert操作
查看源端trail文件狀態(tài)
查看目標(biāo)端trail文件狀態(tài)
查看HDFS中是否有寫入
注意:從寫入到HDFS的文件內(nèi)容看,文件的格式如下:
很明顯Oracle的數(shù)據(jù)已準(zhǔn)實時導(dǎo)入到HDFS了。導(dǎo)入的內(nèi)容實際是一條條的類似流水日志(具體日志格式不同的傳輸格式,內(nèi)容略有差異,本例使用的delimitedtext。格式為操作符 數(shù)據(jù)庫.表名 操作時間戳(GMT+0) 當(dāng)前時間戳(GMT+8) 偏移量 字段1名稱 字段1內(nèi)容 字段2名稱 字段2內(nèi)容),如果要和Oracle的表內(nèi)容完全一致,需要客戶手動實現(xiàn)解析日志并寫入到Hive的功能,這里官方并沒有提供適配器。目前騰訊側(cè)已實現(xiàn)該功能的開發(fā)。
當(dāng)然你可以直接把這個HDFS的路徑通過LOCATION的方式在Hive上建外表(external table)達到實時導(dǎo)入Hive的目的。
總結(jié)
OGG for Big Data實現(xiàn)了Oracle實時同步到Hadoop體系的接口,但得到的日志目前仍需應(yīng)用層來解析(關(guān)系型數(shù)據(jù)庫如MySQL時OGG對應(yīng)版本已實現(xiàn)應(yīng)用層的解析,無需人工解析)。
OGG的幾個主要進程mgr,extract,pump,replicate配置方便,可快速配置OGG與異構(gòu)關(guān)系存儲結(jié)構(gòu)的實時同步。后續(xù)如果有新增表,修改對應(yīng)的extract,pump和replicate進程即可,當(dāng)然如果是一整個庫,在配置上述2個進程時,使用通配的方式即可。
附錄
OGG到Hadoop體系的實時同步時,可在源端extract和pump進程配置不變的情況下,直接在目標(biāo)端增加replicate進程的方式,增加同步目標(biāo),以下簡單介紹本示例中增加同步到Kafka的配置方法。
本示例中extract,pump進程都是現(xiàn)成的,無需再添加。只需要在目標(biāo)端增加同步到Kafka的replicate進程即可。
在OGG的命令行下執(zhí)行:
replicate進程和導(dǎo)入到HDFS的配置類似,差異是調(diào)用不同的配置dirprm/r2kafka.props。這個配置的主要配置如下:
r2kafka.props引用的custom_kafka_producer.properties定義了Kafka的相關(guān)配置如下:
以上配置以及其他可配置項可參考地址:
以上配置完成后,在OGG命令行下添加trail文件到replicate進程并啟動導(dǎo)入到Kafka的replicate進程
檢查實時同步到kafka的效果,在Oracle源端更新表的同時,使用kafka客戶端自帶的腳本去查看這里配置的ggtopic這個kafkatopic下的消息:
目標(biāo)端Kafka的同步情況:
顯然,Oracle的數(shù)據(jù)已準(zhǔn)實時同步到Kafka。從頭開始消費這個topic發(fā)現(xiàn)之前的同步信息也存在。架構(gòu)上可以直接接Storm,SparkStreaming等直接消費kafka消息進行業(yè)務(wù)邏輯的處理。
從Oracle實時同步到其他的Hadoop集群中,官方最新版本提供了HDFS,HBase,Flume和Kafka,相關(guān)配置可參考官網(wǎng)給出的例子配置即可。
總結(jié)
以上是生活随笔為你收集整理的ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python3.6.5怎么下载_wind
- 下一篇: iso标准软件测试标准,软件质量-ISO