当前位置: 首页 > news >正文

dolphinscheduler中任务输出变量的问题出现ArrayIndexOutOfBoundsException

一段脚本任务如下:

 ret=`/data/dolphinscheduler/loadOraTable.sh "yonbip/yonbip@10.16.10.69:1521/orcl" "select t.bondcontractno,t.olcunissuemny from yonbip.bond_contract t " "/dmp/biz" "bip" "2025-08-13"`
echo "$ret"
findCols=`echo $ret |grep "new line cols:"`
if [ -n $findCols ]
thenecho "findCols: findCols"colsNum=$(echo $findCols | awk -F 'new line cols:{' '{print $2}' | awk -F '}' '{print $1}')
fi
echo "#{setValue(newLineColNums=${colsNum})}"
echo "newLineColNums: $colsNum"

运行时出现如下错误:

[INFO] 2025-08-14 05:52:33.633 +0000 - raw script : ret=`/data/dolphinscheduler/loadOraTable.sh "yonbip/yonbip@10.16.10.69:1521/orcl" "select t.bondcontractno,t.olcunissuemny from yonbip.bond_contract t " "/dmp/biz" "bip" "2025-08-13"`
echo "$ret"
findCols=`echo $ret |grep "new line cols:"`
if [ -n $findCols ]
thenecho "findCols: findCols"colsNum=$(echo $findCols | awk -F 'new line cols:{' '{print $2}' | awk -F '}' '{print $1}')
fi
echo "#{setValue(newLineColNums=${colsNum})}"
echo "newLineColNums: $colsNum"
[INFO] 2025-08-14 05:52:33.633 +0000 - task execute path : /tmp/dolphinscheduler/exec/process/hive/18584734972800/18632548623621_8/632/2403
[INFO] 2025-08-14 05:52:33.633 +0000 - Begin to create command file:/tmp/dolphinscheduler/exec/process/hive/18584734972800/18632548623621_8/632/2403/632_2403.command
[INFO] 2025-08-14 05:52:33.633 +0000 - Success create command file, command: #!/bin/bash
BASEDIR=$(cd `dirname $0`; pwd)
cd $BASEDIR
source /opt/datasophon/dolphinscheduler-3.1.8/worker-server/conf/dolphinscheduler_env.sh
/tmp/dolphinscheduler/exec/process/hive/18584734972800/18632548623621_8/632/2403/632_2403_node.sh
[INFO] 2025-08-14 05:52:33.634 +0000 - task run command: sudo -u hive -E bash /tmp/dolphinscheduler/exec/process/hive/18584734972800/18632548623621_8/632/2403/632_2403.command
[INFO] 2025-08-14 05:52:33.635 +0000 - process start, process id is: 74084
[INFO] 2025-08-14 05:52:39.030 +0000 - process has exited. execute path:/tmp/dolphinscheduler/exec/process/hive/18584734972800/18632548623621_8/632/2403, processId:74084 ,exitStatusCode:0 ,processWaitForStatus:true ,processExitValue:0
[ERROR] 2025-08-14 05:52:39.031 +0000 - shell task error
java.lang.ArrayIndexOutOfBoundsException: 1at org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters.getMapByString(AbstractParameters.java:191)at org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters.dealOutParam(AbstractParameters.java:144)at org.apache.dolphinscheduler.plugin.task.shell.ShellTask.handle(ShellTask.java:99)at org.apache.dolphinscheduler.server.worker.runner.DefaultWorkerDelayTaskExecuteRunnable.executeTask(DefaultWorkerDelayTaskExecuteRunnable.java:49)at org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable.run(WorkerTaskExecuteRunnable.java:174)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:74)at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:750)
[ERROR] 2025-08-14 05:52:39.031 +0000 - Task execute failed, due to meet an exception
org.apache.dolphinscheduler.plugin.task.api.TaskException: Execute shell task errorat org.apache.dolphinscheduler.plugin.task.shell.ShellTask.handle(ShellTask.java:108)at org.apache.dolphinscheduler.server.worker.runner.DefaultWorkerDelayTaskExecuteRunnable.executeTask(DefaultWorkerDelayTaskExecuteRunnable.java:49)at org.apache.dolphinscheduler.server.worker.runner.WorkerTaskExecuteRunnable.run(WorkerTaskExecuteRunnable.java:174)at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:131)at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:74)at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:82)at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)at java.lang.Thread.run(Thread.java:750)
Caused by: java.lang.ArrayIndexOutOfBoundsException: 1at org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters.getMapByString(AbstractParameters.java:191)at org.apache.dolphinscheduler.plugin.task.api.parameters.AbstractParameters.dealOutParam(AbstractParameters.java:144)at org.apache.dolphinscheduler.plugin.task.shell.ShellTask.handle(ShellTask.java:99)... 9 common frames omitted

