本章节提供用户常见问题及解答,以帮助用户更好的使用和管理DI系统。
Kettle安装包中均自带对应版本的carte服务。carte服务可以远程执行传来的Kettle任务,并将执行结果返回。
安装carte服务的步骤如下:
将Kettle安装包拷贝至目标服务器节点。
修改carte的配置文件data-integration/pwd/carte-config-master-8080.xml后保存。根据Kettle carte子服务器的用户名/密码设置不同,分为以下两种情况:
将Kettle carte子服务器的用户名/密码设置为缺省用户名/密码时,如图-1所示。其中:hostname为程序所在节点的IP;port为端口地址(自定义);username和password为Kettle carte子服务器的缺省用户名/密码(缺省为cluster/cluster)。
图-1 修改carte-config-master-8080.xml(一)
对Kettle carte子服务器的用户名/密码进行自定义设置时(示例用户名为user,密码为passwd),如图-2所示。其中:hostname为程序所在节点的IP;port为端口地址(自定义);username为Kettle carte子服务器的用户名user,password为Kettle carte子服务器的密码passwd。
图-2 修改carte-config-master-8080.xml(二)
【注意】:对于自定义的Kettle carte子服务器的用户名(示例user),其密码(示例passwd)必须经过生成等相关配置后才可生效,配置过程如下:
修改配置文件data-integration/encr.sh(encr.sh需要具有可执行权限),对自定义用户的密码进行生成,命令为:./encr.sh –carte passwd,如图-3所示。
修改配置文件kettle.pwd,将缺省用户的密码信息“cluster: OBF:1v8w1uh21z7k1ym71z7i1ugo1v9q”注释掉,然后写入上一步骤中新生成的自定义用户的密码相关信息,如图-4所示。
在data-integration目录下启动carte服务。
命令为./carte.sh pwd/carte-config-master-8080.xml,如图-5所示。
carte服务启动成功性验证。
方法:通过URL地址:http://<启动carte服务的节点IP>:<port>/kettle/status/,若能正常登录,说明服务启动成功,此时即可在carte上执行kettle任务。
在Kettle里获取的.kjb文件可直接用于在DI中新增Kettle Job类型的任务,获取.kjb文件的步骤如下:
在Kettle里转换作业生成.kjb文件,转换时需要配置转换文件名,然后保存后即可得到.kjb文件。此时需要注意:
转换文件名可填写绝对路径,也可使用变量(${Internal.Job.Filename.Directory}/${Internal.Transformation.Filename.Directory}/${Internal.Entry.Current.Directory})进行替换。
转换文件名使用变量替换的路径时,要求用户输入的路径与Kettle carte服务器上KettleJob的路径一致。
将SSL证书导入服务器的的步骤如下:
转换证书格式(非必须操作,保证证书可成功导入到库文件即可)。
示例:转换.pem格式的证书,命令如下:
将CA证书ca.pem转换为cer文件:
openssl x509 -CAform pem -in /opt/ssl/ca.pem -out /opt/ssl/ca.cer
将用户证书client.pem转为PKCS12类型文件:
openssl pkcs12 -export -out /opt/ssl/client.pkcs12 -in /opt/ssl/client.pem -password pass:123456
分别将ca.cer和client.pkcs12认证文件导入到JKS文件中,命令如下:
将ca.cer导入到JKS文件:
keytool -import -v -alias ca -trustcacerts -keystore /opt/ssl/cakeystore -file /opt/ssl/ca.cer
将client.pkcs12导入到JKS文件:
keytool -importkeystore -srckeystore /opt/ssl/client.pkcs12 -srcstoretype PKCS12 -destkeystore /opt/ssl/clientkeystore -deststoretype JKS -deststorepass 123456 -srcstorepass 123456
· 上述示例中的文件路径:/opt/ssl/cakeystore和/opt/ssl/clientkeystore,可以自由选择任何路径和文件名,只要保证在设计器中页面填写的“信任证书文件”和“用户证书文件”与其保持一致即可。 · 任务保存后,如果需要更换库文件的名字和密码,则新的名字和密码需要在对应的页面文本框中进行修改并保存即可,无需重新启动DigWeb和DigExecutor应用。 · 证书文件可以在非DigWeb节点所在的服务器生成,可以在其它服务器生成后拷贝到DigWeb服务器上即可。 · 执行器无需任何手动配置证书的操作。 |
在DI的任务画布中使用数据源进行数据库相关操作时,若数据源配置错误导致了数据源连接失败,数据库服务端会返回相应的错误信息,如果数据库的locale相关参数设置错误,可能会导致DI给出的提示信息乱码。
使用PostgreSQL类数据源时,若出现提示信息乱码现象,请检查相应postgresql数据库的启动参数配置文件 postgresql.conf,将其中的 lc_messages参数的值修改为 en_US.UTF-8,然后重启数据库服务即可恢复正常。
使用加载至表组件的SQL功能,连接postgresql数据库获取建表语句,配置postgresql数据源时输入错误的用户名或密码,发现给出的数据源连接失败的错误信息中出现乱码:
图-6 加载至表组件中SQL功能报错信息乱码
linux系统中,PostgreSQL数据库的配置文件路径可使用如下命令查找: find / -name "postgresql.conf"
图-7 查找postgresql.conf文件
lc_messages 参数被默认设置为 zh_CN.UTF-8,需要修改为 en_US.UTF-8 或 C.UTF-8 ,然后重启数据库服务
图-8 修改lc_messages参数
其他类型数据源,若出现类似的提示信息乱码现象,请检查相应数据库中有关于语言环境的设置是否正确。
高版本Open SSH出于安全考虑去掉了很多它认为不安全的认证方式,而我们使用的ganymed-ssh2的方式连接支持的几种认证方式被Open SSH剔除,造成连接不上的问题。
修改sshd_config文件,将认证方式重新加入任务执行主机的配置文件中。
登录需要下发任务的执行主机,执行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
然后执行service sshd restart命令重启sshd服务。
此时再执行任务下发,任务即可下发成功。
当用户创建数据源时选择数据源类型Generic JDBC,需要使用用户提供的数据源驱动。此时需要将用户的驱动包导入到数据源服务中。操作步骤如下:
登录融合集成平台任意节点,并将用户驱动包上传到此节点如下目录中:
/data/software/base/glusterfs/oasis-data-pvc/oip/oip-platform-dig-data-pvc/datasource
上传数据源容器后需要重启数据源容器、数据集成web容器、数据集成执行器容器才能生效。
查找容器ID:
docker ps | grep di-web
docker ps | grep executor
docker ps | grep base-ds
图-9 查找容器ID
然后根据容器ID为入参,执行重启命令(各容器都需要重启):
docker restart <容器ID>
图-10 执行重启命令(以di-web为例)
如果需要将文件上传至数据集成容器的共享存储中,按照如下步骤操作:
登录融合集成平台任意节点,并将文件上传到此节点,可通过FTP方式上传。
查找数据集成容器。命令如下:
docker ps | grep di-web
图-11 查找数据集成容器
将文件拷贝到数据集成容器共享存储中。数据集成容器可能有多个,上传到任意一个即可,命令如下:
docker cp [用户文件] [数据集成任意容器]:/usr/local/dig/data
如果需要将数据集成容器中文件下载至服务器,按照如下步骤操作:
登录融合集成平台任意节点。
查找数据集成容器。命令如下:
docker ps | grep di-web
图-12 查找数据集成容器
docker cp [数据集成任意容器]:/usr/local/dig/data/[用户文件] [服务器本地目录]
MySQL或DRDS数据库开启Binlog,开启方式如下:
登录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>
编辑完成后重启MySQL。
启动完成后查看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是否开启
LogMiner是Oracle数据库自带的服务组件,可以解析数据库的redo和undo操作数据,对回溯数据库操作以及恢复数据发挥巨大作用。
12c版本之后数据库默认开启LogMiner,无需手动开启;10g和11g数据库需要手动执行命令开启LogMiner:
@$ORACLE_HOME/rdbms/admin/dbmslm.sql
以DBA身份登录数据库
执行以下SQL,检查数据库日志模式。
Select log_mode from v$database;
如果查询log_mode为ARCHIVELOG,则跳过步骤3(开启数据库归档日志模式);如果是NOARCHIVELOG,则执行步骤3。
开启数据库归档日志模式。
关闭数据库:shutdown immediate;
启动数据库mount:startup mount;
开启数据库归档日志并开启数据库:
Alter database archivelog;
Alter database open;
执行以下命令检查数据库是否开启附加日志。
Select supplemental_log_data_min, supplemental_log_data_pk, supplemental_log_data_all from v$database;
如果查询结果返回NO,则需要执行下一步;如果是YES,则无需任何操作。
开启附加日志分为两种,一种是整库的附加日志,一种是指定表的附加日志。
对于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;
提交上一步中的所有修改。
Alter system switch logfile;
10g、11g和12c标准和cdb版本的数据库创建logminer用户操作不完全相同,具体执行命令如下(所有操作均需以DBA身份登录),数据集成中配置数据源时,均使用该用户进行CDC抽取。
10g和11g版本:
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_logs、v$archived_log)替换为该值,然后再重新执行grant命令。
12c标准版:
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>;
12c CDB版:
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;
创建完用户后,该用户对所有PDB生效(包括权限)。
切换到要抽取的PDB数据库,并授权对应的表select权限给<username>。
Alter session set container=<pdb>;
grant select on <schema>.<table> to <username>;
当MySQL数据库重置GTID或异常断电导致GTID丢失,引起MySQL CDC组件出现Slave has more GTIDs than the master has,using the master'sSERVER_UUID错误。出现此情况是因为MySQL CDC组件同步的MySQL Master中GTID小于MySQL CDC中记录的GTID。
如果是用户手动重置GTID引起的,首先保证之前MySQL CDC抽取的数据正常落库,然后单击MySQL CDC配置中“清除断点”,重新启动即可。
当由于异常情况出现GTID丢失时,首先查看MySQL CDC对应Topic中数据GTID断点位置,与MySQL Master位置进行比较,将二者相差数据手动同步。同步完成后,保证之前MySQL CDC抽取的数据正常落库后,然后单击MySQL CDC配置中“清除断点”,并设置“初始化偏移量”为MySQL Master最新位置,然后重新启动运行即可。
批量在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 =****]
建议增加Hive组件自定义配置项中hive.server2.async.exec.threads的值(默认值为200,可根据实际情况进行增加)。
从Hive数据源抽取数据加载至MySQL时出现异常,提示Can not read response from server .Expected to read 4 bytes,read 0 bytes before connection was unexpectedly lost。
调整MySQL服务端配置文件/etc/my.cnf中参数net_read_timeout=300,net_write_timeout=600。
登录绿洲平台安装部署节点(所有部署节点都涉及修改)。
在/data/software/dataintegration/oip-di-web/scripts/restart_di_web.sh文件中,找到变量“ETL_NUM_UPPERBOUND”,修改其对应的值(默认为100,用户可根据实际需要进行配置),配置完成后保存该文件。
执行该脚本(请注意依次执行各节点该脚本,同时执行可能会引起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 配置数据源属性值