Oracle里存储的结构化数据导出到Hadoop体系做离线计算是一种常见数据处置手段。近期有场景需要做Oracle到Hadoop体系的实时导入,这里以此案例做以介绍。

Oracle作为商业化的数据库解决方案,自发性的获取数据库事务日志等比较困难,故选择官方提供的同步工具OGG(Oracle GoldenGate)来解决。

安装与基本配置

环境说明

软件配置角色数据存储服务及版本OGG版本IP源服务器OracleRelease11.2.0.1Oracle GoldenGate 11.2.1.0 for Oracle on Linux x86-6410.0.0.25

目标服务器Hadoop 2.7.2Oracle GoldenGate for Big Data 12.2.0.1 on Linux x86-6410.0.0.2

以上源服务器上OGG安装在Oracle用户下,目标服务器上OGG安装在root用户下。

注意

Oracle导出到异构的存储系统,如MySQL,DB2,PG等以及对应的不同平台,如AIX,Windows,Linux等官方都有提供对应的Oracle GoldenGate版本,可在这里或者在旧版本查询下载安装。

Oracle源端基础配置

将下载到的对应OGG版本放在方便的位置并解压,本示例Oracle源端最终的解压目录为/u01/gg。配置环境变量

这里的环境变量主要是对执行OGG的用户添加OGG相关的环境变量,本示例为Oracle用户添加的环境变量如下:(/home/oracle/.bash_profile文件)

Oracle打开归档模式

使用如下命令查看当前是否为归档模式(archive)

如非以上状态,手动调整即可

Oracle打开日志相关

OGG基于辅助日志等进行实时传输,故需要打开相关日志确保可获取事务内容。通过一下命令查看当前状态:

如果以上查询结果非YES,可通过以下命令修改状态:

Oracle创建复制用户

为了使Oracle里用户的复制权限更加单纯,故专门创建复制用户,并赋予dba权限

最终这个ggs帐号的权限如下所示:

OGG初始化

进入OGG的主目录执行./ggsci,进入OGG命令行

Oracle创建模拟复制库表

模拟建一个用户叫tcloud,密码tcloud,同时基于这个用户建一张表,叫t_ogg。

目标端基础配置

将下载到的对应OGG版本放在方便的位置并解压,本示例Oracle目标端最终的解压目录为/data/gg。配置环境变量

这里需要用到HDFS相关的库,故需要配置java环境变量以及OGG相关,并引入HDFS的相关库文件,参考配置如下:

OGG初始化

目标端的OGG初始化和源端类似进入OGG的主目录执行./ggsci,进入OGG命令行

Oracle源配置

Oracle实时传输到Hadoop集群(HDFS,Hive,Kafka等)的基本原理如图:

根据如上原理,配置大概分为如下步骤:源端目标端配置ogg管理器(mgr);源端配置extract进程进行Oracle日志抓取;源端配置pump进程传输抓取内容到目标端;目标端配置replicate进程复制日志到Hadoop集群或者复制到用户自定义的解析器将最终结果落入到Hadoop集群。

配置全局变量

在源端服务器OGG主目录下,执行./ggsci到OGG命令行下,执行如下命令:

其中./globals变量没有的话可以用edit params ./globals来编辑添加即可(编辑器默认使用的vim)

配置管理器mgr

在OGG命令行下执行如下命令:

说明:PORT即mgr的默认监听端口;DYNAMICPORTLIST动态端口列表,当指定的mgr端口不可用时,会在这个端口列表中选择一个,最大指定范围为256个;AUTORESTART重启参数设置表示重启所有EXTRACT进程,最多5次,每次间隔3分钟;PURGEOLDEXTRACTS即TRAIL文件的定期清理

在命令行下执行start mgr即可启动管理进程,通过info mgr可查看mgr状态

添加复制表

在OGG命令行下执行添加需要复制的表的操作,如下:

配置extract进程

配置extract进程OGG命令行下执行如下命令:

说明:第一行指定extract进程名称;dynamicresolution动态解析;SETENV设置环境变量,这里分别设置了Oracle数据库以及字符集;userid ggs,password ggs即OGG连接Oracle数据库的帐号密码,这里使用2.3.4中特意创建的复制帐号;exttrail定义trail文件的保存位置以及文件名,注意这里文件名只能是2个字母,其余部分OGG会补齐;table即复制表的表明,支持*通配,必须以;结尾

接下来在OGG命令行执行如下命令添加extract进程:

最后添加trail文件的定义与extract进程绑定:

可在OGG命令行下通过info命令查看状态:

配置pump进程

pump进程本质上来说也是一个extract,只不过他的作用仅仅是把trail文件传递到目标端,配置过程和extract进程类似,只是逻辑上称之为pump进程

在OGG命令行下执行:

说明:第一行指定extract进程名称;passthru即禁止OGG与Oracle交互,我们这里使用pump逻辑传输,故禁止即可;dynamicresolution动态解析;userid ggs,password ggs即OGG连接Oracle数据库的帐号密码,这里使用2.3.4中特意创建的复制帐号;rmthost和mgrhost即目标端OGG的mgr服务的地址以及监听端口;rmttrail即目标端trail文件存储位置以及名称

