天天看點

OGG FOR BigData(Hive) GoldenGate 性能測試

版本資訊:

Oracle GoldenGate Command Interpreter

Version 12.2.0.1.160419 OGGCORE_12.2.0.1.0OGGBP_PLATFORMS_160430.1401

Linux, x64, 64bit (optimized), Generic on Apr 30 2016 16:21:34

Operating system character set identified as UTF-8.

hive.props

gg.handlerlist=hdfs

#Handler Properties
gg.handler.hdfs.type=hdfs
gg.handler.hdfs.rootFilePath=/hive/foola.db
gg.handler.hdfs.format=delimitedtext
gg.handler.hdfs.format.includeColumnNames=false
gg.handler.hdfs.includeTokens=false
gg.handler.hdfs.format.includeCurrentTimestamp=false
gg.handler.hdfs.format.includeTableName=false
gg.handler.hdfs.format.includeOpTimestamp=false
gg.handler.hdfs.format.includeOpType=false
gg.handler.hdfs.format.includePosition=false
gg.handler.hdfs.format.pkUpdateHandlingformat.pkUpdateHandling=update
#gg.handler.hdfs.format.updateOpKey=U

gg.handler.hdfs.mode=tx
gg.handler.hdfs.format.fieldDelimiter=,

#Hive Metadata Provider Properties
gg.mdp.type=hive
gg.mdp.connectionUrl=jdbc:hive2://192.2.2.10:10000/foola
gg.mdp.driverClassName=org.apache.hive.jdbc.HiveDriver

gg.handler.hdfs.format.iso8601Format=false
#goldengate.userexit.timestamp=utc
goldengate.userexit.writers=javawriter
#gg.contentreplaceregex=^(\\d\\d\\d\\d-\\d\\d-\\d\\d):(\\d\\d:\\d\\d:\\d\\d:\\d\\d\\d\\d\\d\\d)$
#gg.contentreplacestring=$1 $2

javawriter.stats.display=TRUE
javawriter.stats.full=TRUE

gg.log=log4j
gg.log.level=INFO

gg.report.time=30sec

gg.classpath=dirprm/*:/home/foola/app/hadoop-2.6.0-cdh5.7.1/share/hadoop/common/*:/home/foola/app/hadoop-2.6.0-cdh5.7.1/share/hadoop/common/lib/*:/home/foola/app/hadoop-2.6.0-cdh5.7.1/share/hadoop/hdfs/*:/home/foola/app/hadoop-2.6.0-cdh5.7.1/etc/hadoop/:/home/foola/app/hadoop-2.6.0-cdh5.7.1/share/hadoop/mapreduce/*:/home/foola/app/apache-hive-1.2.1-bin/lib/*:/home/foola/app/apache-hive-1.2.1-bin/hcatalog/share/hcatalog/*:/home/foola/app/apache-hive-1.2.1-bin/hcatalog/share/webhcat/java-client/*:/home/foola/app/apache-hive-1.2.1-bin/conf/:

javawriter.bootoptions=-Xmx7168m -Xms480m -Djava.class.path=ggjava/ggjava.jar

           

hive.prm

REPLICAT hive
-- Trail file for this example is located in "AdapterExamples/trail" directory
-- Command to add REPLICAT
-- add replicat hive, exttrail AdapterExamples/trail/tr
TARGETDB LIBFILE libggjava.so SET property=dirprm/hive.props

-- SOURCEDEFS ./dirdef/ta3test.def
REPORTCOUNT EVERY 1 MINUTES, RATE
GROUPTRANSOPS 10000
ASSUMETARGETDEFS
-- getUpdateBefores

-- TRANLOGOPTIONS FETCHPARTIALLOB

-- map pdborcl.foola.test1, target foola.test1, COLMAP(USEDEFAULTS);
map pdborcl.foola.ac02, target foola.ac02_c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV('GGHEADER','COMMITTIMESTAMP'),sync_time=@DATENOW()), KEYCOLS(source_id);
map pdborcl.foola.ac02_c, target foola.ac02_c_c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV('GGHEADER','COMMITTIMESTAMP'),sync_time=@DATENOW()), KEYCOLS(source_id);
map pdborcl.foola.test1, target foola.test1_c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV('GGHEADER','COMMITTIMESTAMP'),sync_time=@DATENOW()), KEYCOLS(source_id);
-- map drgg.aa01c, target foola.aa01c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV('GGHEADER','COMMITTIMESTAMP'),sync_time=@DATENOW()), KEYCOLS(source_id);
map pdborcl.foola.ac43a1, target foola.ac43a1_c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV('GGHEADER','COMMITTIMESTAMP'),sync_time=@DATENOW()), KEYCOLS(source_id);
map pdborcl.foola.ac44a1, target foola.ac44a1_c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV('GGHEADER','COMMITTIMESTAMP'),sync_time=@DATENOW()), KEYCOLS(source_id);


-- map pdborcl.foola.ac43a1, target foola.ac43a1_c, COLMAP(USEDEFAULTS,source_id='1',chg_type=@GETENV('GGHEADER','OPTYPE'),src_time=@GETENV("GGHEADER", "COMMITTIMESTAMP"),sync_time=@DATENOW());
           

場景

資料庫對單表AC02執行更新(總更新數目:161萬+),AC02表資料格式如下

OGG FOR BigData(Hive) GoldenGate 性能測試

隊列檔案大小(機關:KB):

OGG FOR BigData(Hive) GoldenGate 性能測試

測試過程:

1、對AC02表進行5W資料更新,此時hive.props中記憶體參數配置為

javawriter.bootoptions=-Xmx512m -Xms32m -Djava.class.path=ggjava/ggjava.jar

資料可以正常快速的接收完成

2、對AC02表進行15W資料更新,仍采用上述記憶體配置,此時程序再擷取到13w資料左右時,開始出現卡頓,并且資料接收很慢,通過stats hive, total方式檢視,2min僅增加64行資料的,最後程序狀态發生改變,由RUNNING變為ABENDED。修改記憶體配置

javawriter.bootoptions=-Xmx1024m -Xms128m -Djava.class.path=ggjava/ggjava.jar

此時再重新開機程序,發現資料可以正常快速的接收,且hive中不存在重複資料。

3、對AC02表程序161W資料更新,記憶體參數配置

javawriter.bootoptions=-Xmx4096m -Xms256m -Djava.class.path=ggjava/ggjava.jar

重新開機程序,更新資料庫資料并送出,此時目标端程序再擷取80w資料之前程序正常,80w之後資料讀寫明顯減慢,且使用stats 方式檢視會出現指令逾時的錯誤提示:ERROR:Send Message……,過一段時間後,程序狀态直接變為ABENDED。修改記憶體參數值

javawriter.bootoptions=-Xmx7168m -Xms480m -Djava.class.path=ggjava/ggjava.jar

重新開機程序,資料在150w之前加載正常且速度較快,但150W之後讀寫速度減慢,最後讀寫可以正常完成,但耗時較久。

需要解決的問題

源端有21個地市的社保業務資料庫,目标端則隻有一個Hive,這樣目标端需要幾百個程序來接收源端的傳輸隊列檔案。而實體主機記憶體有限,不可能對每個程序都配置設定較大的記憶體配置,一旦由于ogg程序記憶體不足造成目标端程序宕掉,在後期運維時會出現較大問題,且對我們目前系統的資料清洗産生較大影響,是以需要解決問題有:

1、Ogg程序的記憶體優化配置?

2、Ogg記憶體不足是否隻影響程序讀寫速率,而不影響程序的正常運作狀态?