上游业务库中数据是否 Ready,通常需要通过在上游数据库执行一个 SQL 来查询,并根据查询结果判断上游任务是否 Ready,根据 Ready 的情况判断是否继续轮询,或启动下游任务执行。
本文将通过 DataLeap 中的 Shell 任务调用 JAR 包能力,来实现上述轮询场景。
本文中包含的 JAR 包能力如下:
java -jar CheckDatabaseStatus-1.0-SNAPSHOT.jar "SQLServer" "jdbc:sqlserver://;serverName=mssql-a3xxxxxx-public.rds-mssql.volces.com;databaseName=dts_test" "veyun_user" "this_is_password" "select case when count(*) = 0 then 0 else 1 end as result from dts_mssql.dts_sink18" 3 3 java -jar CheckDatabaseStatus-1.0-SNAPSHOT.jar "oracle" "jdbc:oracle:thin:@xxx.xxx.xx.xxx:1521/ORCL" "DTS_TEST" "this_is_password" "select case when count(1) = 1 then '1' else '0' end as zt from dts_test.cs_account" 3 3 java -jar CheckDatabaseStatus-1.0-SNAPSHOT.jar "PostgreSQL" "jdbc:postgresql://xxx.xxx.xx.xxx:5400/postgres" "postgres" this_is_password "select case when count(1) = 1 then '1' else '0' end as zt from public.account" 3 5 java -jar CheckDatabaseStatus-1.0-SNAPSHOT.jar "MySQL" "jdbc:mysql://xxx.xxx.xx.xxx:13306/demo_bank?useSSL=false&allowPublicKeyRetrieval=true" "root" "this_is_password" "select case when count(1) = 1 then '1' else '0' end as zt from demo.task_info" 3 10
本实践中为您提供 Shell 任务调用所需使用的 JAR 资源包信息,您可按需下载获取使用:
登录DataLeap控制台。
选择数据开发 > 任务开发 > 资源库,进入资源库页面。
进入资源库后,您可以任意通过以下几种方式来新建资源:
进入新建资源界面,配置以下参数信息:
参数 | 说明 |
|---|---|
关联信息: | |
绑定引擎 | 选择通用引擎 |
保存至 | 资源上传后保存的文件路径。 |
基本信息: | |
资源名称 | 输入资源名称,只允许数字、字母、下划线组成,如 CheckDatabaseStatus |
资源描述 | 输入资源描述信息,方便后续管理。 |
资源类型 | 资源类型选择 File 类型。 |
资源来源 | 默认选择本地上传的来源方式。 |
资源文件 | 将上方下载的 JAR 资源包文件进行点击上传。 |
参数配置完成后,单击确定按钮, 即新建资源成功。
在左侧导航栏中,选择数据开发 > 任务开发,进入任务开发页面。
单击新建任务 > 数据开发 > 通用 > Shell按钮,新建Shell任务后,进入任务配置页面。
编写 Shell 调用脚本,示例如下:
下方的 Shell 代码中,调用 JAR,在 JAR 内循环,并实时判断 JAR 的输出是否包含关键字,根据关键字判断是否设置 Shell 为失败状态。其中当循环次数到达最大循环次数时,Shell 脚本为失败状态。
#!/bin/bash # 调用Jar包,并将其标准输出和标准错误输出都重定向到一个管道中,以便实时读取输出内容 java -jar CheckDatabaseStatus-1.0-SNAPSHOT.jar PostgreSQL "jdbc:postgresql://xxx.xxx.xx.xxx:5400/postgres" postgres this_is_password "select case when count(1) = 1 then '1' else '0' end as zt from public.account where open_date = '${date}'" 30 5 2>&1 | while read line; do echo "$line" # 检查输出内容是否包含「达到最大循环次数」字符串 if [[ $line == *"达到最大循环次数"* ]]; then echo "Jar包执行完成,原因:达到最大循环次数,脚本即将退出并设置为失败状态。" exit 1 #置失败 fi # 检查输出内容是否包含「执行SQL成功」字符串 if [[ $line == *"执行SQL成功"* ]]; then echo "Jar包执行成功,原因:执行SQL成功,脚本即将退出并设置为成功状态。" exit 0 #置成功 fi done
说明
示例脚本中的数据库连接信息、用户名密码信息,您需根据实际情况进行替换。
引用刚刚上传的 JAR
在下方资源选择框中,选择上方4.1 上传 JAR 包上传的资源包,您可通过资源名称进行模糊搜索勾选。
资源选择完成后,继续配置后续的任务产出数据登记、调度设置等相关内容。
其中在调度设置中,您可通过调度属性 > 高级参数设置,对任务配置实际执行时的 CPU、MEN 资源参数。参数说明详见调度属性。
使用上方示例中的 JAR 包,来轮询 SQLServer 数据库时,可能发生 TLSv1.0 TLSv1.1的错误信息,原因是因为 SQLServer 使用的 TLS 安全协议的版本的问题。
解决方式:
Shell 任务调用 JAR 时,需要使用新的 java.security 文件:
将该 JAVA 文件上传至 DataLeap 资源管理,上传操作详见4.1 上传 JAR 包。
在 Shell 任务资源选择中选择引用此文件。
修改上述 Shell 脚本示例中调用 JAR 包的一行:
#修改上述示例中的第4行,改为以下格式,其余脚本内容不变 java -Djava.security.properties=/opt/tiger/dorado-worker/java.security -jar CheckDatabaseStatus-1.0-SNAPSHOT.jar PostgreSQL "jdbc:postgresql://xxx.xxx.xx.xxx:5400/postgres" postgres this_is_password "select case when count(1) = 1 then '1' else '0' end as zt from public.account where open_date = '${date}'" 30 5 2>&1 | while read line; do
注意
上述示例中的路径:/opt/tiger/dorado-worker 的目录可能在不同环境版本中有变化,您需要根据实际情况调整。Shell 任务的执行目录会打印在 Shell 任务的日志中,您可在日志中获取详细路径。