数据集成常见问题解答

本章节提供用户常见问题及解答,以帮助用户更好的使用和管理DI系统。

新增carte子服务器

Kettle安装包中均自带对应版本的carte服务。carte服务可以远程执行传来的Kettle任务,并将执行结果返回。

安装carte服务的步骤如下:

  1. Kettle安装包拷贝至目标服务器节点。

修改carte的配置文件data-integration/pwd/carte-config-master-8080.xml后保存。根据Kettle carte子服务器的用户名/密码设置不同,分为以下两种情况:

图-1 修改carte-config-master-8080.xml(一)

 

图-2 修改carte-config-master-8080.xml(二)

 

【注意】:对于自定义的Kettle carte子服务器的用户名(示例user),其密码(示例passwd)必须经过生成等相关配置后才可生效,配置过程如下:

  1. 修改配置文件data-integration/encr.shencr.sh需要具有可执行权限),对自定义用户的密码进行生成,命令为:./encr.sh carte passwd,如-3所示。

图-3 对用户密码进行生成

 

  1. 修改配置文件kettle.pwd,将缺省用户的密码信息“cluster: OBF:1v8w1uh21z7k1ym71z7i1ugo1v9q”注释掉,然后写入上一步骤中新生成的自定义用户的密码相关信息,如-4所示。

图-4 对用户密码进行生成

 

  1. data-integration目录下启动carte服务。

命令为./carte.sh pwd/carte-config-master-8080.xml,如-5所示。

图-5 启动carte服务

 

  1. carte服务启动成功性验证。

方法:通过URL地址:http://<启动carte服务的节点IP>:<port>/kettle/status/,若能正常登录,说明服务启动成功,此时即可在carte上执行kettle任务。

获取.kjb文件用于新增Kettle Job任务

Kettle里获取的.kjb文件可直接用于在DI中新增Kettle Job类型的任务,获取.kjb文件的步骤如下:

  1. Kettle里转换作业生成.kjb文件,转换时需要配置转换文件名,然后保存后即可得到.kjb文件。此时需要注意:

SSL证书导入

SSL证书导入服务器的的步骤如下:

  1. 转换证书格式(非必须操作,保证证书可成功导入到库文件即可)。

示例:转换.pem格式的证书,命令如下:

  1. 分别将ca.cerclient.pkcs12认证文件导入到JKS文件中,命令如下:

·          上述示例中的文件路径:/opt/ssl/cakeystore/opt/ssl/clientkeystore,可以自由选择任何路径和文件名,只要保证在设计器中页面填写的“信任证书文件”和“用户证书文件”与其保持一致即可。

·          任务保存后,如果需要更换库文件的名字和密码,则新的名字和密码需要在对应的页面文本框中进行修改并保存即可,无需重新启动DigWebDigExecutor应用。

·          证书文件可以在非DigWeb节点所在的服务器生成,可以在其它服务器生成后拷贝到DigWeb服务器上即可。

·          执行器无需任何手动配置证书的操作。

 

数据源连接错误信息乱码

DI的任务画布中使用数据源进行数据库相关操作时,若数据源配置错误导致了数据源连接失败,数据库服务端会返回相应的错误信息,如果数据库的locale相关参数设置错误,可能会导致DI给出的提示信息乱码。

  1. 使用PostgreSQL类数据源时,若出现提示信息乱码现象,请检查相应postgresql数据库的启动参数配置文件 postgresql.conf,将其中的 lc_messages参数的值修改为 en_US.UTF-8,然后重启数据库服务即可恢复正常。

图-6 加载至表组件中SQL功能报错信息乱码

 

图-7 查找postgresql.conf文件

 

图-8 修改lc_messages参数

 

  1. 其他类型数据源,若出现类似的提示信息乱码现象,请检查相应数据库中有关于语言环境的设置是否正确。

下发Shell任务时,因为服务器Open SSH版本较高,导致Shell任务连接不上

1.      问题原因:

高版本Open SSH出于安全考虑去掉了很多它认为不安全的认证方式,而我们使用的ganymed-ssh2的方式连接支持的几种认证方式被Open SSH剔除,造成连接不上的问题。

2.      解决方案:

修改sshd_config文件,将认证方式重新加入任务执行主机的配置文件中。

  1. 登录需要下发任务的执行主机,执行vi /etc/ssh/sshd_config命令,在配置文件末尾增加如下两个配置:

KexAlgorithms diffie-hellman-group1-sha1,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha1,diffie-hellman-group-exchange-sha256,ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group1-sha1,[email protected]

 