分别将本地trail文件和目标端的trail文件绑定到extract进程:

同样可以在OGG命令行下使用info查看进程状态:

配置define文件

Oracle与MySQL,Hadoop集群(HDFS,Hive,kafka等)等之间数据传输可以定义为异构数据类型的传输,故需要定义表之间的关系映射,在OGG命令行执行:

在OGG主目录下执行:

./defgen paramfile dirprm/tcloud.prm

完成之后会生成这样的文件/u01/gg/dirdef/tcloud.t_ogg,将这个文件拷贝到目标端的OGG主目录下的dirdef目录即可。

目标端的配置

创建目标表(目录)

这里主要是当目标端为HDFS目录或者Hive表或者MySQL数据库时需要手动先在目标端创建好目录或者表,创建方法都类似,这里我们模拟实时传入到HDFS目录,故手动创建一个接收目录即可

hadoop –fs mkdir /gg/replication/hive/

配置管理器mgr

目标端的OGG管理器(mgr)和源端的配置类似,在OGG命令行下执行:

配置checkpoint

checkpoint即复制可追溯的一个偏移量记录,在全局配置里添加checkpoint表即可

保存即可

配置replicate进程

在OGG的命令行下执行:

说明:REPLICATE r2hdfs定义rep进程名称;sourcedefs即在3.6中在源服务器上做的表映射文件;TARGETDB LIBFILE即定义HDFS一些适配性的库文件以及配置文件,配置文件位于OGG主目录下的dirprm/hdfs.props;REPORTCOUNT即复制任务的报告生成频率;GROUPTRANSOPS为以事务传输时,事务合并的单位,减少IO操作;MAP即源端与目标端的映射关系

其中property=dirprm/hdfs.props的配置中,最主要的几项配置及注释如下:

具体的OGG for Big Data支持参数以及定义可参考地址

最后在OGG的命令行下执行:

将文件与复制进程绑定即可

测试

启动进程

在源端和目标端的OGG命令行下使用start [进程名]的形式启动所有进程。

启动顺序按照源mgr——目标mgr——源extract——源pump——目标replicate来完成。

检查进程状态

以上启动完成之后,可在源端与目标端的OGG命令行下使用info [进程名]来查看所有进程状态,如下:

源端:

目标端:

所有的状态均是RUNNING即可。(当然也可以使用info all来查看所有进程状态)

测试同步更新效果

测试方法比较简单,直接在源端的数据表中insert,update,delete操作即可。由于Oracle到Hadoop集群的同步是异构形式,目前尚不支持truncate操作。

源端进行insert操作

查看源端trail文件状态

查看目标端trail文件状态

查看HDFS中是否有写入

注意:从写入到HDFS的文件内容看,文件的格式如下:

很明显Oracle的数据已准实时导入到HDFS了。导入的内容实际是一条条的类似流水日志(具体日志格式不同的传输格式,内容略有差异,本例使用的delimitedtext。格式为操作符 数据库.表名 操作时间戳(GMT+0) 当前时间戳(GMT+8) 偏移量 字段1名称 字段1内容 字段2名称 字段2内容),如果要和Oracle的表内容完全一致,需要客户手动实现解析日志并写入到Hive的功能,这里官方并没有提供适配器。目前腾讯侧已实现该功能的开发。

当然你可以直接把这个HDFS的路径通过LOCATION的方式在Hive上建外表(external table)达到实时导入Hive的目的。

总结

OGG for Big Data实现了Oracle实时同步到Hadoop体系的接口,但得到的日志目前仍需应用层来解析(关系型数据库如MySQL时OGG对应版本已实现应用层的解析,无需人工解析)。

OGG的几个主要进程mgr,extract,pump,replicate配置方便,可快速配置OGG与异构关系存储结构的实时同步。后续如果有新增表,修改对应的extract,pump和replicate进程即可,当然如果是一整个库,在配置上述2个进程时,使用通配的方式即可。

附录

OGG到Hadoop体系的实时同步时,可在源端extract和pump进程配置不变的情况下,直接在目标端增加replicate进程的方式,增加同步目标,以下简单介绍本示例中增加同步到Kafka的配置方法。

本示例中extract,pump进程都是现成的,无需再添加。只需要在目标端增加同步到Kafka的replicate进程即可。

在OGG的命令行下执行:

replicate进程和导入到HDFS的配置类似,差异是调用不同的配置dirprm/r2kafka.props。这个配置的主要配置如下:

r2kafka.props引用的custom_kafka_producer.properties定义了Kafka的相关配置如下:

以上配置以及其他可配置项可参考地址:

以上配置完成后,在OGG命令行下添加trail文件到replicate进程并启动导入到Kafka的replicate进程

检查实时同步到kafka的效果,在Oracle源端更新表的同时,使用kafka客户端自带的脚本去查看这里配置的ggtopic这个kafkatopic下的消息:

目标端Kafka的同步情况:

显然,Oracle的数据已准实时同步到Kafka。从头开始消费这个topic发现之前的同步信息也存在。架构上可以直接接Storm,SparkStreaming等直接消费kafka消息进行业务逻辑的处理。

