这次的测试是失败了的,有这个需求的小伙伴可以参考一下。主要原因可能是因为要测试的是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的数据库。有哪位童鞋看到了,并且有比较好的解决方案可以不吝赐教一下。