HostKeyAlgorithms [email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],[email protected],ssh-ed25519,ecdsa-sha2-nistp256,ecdsa-sha2-nistp384,ecdsa-sha2-nistp521,[email protected],[email protected],rsa-sha2-512,rsa-sha2-256,ssh-rsa,ssh-dss

 

  1. 然后执行service sshd restart命令重启sshd服务。

  1. 此时再执行任务下发,任务即可下发成功。

Generic JDBC数据库驱动导入数据源

当用户创建数据源时选择数据源类型Generic JDBC,需要使用用户提供的数据源驱动。此时需要将用户的驱动包导入到数据源服务中。操作步骤如下:

  1. 登录融合集成平台任意节点,并将用户驱动包上传到此节点如下目录中:

/data/software/base/glusterfs/oasis-data-pvc/oip/oip-platform-dig-data-pvc/datasource

  1. 上传数据源容器后需要重启数据源容器、数据集成web容器、数据集成执行器容器才能生效。

  1. 查找容器ID

docker ps | grep di-web

docker ps | grep executor

docker ps | grep base-ds

图-9 查找容器ID

 

  1. 然后根据容器ID为入参,执行重启命令(各容器都需要重启):

docker restart <容器ID>

图-10 执行重启命令(以di-web为例)

 

数据集成服务端本地文件上传及下载

1.      上传

如果需要将文件上传至数据集成容器的共享存储中,按照如下步骤操作:

  1. 登录融合集成平台任意节点,并将文件上传到此节点,可通过FTP方式上传。

  1. 查找数据集成容器。命令如下:

docker ps | grep di-web

图-11 查找数据集成容器

 

  1. 将文件拷贝到数据集成容器共享存储中。数据集成容器可能有多个,上传到任意一个即可,命令如下:

docker cp [用户文件] [数据集成任意容器]:/usr/local/dig/data

2.      下载

如果需要将数据集成容器中文件下载至服务器,按照如下步骤操作:

  1. 登录融合集成平台任意节点。

  1. 查找数据集成容器。命令如下:

docker ps | grep di-web

图-12 查找数据集成容器

 

  1. 将数据集成容器共享存储中文件下载至服务器本地。数据集成容器可能有多个,使用任意一个执行下载操作即可,命令如下:

docker cp [数据集成任意容器]:/usr/local/dig/data/[用户文件] [服务器本地目录]

MySQLDRDS数据库开启Binlog

MySQLDRDS数据库开启Binlog,开启方式如下:

  1. 登录MySQL服务器,编辑my.cnf文件,添加如下配置:

log-bin=<binlog存储路径及文件名,例:/mysql/logs/mysql-bin.log>

expire-logs-days=<日志过期时间,单位为天,例:10>

max-binlog-size=<单个binlog文件大小,例:500M>

server-id=<服务器ID,保证唯一,不可重复,例:1>

如下配置可选

gtid-mode=<是否开启GTID复制功能,根据需要开启,例:ON>

enforce-gtid-consistency=<启动强制GTID的一致性,如果开启GTID功能此项必须开启,例:ON>

binlog_format=<binlog日志格式,当前只支持ROW格式。默认为ROW>

  1. 编辑完成后重启MySQL

  1. 启动完成后查看binlog相关配置状态。连接MySQL,执行命令:

show variables like 'log_bin';查看binlog开启状态

show variables like 'binlog_format';查看binlog格式是否为ROW。如果不为ROW,需参照步骤1可选配置进行修改。

show variables like '%ssl%';查看ssl是否开启

show master status;查看GTID是否开启

 

Oracle数据库启用LogMiner

LogMinerOracle数据库自带的服务组件,可以解析数据库的redoundo操作数据,对回溯数据库操作以及恢复数据发挥巨大作用。

1.      开启数据库LogMiner组件

12c版本之后数据库默认开启LogMiner,无需手动开启;10g11g数据库需要手动执行命令开启LogMiner

@$ORACLE_HOME/rdbms/admin/dbmslm.sql

2.      开启数据库归档日志模式

  1. DBA身份登录数据库

  1. 执行以下SQL,检查数据库日志模式。

Select log_mode from v$database;

如果查询log_modeARCHIVELOG,则跳过步骤3(开启数据库归档日志模式);如果是NOARCHIVELOG,则执行步骤3

  1. 开启数据库归档日志模式。

  1. 关闭数据库:shutdown immediate;

  1. 启动数据库mountstartup mount;

  1. 开启数据库归档日志并开启数据库:

Alter database archivelog;

Alter database open;

3.      开启附加日志

  1. 执行以下命令检查数据库是否开启附加日志。

Select supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all from v$database;

如果查询结果返回NO,则需要执行下一步;如果是YES,则无需任何操作。

  1. 开启附加日志分为两种,一种是整库的附加日志,一种是指定表的附加日志。

