版本資訊:
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記憶體不足是否隻影響程序讀寫速率,而不影響程序的正常運作狀态?