脚本本身运行没出现任何错误,但dolphinscheduler提示错误。后来多次研究发现,如果设置变量值为空时会出现这个异常,就是下面这行用于向dolphinscheduler输出变量的脚本:

echo "#{setValue(newLineColNums=${colsNum})}"

如果colsNum为空,就会出现错误。
于是,加一个判断就能解决问题了:

ret=`/data/dolphinscheduler/loadOraTable.sh "${dbConnect}" "select ${slctColums} from ${SRC_DB}.${tableName} t " "/dmp/${DMP_DB}" "${srcSystem}" "${bizDate}"`
colsNum=$(echo $ret |grep "new line cols:" | awk -F 'new line cols:{' '{print $2}' | awk -F '}' '{print $1}')
if (( -n $colsNum ))
thenecho "#{setValue(newLineColNums=${colsNum})}"
fi
echo "newLineColNums: $colsNum"
http://www.dtcms.com/a/331019.html

相关文章:

  • MCP和Agent之间的区别和联系
  • vercel部署上线
  • lesson38:MySQL数据库核心操作详解:从基础查询到高级应用
  • 飞算JavaAI智慧零售场景实践:从用户洞察到供应链优化的全链路技术升级
  • UniApp 中使用 tui-xecharts插件(或类似图表库如 uCharts)
  • [ HTML 前端 ] 语法介绍和HBuilderX安装
  • 通过网页调用身份证阅读器http websocket方法-湖南步联科技美萍MP999A电子————仙盟创梦IDE
  • 15 ABP Framework 开发工具
  • Transformer网络结构解析
  • HTML <link rel=“preload“>:提前加载关键资源的性能优化利器
  • CNN - 卷积层
  • MicroVM-as-a-Service 后端服务架构设计与实现
  • 使用 Docker 部署 PostgreSQL
  • 加密货币交易所开发:如何打造安全、高并发的数字资产交易平台?
  • 基于ECharts和EdgeOne打造云上智能图表
  • 单体架构集训整理
  • css 属性@font-face介绍
  • 经典深度学习模型——LSTM【原理解释 代码(以2025年美赛C题为例)】
  • FreeRTOS-C语言指针笔记
  • 【入门级-C++程序设计:13、STL 模板:栈(stack)、队 列(queue)、 链 表(list)、 向 量(vector) 等容器】
  • gitlab的ci/cd变量如何批量添加
  • 【P81 10-7】OpenCV Python【实战项目】——车辆识别、车流统计(图像/视频加载、图像运算与处理、形态学、轮廓查找、车辆统计及显示)
  • 智能清扫新纪元:有鹿机器人如何用AI点亮我们的城市角落
  • Streamlit实现Qwen对话机器人
  • CVPR 2025 | 机器人操控 | RoboGround:用“掩码”中介表示,让机器人跨场景泛化更聪明
  • GaussDB数据库架构师修炼(十六) 如何选择磁盘
  • Helm-K8s包管理(三)新建、编辑一个Chart
  • k8s+isulad 重装
  • Seata学习(三):Seata AT模式练习
  • CMake语法与Bash语法的区别