对于12c版本的容器数据库,需要先切换容器到要开启附加日志的PDB中,以名称为“test”的PDB为例:

Alter session set container=test;

Alter database add supplemental log data (primary key) columns;

Alter database add supplemental log data (all) columns;

Alter database add supplemental log data;

Alter table <schema>.<table> add supplemental log data (primary key) columns;

Alter table <schema>.<table> add supplemental log data (all) columns;

  1. 提交上一步中的所有修改。

Alter system switch logfile;

4.      创建Logminer抽取用户

  1. 10g11g12c标准和cdb版本的数据库创建logminer用户操作不完全相同,具体执行命令如下(所有操作均需以DBA身份登录),数据集成中配置数据源时,均使用该用户进行CDC抽取。

create user <username> identified by <password>;

grant create session, alter session, execute_catalog_role, select any dictionary, select any transaction, select any table to <username>;

grant select on v$logmnr_parameters to <username>;

grant select on v$logmnr_logs to <username>;

grant select on v$archived_log to <username>;

grant select on <schema>.<table> to <username>;

注意事项:如果执行上述带“v$”符号的命令时,报“can only select from fixed tables/views”错误,可执行“SELECT * FROM DBA_SYNONYMS WHERE SYNONYM_NAME='V$LOGMNR_CONTENTS';”命令查看TABLE_NAME字段的值,然后将命令中的带“v$”符号的参数(比如v$logmnr_logsv$archived_log)替换为该值,然后再重新执行grant命令。

Create user <username> identified by <password>;

grant create session, alter session, execute_catalog_role, select any dictionary, logmining to <username>;

grant select on <schema>.<table> to <username>;

Alter session set container=CDB$ROOT;

Create user <username> identified by <password> container all;

grant create session, alter session, execute_catalog_role, select any dictionary, set container, logmining to <username> container all;

  1. 创建完用户后,该用户对所有PDB生效(包括权限)。

  1. 切换到要抽取的PDB数据库,并授权对应的表select权限给<username>

Alter session set container=<pdb>;

grant select on <schema>.<table> to <username>;

MySQL CDC组件出现Slave has more GTIDs than the master has,using the master'sSERVER_UUID错误

1.      问题原因:

MySQL数据库重置GTID或异常断电导致GTID丢失,引起MySQL CDC组件出现Slave has more GTIDs than the master has,using the master'sSERVER_UUID错误。出现此情况是因为MySQL CDC组件同步的MySQL MasterGTID小于MySQL CDC中记录的GTID

2.      解决办法:

批量在Hive数据源中执行SQL组件时出现异常

1.      问题现象

批量在Hive数据源中执行SQL组件时出现异常,提示java.lang.RuntimeException: java.util.concurrent.RejectedExecutionException:Task java.util.concurrent.FutureTask@4be797a1 rejected from java.util.concurrent.ThreadPoolExecutor@a568b69[Running, pool size = 100, active threads = 100, queued tasks = 100, completed tasks =****]

2.      解决方法

建议增加Hive组件自定义配置项中hive.server2.async.exec.threads的值(默认值为200,可根据实际情况进行增加)。

Hive数据源抽取数据加载至MySQL时出现异常

1.      问题现象

Hive数据源抽取数据加载至MySQL时出现异常,提示Can not read response from server .Expected to read 4 bytes,read 0 bytes before connection was unexpectedly lost

2.      解决方法

调整MySQL服务端配置文件/etc/my.cnf中参数net_read_timeout=300net_write_timeout=600

如何修改组件资源最大收藏个数

  1. 登录绿洲平台安装部署节点(所有部署节点都涉及修改)。

  1. /data/software/dataintegration/oip-di-web/scripts/restart_di_web.sh文件中,找到变量“ETL_NUM_UPPERBOUND”,修改其对应的值(默认为100,用户可根据实际需要进行配置),配置完成后保存该文件。

  1. 执行该脚本(请注意依次执行各节点该脚本,同时执行可能会引起web页面功能异常)。

 

同步数据时,时间类型数据的值在同步到数据库后发生了改变

比如原来时间类型数据为“2021-12-02 11:42:25”,同步到数据库后,时间类型数据变为“2021-12-01 21:42:25”,同步数据时,时间类型数据的值和插入数据库后的值不匹配

问题常见于MySQL数据库,主要是数据库服务端使用了CST时区。CST时区在操作系统中指的是China Standard Time UTC+8中国标准时,但这种简写形式的时区表示在jdbc驱动中会有歧义,被解读为Central Standard Time UTC-6美国中部标准时间。

此时需要修改插入数据的数据源属性,在数据源的属性列表中,添加属性:serverTimezone,值设置为:Asia/Shanghai

图-13 配置数据源属性值