0320-如何使用StreamSets实现Oracle中变化数据实时写入Kudu
sinye56 2024-09-24 00:08 23 浏览 0 评论
温馨提示:如果使用电脑查看图片不清晰,可以使用手机打开文章单击文中的图片放大查看高清原图。
Fayson的github:
https://github.com/fayson/cdhproject
提示:代码块部分可以左右滑动查看噢
1.文档编写目的
在前面的文章Fayson介绍了关于StreamSets的一些文章,参考《
如何在CDH中安装和使用StreamSets
》、《
如何使用StreamSets从MySQL增量更新数据到Hive
》、《
如何使用StreamSets实现MySQL中变化数据实时写入Kudu
》、《
如何使用StreamSets实时采集Kafka并入库Kudu
》、《
如何使用StreamSets实现MySQL中变化数据实时写入HBase
》、《
如何使用StreamSets实时采集Kafka数据并写入Hive表
》和《
如何使用StreamSets实时采集Kafka中嵌套JSON数据并写入Hive表
》,本篇文章Fayson主要介绍如何使用StreamSets实时采集Oracle中的变化数据实时写入Kudu,StreamSets的流程处理如下:
- 内容概述
1.配置StreamSets创建Pipeline及测试
2.总结
3.附录:脚本代码
- 测试环境
1.CentOS7.2
2.CM和CDH版本为cdh5.14
3.Oracle11.2.0.4
4.StreamSets3.2.0
- 前置条件
1.集群已经安装StreamSets并运行正常
2.Oracle及Oracle LogMiner运行正常
2.配置StreamSets创建Pipeline及测试
1.在CDH集群中cdh04节点添加StreamSets DataCollector实例服务并启动。
2.在浏览器中输入http://cdh04:18630/,即可访问StreamStes Web Console服务。针对此测试场景新建一个命名为oracle_sdc_kudu的Pipeline,保存后开始构建对ORACLE Database实时数据同步的数据流管道。
3.在 Origin Processer中选择 Oracle CDC Client。
4.在 Destination Processor中选择 Kudu-Apache Kudu 1.6.0。此CDH测试集群中已部署Kudu 1.6.0 版本。
5.根据测试场景需求描述,在StreamSets中将命名为oracle_sdc_kudu 的Pipeline配置为Oracle CDC Client 与 Kudu 的端到端实时数据同步模式。
6. 将StreamSets Origin 端 Oracle CDC Client 服务的关键配置按需调整如下。
- Tables 配置为ORACLE DATABASE中的定义的测试表TEST.SDC,注意ORACEL大小写敏感。
- Initial Change配置为 From Latest Change,实时数据同步只需要捕获变化数据。
- Operation配置为KUDU对应支持的CRUD操作类型,匹配ORACLE Database中实时变化数据的增删改操作事务操作。
- JDBC Connection String 配置为源端Oracle Database 服务的JDBC访问连接串:jdbc:oracle:thin:@10.89.180.21:1521:orcl。
- USE CREDENTIALS 配置为开启,便于配置ORACLE DATABASE访问认证信息。
- JDBC Driver Class Name 配置为ORACLE DATABASE R2 11.2.0.4提供的ojdbc6.jar 中定义的JDBC驱动程序fullPath: oracle.jdbc.driver.OracleDriver。
7.将StreamSets Destination 端 Kudu 服务的关键配置按需调整如下
- Stage Library配置为CDH 5.14.0安装包中内置的对应KUDU版本。
- Kudu Masters 配置为 CDH集群中Kudu Master服务地址:10.89.180.11:7051。
- Table Name 配置为实时数据同步到Kudu中目标表:impala::POC_ENDING.sdc。
- Field Column Mapping 配置为 SDC与Kudu的字段映射关系。
- Default Operation 配置为INSERT类型的SDC缺省操作事件,以匹配Kudu的KV数据库模式,基于主键的自动更新Streamsets中实时数据同步产生的ORACLE Database Insert and update事件。
- Change Format Log 配置为此测试场景中StreamSets Origin端定义的Oracle CDC Client类型,以解析实时数据同步ORCLE DATABASE的REDO LOG事件与操作。
8.添加Oracle Database 的JDBC驱动程序包ojdbc.jar。
- 在Cloudera Manager中对StreamSets服务管理其资源服务目录信息及权限。
详情可参考:https://streamsets.com/documentation/datacollector/latest/help。
9.针对此测试场景,完成以上配置步骤后,执行validate操作,验证无误即可运行此Pipeline,开始ORACLE to KUDU的实时数据同步。
StreamSets Pipeline开启后,正常运行状态及其监控图表与日志查看。
10.验证新增数据实时同步。
- 在Oracle Database sqlplus中执行以下脚本内容。
insert into test.sdc(id,name) values('1','AAA'); insert into test.sdc(id,name) values('2','BBB'); insert into test.sdc(id,name) values('3','CCC'); insert into test.sdc(id,name) values('4','DDD'); insert into test.sdc(id,name) values('5','EEE'); insert into test.sdc(id,name) values('6','FFF'); commit;
(可左右滑动)
- StreamSet 监控信息。
- 在Impala-shell中执行以下脚本内容。
select * from poc_ending.sdc; select count(1) from poc_ending.sdc;
(可左右滑动)
11.验证修改数据的实时同步。
- 在Oracle Database sqlplus中执行以下脚本内容。
update test.sdc set name='111' where id ='1'; update test.sdc set name='222' where id ='2'; update test.sdc set name='333' where id ='3'; update test.sdc set name='444' where id ='4'; update test.sdc set name='555' where id ='5'; update test.sdc set name='666' where id ='6'; commit;
(可左右滑动)
- StreamSet 监控信息。
- 在Impala-shell中执行以下脚本内容。
select * from poc_ending.sdc; select count(1) from poc_ending.sdc;
(可左右滑动)
12.验证删除数据的实时同步。
- 在Oracle Database sqlplus中执行以下脚本内容。
delete from test.sdc where id ='1'; delete from test.sdc where id ='2'; delete from test.sdc where id ='3'; delete from test.sdc where id ='4'; delete from test.sdc where id ='5'; delete from test.sdc where id ='6'; commit;
(可左右滑动)
- StreamSet 监控信息。
- 在Impala-shell中执行以下脚本内容。
select count(1) from poc_ending.sdc;
(可左右滑动)
3.总结
1.满足企业从Oracle数据库到Hadoop(kudu)的实时数据同步功能需求。
2.Cloudera Manager支持对CDH服务组件与StreamSets服务组件的统一管理。
3.StreamSets支持从Oracle Database 11.2.0.4 到 Kudu 1.6.0的端到端实时数据同步,在Oracle LogMiner的支持下可以实现对Oracle Database数据库产生的REDO日志文件分析并将其INSERT/UPDATE/DELETE等影响数据变化的事件实时同步到KDUD中。
4.StreamSets 提供完善的Web Console管理服务,实现可视化数据同步配置及管理、运行过程监控、异常告警、事件日志查看等。
4.附录:脚本代码
-- PERFORM on IMPALA WITH KUDU -------------------------------------------------- CREATE DATABASE IF NOT EXISTS POC_ENDING; CREATE TABLE IF NOT EXISTS POC_ENDING.sdc( id string, name string, PRIMARY KEY (id) ) PARTITION BY HASH(id) PARTITIONS 12 STORED AS KUDU TBLPROPERTIES('kudu.master_addresses'='cdh01:7051'); -- PERFORM on ORACLE DATABASE -------------------------------------------------- -- STREAMSETS CDC ORIGIN CLIENT for ORACLE DATABASE is dependeced ORACLE LogMiner session and view v$logmnr_contents. -- 1.配置对象数据字典:通过ORACLE内置存储过程DBMS_LOGMNR_D.BUILD可配置当前联机数据字典/平面数据字典文件/重做日志字典文件。 -- 2.追加重做日志文件:通过ORACLE内置存储过程DBMS_LOGMNR.ADD_LOGFILE可配置指定历史文件/指定滚动文件。 -- 3.开启数据变更分析:通过ORACLE内置存储过程DBMS_LOGMNR.START_LOGMNR启动LogMiner后可查询分析视图v$logmnr_contents。 -- 4.停止数据变更分析:通过ORACLE内置存储过程DBMS_LOGMNR.END_LOGMNR可停止LogMiner的SESSION级访问。 SQL> select * from v$logmnr_contents; EXCEPTION 1 ON ORACLE-SESSION-CLIENT: ORA-01306: dbms_logmnr.start_logmnr() must be invoked before selecting from v$logmnr_contents SQL> execute DBMS_LOGMNR.START_LOGMNR(OPTIONS=> DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG); ORA-01292: no log file has been specified for the current LogMiner session ORA-06512: at "SYS.DBMS_LOGMNR", line 58 ORA-06512: at line 1 SQL> execute DBMS_LOGMNR_D.BUILD(OPTIONS=> DBMS_LOGMNR_D.STORE_IN_REDO_LOGS); SQL> execute DBMS_LOGMNR.START_LOGMNR(OPTIONS=> DBMS_LOGMNR.DICT_FROM_REDO_LOGS); EXCEPTION 2 ON ORACLE-SESSION-CLIENT and STREAMSETS-WEBCONSOLE: java.sql.SQLException: ORA-01292: no log file has been specified for the current LogMiner session ORA-06512: at "SYS.DBMS_LOGMNR", line 58 ORA-06512: at line 1 [oracle@oracleasm ~]$ oerr ora 1292 01292, 00000, "no log file has been specified for the current LogMiner session" // *Cause: No logfile has been specified for the LogMiner session. // *Action: Specify atleast one log file. EXCEPTION 3 ON ORACLE-SESSION-CLIENT and STREAMSETS-WEBCONSOLE: java.sql.SQLException: ORA-01291: Not all logfiles corresponding to the time or scn range specified ORA-06512: 在 "SYS.DBMS_LOGMNR", line 58 ORA-06512: 在 line 1 [root@oracleasm dmp]# oerr ora 1291 01291, 00000, "missing logfile" // *Cause: Not all logfiles corresponding to the time or scn range specified // have been added to the list. // *Action: Check the v$logmnr_logs view to determine the missing scn // range, and add the relevant logfiles. SOLUTION: SQL> select member from v$logfile; /mnt/orcl/orcl/redo03.log /mnt/orcl/orcl/redo02.log /mnt/orcl/orcl/redo01.log SQL> execute DBMS_LOGMNR.add_logfile('/mnt/orcl/orcl/redo01.log'); SQL> execute DBMS_LOGMNR.add_logfile('/mnt/orcl/orcl/redo02.log'); SQL> execute DBMS_LOGMNR.add_logfile('/mnt/orcl/orcl/redo03.log'); -------------------------------------------------- sqlplus / as sysdba; SQL> show user; --IF select log_mode from v$database that result is no archivelog; SQL> shutdown immediate; SQL> startup mount; SQL> alter database archivelog; SQL> alter database open; --IF select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_all from V$database that result is no; SQL> alter database add supplemental log data; SQL> alter database add supplemental log data (primary key) columns; SQL> alter database add supplemental log data (all) columns; SQL> alter system switch logfile; SQL> select log_mode,supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_all from V$database; LOG_MODE SUPPLEMENTAL_LOG SUPPLE SUPPLE ------------------------ ---------------- ------ ------ ARCHIVELOG YES YES YES SQL> --show parameter utl_file_dir; SQL> --show parameter log_archived_dest_1; SQL> --select * from v$log; SQL> --select * from v$logfile; SQL> --create table test.sdc (id varchar2(20), name varchar2(20)); SQL> create user test identified by test; SQL> grant create session, alter session, execute_catalog_role,select any dictionary, select any transaction, select any table to test; SQL> grant select on V$logmnr_parameters to test; SQL> grant select on v$logmnr_logs to test; SQL> grant select on v$archived_log to test; SQL> grant select on test.sdc to test; SQL> conn test/test; SQL> show user; SQL> desc v$logmnr_contents SQL> SQL> --execute DBMS_LOGMNR.END_LOGMNR; SQL> execute DBMS_LOGMNR.add_logfile('/mnt/orcl/orcl/redo01.log'); SQL> execute DBMS_LOGMNR.add_logfile('/mnt/orcl/orcl/redo02.log'); SQL> execute DBMS_LOGMNR.add_logfile('/mnt/orcl/orcl/redo03.log'); SQL> execute DBMS_LOGMNR.START_LOGMNR(OPTIONS=> DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG); SQL> SELECT SCN,TIMESTAMP,SEQUENCE#,SQL_REDO,SQL_UNDO from v$logmnr_contents WHERE TABLE_NAME='SDC'; SQL> insert into test.sdc(id,name) values('1','AAA'); SQL> insert into test.sdc(id,name) values('2','BBB'); SQL> insert into test.sdc(id,name) values('3','CCC'); SQL> insert into test.sdc(id,name) values('4','DDD'); SQL> insert into test.sdc(id,name) values('5','EEE'); SQL> insert into test.sdc(id,name) values('6','FFF'); SQL> commit; SQL> SELECT SCN,TIMESTAMP,SEQUENCE#,SQL_REDO,SQL_UNDO from v$logmnr_contents WHERE TABLE_NAME='SDC'; SQL> update test.sdc set name='111' where id ='1'; SQL> update test.sdc set name='222' where id ='2'; SQL> update test.sdc set name='333' where id ='3'; SQL> update test.sdc set name='444' where id ='4'; SQL> update test.sdc set name='555' where id ='5'; SQL> update test.sdc set name='666' where id ='6'; SQL> commit; SQL> SELECT SCN,TIMESTAMP,SEQUENCE#,SQL_REDO,SQL_UNDO from v$logmnr_contents WHERE TABLE_NAME='SDC'; SQL> delete from test.sdc where id ='1'; SQL> delete from test.sdc where id ='2'; SQL> delete from test.sdc where id ='3'; SQL> delete from test.sdc where id ='4'; SQL> delete from test.sdc where id ='5'; SQL> delete from test.sdc where id ='6'; SQL> commit; SQL> SELECT SCN,TIMESTAMP,SEQUENCE#,SQL_REDO,SQL_UNDO from v$logmnr_contents WHERE TABLE_NAME='SDC';
(可左右滑动)
提示:代码块部分可以左右滑动查看噢
为天地立心,为生民立命,为往圣继绝学,为万世开太平。
温馨提示:要看高清无码套图,请使用手机打开并单击图片放大查看。
推荐关注Hadoop实操,第一时间,分享更多Hadoop干货,欢迎转发和分享。
原创文章,欢迎转载,转载请注明:转载自微信公众号Hadoop实操
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)