从Oracle实时同步到其他的Hadoop集群中,官方最新版本提供了HDFS,HBase,Flume和Kafka,相关配置可参考官网给出的例子配置即可。

ogg oracle 测试kafka_基于OGG的Oracle与Hadoop集群/kafka准实时同步相关推荐

  1. 基于阿里云服务器搭建hadoop集群:HDFS的namenode WEB访问9870端口打不开解决方法

    基于阿里云服务器搭建hadoop集群:HDFS的namenode WEB访问9870端口打不开解决方法 以下是基于我所面临问题的解决办法. 1.在本地的c:windows/system32/dirve ...

  2. ogg oracle 测试kafka_利用ogg实现oracle到kafka的增量数据实时同步

    前言 ogg即Oracle GoldenGate是Oracle的同步工具,本文讲如何配置ogg以实现Oracle数据库增量数据实时同步到kafka中,其中同步消息格式为json. 下面是我的源端和目标 ...

  3. 基于K8S,spark访问hadoop集群的共享层hive表数据历险记

    前言 由于Spark的抽象设计,我们可以使用第三方资源管理平台调度和管理Spark作业,比如Yarn.Mesos和Kubernetes. 基本原理 基本原理当我们通过spark-submit将Spar ...

  4. 基于OGG的Oracle与Hadoop集群准实时同步介绍

    版权声明:本文由王亮原创文章,转载请注明出处:  文章原文链接:https://www.qcloud.com/community/article/220 来源:腾云阁 https://www.qclo ...

  5. 【Oracle 集群】ORACLE DATABASE 11G RAC 知识图文详细教程之集群概念介绍(一)

    集群概念介绍(一)) 白宁超 2015年7月16日 概述:写下本文档的初衷和动力,来源于上篇的<oracle基本操作手册>.oracle基本操作手册是作者研一假期对oracle基础知识学习 ...

  6. 一脸懵逼学习基于CentOs的Hadoop集群安装与配置(三台机器跑集群)

    1:Hadoop分布式计算平台是由Apache软件基金会开发的一个开源分布式计算平台.以Hadoop分布式文件系统(HDFS)和MapReduce(Google MapReduce的开源实现)为核心的 ...

  7. Ubuntu Server 12.04 搭建 hadoop 集群版环境——基于VirtualBox

    1 . 下载和安装Oracle VM VitualBox http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/i ...

  8. 基于docker的hadoop集群搭建

    最近想学习如何使用hdfs来存储文件,在网上学习了一下,明确了HDFS(Hadoop Distribute File System 分布式存储).mapReduce(分布式计算).YARN(Yet A ...

  9. linux集群管理平台,基于Linux平台的高可用集群管理系统的研究与实现

    摘要: 集群管理系统的高可用性是指其能够连续地对外提供服务,本文针对集群系统的高可用性,以开源的集群搭建和管理软件KUSU为基础,以集群管理节点的双机热备份技术理论为支撑,以实现集群系统的帮障检测与业 ...

最新文章

  1. 51CTO专访人人网黄晶:SNS网站后台架构探秘
  2. 在VS2010 中使用subversion 进行代码的分支与合并
  3. idea怎么直接拉去git_如何将GitHub上面的项目拉取到IDEA中
  4. C#.Net工作笔记005---c#中list合并去重_以及单纯合并_值类型list去重
  5. Python基础知识汇总
  6. 特斯拉自动驾驶要命?大白天忽然开启”自杀模式“
  7. wpf 执行mysql命令_WPF(.net 3.5)使用MySql.Data.dll进行mysql数据库操作
  8. winform前后端框架_ABP开发框架前后端开发系列(1)框架的总体介绍
  9. 系统分析师视频教程-张友生
  10. ESP8266 WIFI模块学习之路(9)——C++实现通过电脑串口读取ESP8266数据
  11. 三菱PLC和卓岚串口服务器使用方法
  12. 电梯维修属于什么服务器,​电梯维修属于服务业吗
  13. linux 目录权限上下文,谢烟客---------Linux之文件安全上下文及特殊权限位
  14. Excel文本日期格式转为日期格式的方法
  15. 计算机的表白隐藏功能,微信隐藏符号功能大全 情人节可以发这些表白
  16. js页面跳转和js对iframe进行页面跳转、刷新
  17. RISC-V “异军”突起,英特尔:消灭不了就加入它
  18. 35岁程序员如何转型
  19. 奇梦达产能削减四分之三
  20. 网卡驱动程序不正常上不了网的修复方法

热门文章

  1. 前端学习(1756):前端调试值之如何监控页面的动画
  2. 前端学习(1426):ajax封装
  3. git学习(8):windows系统下VI编辑器的基本使用
  4. mybatis学习(19):模糊查询#
  5. 第四十八期:只因写了一段爬虫,公司200多人被抓!
  6. 33tomcat目录结构
  7. 项目管理(5):备战pmp
  8. openOCD安装 极简教程
  9. js中自己实现bind函数的方式
  10. 纯CSS实现侧边栏/分栏高度自动相等