使用StreamSets将Oracle中的数据实时传输到Hbase

这次的测试是失败了的,有这个需求的小伙伴可以参考一下。主要原因可能是因为要测试的是Oracle 10g的数据库,所以一些StreamSets支持的参数变化的比较大。但是过程可以参考一下,一直到最后的验证其实都没有问题了。

1、打开StreamSets管理界面

在CDH中进入StreamSets的管理界面,点击WebUI:

获取到打开StreamSets界面的格式与端口号:    http://192.168.129.***:18630

2、创建一个新的管道

填写新建管道的一些信息

3、绘制整个管道流程

A、打开这个绘制页面,在Origin Processer中选择Oracle CDC Client:

B、在Destination Processor中选择Hbase:

4、对Oracle CDC Client组件填写配置信息

对于Origins中的Oracle CDC Client相关文档如下:  官方文档

注意:

首先需要在Oracle终端启动LogMiner,总结数据库活动,使用这些日志来生成记录。LogMiner要求数据库是打开的,可写的,并且在启用归档的情况下处于ARCHIVELOG模式。

这里我之前就启动了,具体启动logMiner流程可以看这里的第二节:Oracle启动logminer

A、将StreamSets Origin 端 Oracle CDC Client 服务的关键配置按需调整如下:

Tables 配置为ORACLE DATABASE中的定义的测试表OGG.student,注意ORACEL大小写敏感。
Initial Change配置默认是 From Latest Change,实时数据同步只需要捕获变化数据。
Operation配置为Hbase对应支持的CRUD操作类型,匹配ORACLE Database中实时变化数据的增删改操作事务操作。

B、输入JDBC信息:

JDBC Connection String 配置为源端Oracle Database 服务的JDBC访问连接串:jdbc:oracle:thin:@10.89.180.21:1521:orcl。
USE CREDENTIALS 配置为开启,便于配置ORACLE DATABASE访问认证信息。

C、输入连接Oracle的账号与密码:

D、填写适合JDBC驱动的类名与测试连接的sql:

JDBC Driver Class Name 配置为ORACLE提供的ojdbc6.jar 中定义的JDBC驱动程序fullPath: oracle.jdbc.driver.OracleDriver。

5、添加Oracle Database 的JDBC驱动程序包ojdbc.jar

这里要注意,如果直接在StreamSets界面中,点击右上角的Package Manager,然后右边的框拉到最下面选择External Libraries打开这个界面:

然后再这里选择要上传的jdbc相关jar包,则会报错:REST_1003 - Failed to create directory: lib:

说明需要配置streamsets外部库,具体的步骤可以看这里:StreamSets配置外部库

6、Oracle数据库中新建的student表

CREATE TABLE "OGG"."student" 
(
	"sid" NUMBER(8,0), 
	"sname" VARCHAR2(14), 
	"sex" VARCHAR2(13), 
	"class" VARCHAR2(20), 
	 PRIMARY KEY ("sid")
)

然后再向其中插入一些数据:

7、HBASE中新建与Oracle对应的表名

新建与Oracle对应的student表:

create 'student','sid','sname','sex','class'

查看student表信息:

describe 'student'

8、新建好HBASE的表后在StreamSets界面中填写配置信息

General这里要注意的是CDH的版本也就是hbase client的版本要和你hbase服务的版本一致,不一致会报错的。

HBase中配置信息:

注意:
源系统数据格式要写成/Data/XXX的形式,目标的column格式是【列族:列名】如果没有列名,列族之后也要加冒号。

9、验证与测试

验证可能出现的错误:

A.选择右上角Start左边的Validate按钮进行验证,有可能会报以下的错误:

JDBC_06 - Failed to initialize connection pool: com.zaxxer.hikari.pool.HikariPool$PoolInitializationException: Failed to initialize pool: ORA-00911: invalid character      

这个要看看自己的jdbc驱动跟Oracle的版本是否一致。上传匹配版本的jdbc驱动。

B.测试后,可能半天才出结果,然后查看日志一致输出:

2020-08-13 03:46:40,626    test_Oracle/testOracle20094215-4e64-431d-8ffd-7ba20f11706e    WARN    [Consumer clientId=consumer-15, groupId=sdcTopicMetadataClient] Connection to node -1 could not be established. Broker may not be available.      NetworkClient    *admin        preview-pool-1-thread-2

最后强制停止后报错:

Error getting metadata for topic 'topicName' from broker 'localhost:9092' due to error: org.apache.kafka.common.errors.TimeoutException: Timeout expired while fetching topic ....

这个问题的解决办法可以看这篇:https://blog.csdn.net/JJBOOM425/article/details/107986868

这些问题解决后,验证成功。但是最后执行时候报了这个错误:

PLS-00201: identifier 'DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG' must be declared

原因是这里有一个DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG参数,StreamSets解析Oracle的归档日志需要定义这个DICT_FROM_ONLINE_CATALOG参数,不知道是不是Oracle 10g的版本没有这个参数或者后面的版本名字改了,所以验证时候通过验证,但是执行时找不到这个参数所以停止,问了大佬,说可能就不能用StreamSets同步Oracle 10g的数据库。有哪位童鞋看到了,并且有比较好的解决方案可以不吝赐教一下。

 

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山孤客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值