服务器检测databricks job的运行状态封装

Azure databricks上配置的job 需要传入可变参数,故而我将任务的启动脚本都部署在服务器上。但是任务执行是否成功需要不断获取任务状态才能检测,故而将检测任务的状态进行封装。

封装脚本如下:

azurework:

powershell 复制代码
#! /bin/bash
source /etc/profile
source ~/.bashrc
JQ_EXEC=`which jq`
if [ $# -eq 0 ];
then
    exit
fi
starttime=`date +'%Y-%m-%d %H:%M:%S'`
start_seconds=$(date --date="$starttime" +%s)
jobId=$1
params=$2
echo "azure job Id : ${jobId}"
echo "azure param : ${params}"
job_id=$(databricks jobs run-now --job-id ${jobId} --spark-submit-params "${params}")
run_id=$(echo ${job_id} | ${JQ_EXEC} .run_id | sed 's/\"//g')
echo $run_id
wait_time=7200
for((i=1;i<=10000;i++));
do
   sleep 5s
   echo "databricks runs get --run-id ${run_id}"
   job_info=$(databricks runs get --run-id ${run_id})
   life_cycle_state=$(echo "${job_info}" | jq -r '.state.life_cycle_state')
   endtime=`date +'%Y-%m-%d %H:%M:%S'`
   end_seconds=$(date --date="$endtime" +%s);
   interval=$((end_seconds-start_seconds))
   echo $interval
   echo $life_cycle_state
   if [ "$life_cycle_state" == "TERMINATED" ]; then
      echo "job_info :: $job_info"
      echo "$status excute time = ${interval}s"
      result_state=$(echo "${job_info}" | jq -r '.state.result_state')
      echo $result_state
      if [ "$result_state" == "SUCCESS" ];then
          echo "Job Finish "
          exit 0
      else
          echo "Job Failed"
          exit 1
      fi
   fi
   if [ "$life_cycle_state" == "INTERNAL_ERROR" ]; then
      exit 1
   fi
   if [ "$life_cycle_state" == "SKIPPED" ]; then
      echo "已有任务在运行,此任务被SKIPPED"
      exit 1
   fi
   if [ $interval -ge $wait_time ]; then
        echo "too long time force shutdown"
        exit 1
   fi
   if [ $((i%3)) == 0 ]; then
      echo "RUNNING wait = ${interval}s"
   fi

done

如此以来,执行任务就可以简化为 scriptPath/azurework jobId $params

示例:

powershell 复制代码
#!/bin/sh
source /etc/profile
source ~/.bashrc
if [ $# -eq 1 ];then
  pt=$1
else
  pt=$(date -d "yesterday" +%Y%m%d)
  echo "daily running"
fi
echo "$pt"

jobId=630195968789849
jarPath=dbfs:/FileStore/tables/cdp-1.0.0.jar
scriptPath=/home/eshen2/cdp/bigdata
confPath=dbfs:/FileStore/tables
classPath=org.deloitte.cdp.batch.engine.Job_Combine
cdp=dbw_corp_crm_etl_dev_southeastasia.cdp
tags_daily_table=tags_daily
tags_history_table=tags_history
tags_routine_table=tags_routine
id_access_table=id_access
params="[\"--class\",\"$classPath\",\"$jarPath\",\"--date\",\"${pt}\",\"--cdp\",\"$cdp\",\"--entity\",\"obj\",\"--tags_daily_table\",\"$tags_daily_table\",\"--tags_history_table\",\"$tags_history_table\",\"--tags_routine_table\",\"$tags_routine_table\",\"--id_access_table\",\"$id_access_table\",\"--confPath\",\"$confPath\"]"
echo $params

$scriptPath/azurework $jobId  $params
相关推荐
Escalating_xu14 小时前
【Linux 网络编程】手写序列化与反序列化:从 x op y 到能校验的文本协议
linux·运维·网络
润滑卫士14 小时前
油液多参数融合故障诊断:数据级融合与决策级融合方法
运维
李纲明16 小时前
WordPress 后台登录马上被踢回登录页:Cookie 域、HTTPS、盐值和页面缓存怎么查
运维·缓存·https·php·wordpress·cookie
todoitbo16 小时前
在 Ubuntu ARM64 上运行 Q1 V3.0 MuJoCo 模型:加载、步进和单执行器响应
linux·运维·ubuntu·ai·机器人·仿真教程·启元
AR-26710-16 小时前
Linux Day26——传输层与三次握手
linux·运维
额额额对了17 小时前
嵌入式 Linux 实战:i.MX6ULL 上的 CAN 通信与摄像头采集
linux·运维·服务器
RFID科技的魅力18 小时前
2026 年 RFID 资产标签批量制作怎么做?RFID 标签打印机实操指南
运维·人工智能·嵌入式硬件·物联网
灯澜忆梦18 小时前
【Linux】#10 | Linux 终端实用快捷键 + 安装应用
linux·运维·服务器
OnlyEasyCode20 小时前
IIS开放端口转发后端
运维·服务器
合合技术团队21 小时前
合合信息旗下TextIn面向全球市场推出文档处理自动化公有云服务
运维·自动化