­

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表數據格式如下

隊列文件大小(單位:KB):

測試過程:

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內存不足是否隻影響進程讀寫速率,而不影響進程的正常運行狀態?

Tags: