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

DolphinScheduler中shell安装脚本说明

DolphinScheduler中有很多经典的Linux shell用法,掌握好了,可以快速提升自己的shell编写能力,如下为对其安装包下的 scp-hosts.sh 脚本的具体解读。

DS版本:3.1.4

scp-hosts.sh 代码清单:

workDir=`dirname $0`
workDir=`cd ${workDir};pwd`

source ${workDir}/env/install_env.sh

workersGroup=(${workers//,/ })
for workerGroup in ${workersGroup[@]}
do
  echo $workerGroup;
  worker=`echo $workerGroup|awk -F':' '{print $1}'`
  group=`echo $workerGroup|awk -F':' '{print $2}'`
  workerNames+=($worker)
  groupNames+=(${group:-default})
done

hostsArr=(${ips//,/ })
for host in ${hostsArr[@]}
do

  if ! ssh -o StrictHostKeyChecking=no -p $sshPort $host test -e $installPath; then
    ssh -o StrictHostKeyChecking=no -p $sshPort $host "sudo mkdir -p $installPath; sudo chown -R $deployUser:$deployUser $installPath"
  fi

  echo "scp dirs to $host/$installPath starting"
  for i in ${!workerNames[@]}; do
    if [[ ${workerNames[$i]} == $host ]]; then
      workerIndex=$i
      break
    fi
  done
  # set worker groups in application.yaml
  [[ -n ${workerIndex} ]] && sed -i "s/- default/- ${groupNames[$workerIndex]}/" $workDir/../worker-server/conf/application.yaml

  for dsDir in bin master-server worker-server alert-server api-server ui tools
  do
    echo "start to scp $dsDir to $host/$installPath"
    # Use quiet mode to reduce command line output
    scp -q -P $sshPort -r $workDir/../$dsDir  $host:$installPath
  done
  # restore worker groups to default
  [[ -n ${workerIndex} ]] && sed -i "s/- ${groupNames[$workerIndex]}/- default/" $workDir/../worker-server/conf/application.yaml

  echo "scp dirs to $host/$installPath complete"
done

以下是对这段DolphinScheduler脚本安装代码的逐行解释:

1. 获取脚本所在目录

workDir=`dirname $0`
workDir=`cd ${workDir};pwd`
  • dirname $0$0 代表当前执行的脚本文件名,dirname 命令用于提取文件路径中的目录部分。这行代码获取了当前脚本所在的目录。
  • cd ${workDir};pwd:进入该目录,然后使用 pwd 命令获取该目录的绝对路径,并将其赋值给 workDir 变量。

2. 加载安装环境配置文件

source ${workDir}/env/install_env.sh
  • source 命令用于在当前 shell 环境中执行指定的脚本文件。这里加载了 install_env.sh 文件,该文件通常包含了安装过程中需要使用的环境变量等配置信息。

3. 解析 workers 变量并存储 worker 和 group 信息

workersGroup=(${workers//,/ })
for workerGroup in ${workersGroup[@]}
do
  echo $workerGroup;
  worker=`echo $workerGroup|awk -F':' '{print $1}'`
  group=`echo $workerGroup|awk -F':' '{print $2}'`
  workerNames+=($worker)
  groupNames+=(${group:-default})
done
  • workersGroup=(${workers//,/ }):将 workers 变量中的逗号替换为空格,然后将结果存储在数组 workersGroup 中。workers 变量可能是一个以逗号分隔的字符串,每个元素格式为 worker:group
  • for workerGroup in ${workersGroup[@]}:遍历 workersGroup 数组中的每个元素。
  • worker=echo $workerGroup|awk -F’:’ ‘{print $1}’``:使用 awk 命令以冒号为分隔符,提取每个元素的第一部分(即 worker 名称),并将其赋值给 worker 变量。
  • group=echo $workerGroup|awk -F’:’ ‘{print $2}’``:同理,提取每个元素的第二部分(即 group 名称),并将其赋值给 group 变量。
  • workerNames+=($worker):将提取的 worker 名称添加到 workerNames 数组中。
  • groupNames+=(${group:-default}):将提取的 group 名称添加到 groupNames 数组中,如果 group 为空,则使用默认值 default

4. 解析 ips 变量并在远程主机上进行操作

hostsArr=(${ips//,/ })
for host in ${hostsArr[@]}
do
  • hostsArr=(${ips//,/ }):将 ips 变量中的逗号替换为空格,然后将结果存储在数组 hostsArr 中。ips 变量可能是一个以逗号分隔的远程主机 IP 地址或主机名列表。
  • for host in ${hostsArr[@]}:遍历 hostsArr 数组中的每个主机。

5. 检查远程主机上的安装路径是否存在,若不存在则创建

  if ! ssh -o StrictHostKeyChecking=no -p $sshPort $host test -e $installPath; then
    ssh -o StrictHostKeyChecking=no -p $sshPort $host "sudo mkdir -p $installPath; sudo chown -R $deployUser:$deployUser $installPath"
  fi
  • ssh -o StrictHostKeyChecking=no -p $sshPort $host test -e $installPath:使用 ssh 命令连接到远程主机,检查 $installPath 目录是否存在。-o StrictHostKeyChecking=no 选项用于跳过 SSH 密钥验证,-p $sshPort 指定 SSH 端口号。
  • 如果目录不存在,则执行 sudo mkdir -p $installPath; sudo chown -R $deployUser:$deployUser $installPath 命令,在远程主机上创建该目录,并将其所有权赋予 $deployUser 用户和组。

6. 查找当前主机对应的 worker 索引

  echo "scp dirs to $host/$installPath starting"
  for i in ${!workerNames[@]}; do
    if [[ ${workerNames[$i]} == $host ]]; then
      workerIndex=$i
      break
    fi
  done
  • echo "scp dirs to $host/$installPath starting":输出提示信息,表示开始将目录复制到远程主机的安装路径。
  • for i in ${!workerNames[@]}:遍历 workerNames 数组的索引。
  • if [[ ${workerNames[$i]} == $host ]]:检查当前索引对应的 worker 名称是否与当前主机名相同,如果相同,则将该索引赋值给 workerIndex 变量,并跳出循环。

7. 修改 worker-server 配置文件中的 group 信息

  [[ -n ${workerIndex} ]] && sed -i "s/- default/- ${groupNames[$workerIndex]}/" $workDir/../worker-server/conf/application.yaml
  • [[ -n ${workerIndex} ]]:检查 workerIndex 变量是否为空。
  • 如果不为空,则使用 sed 命令在 $workDir/../worker-server/conf/application.yaml 文件中,将 - default 替换为 - ${groupNames[$workerIndex]}

8. 将目录复制到远程主机

  for dsDir in bin master-server worker-server alert-server api-server ui tools
  do
    echo "start to scp $dsDir to $host/$installPath"
    # Use quiet mode to reduce command line output
    scp -q -P $sshPort -r $workDir/../$dsDir  $host:$installPath
  done
  • for dsDir in bin master-server worker-server alert-server api-server ui tools:遍历需要复制的目录列表。
  • scp -q -P $sshPort -r $workDir/../$dsDir $host:$installPath:使用 scp 命令将本地的 $dsDir 目录递归复制到远程主机的 $installPath 目录下。-q 选项用于安静模式,减少命令行输出。

9. 恢复 worker-server 配置文件中的 group 信息

  [[ -n ${workerIndex} ]] && sed -i "s/- ${groupNames[$workerIndex]}/- default/" $workDir/../worker-server/conf/application.yaml
  • 与步骤 7 类似,将 application.yaml 文件中的 - ${groupNames[$workerIndex]} 恢复为 - default

10. 输出复制完成提示信息

  echo "scp dirs to $host/$installPath complete"
done
  • echo "scp dirs to $host/$installPath complete":输出提示信息,表示将目录复制到远程主机的安装路径完成。

综上所述,这段脚本的主要功能是将 DolphinScheduler 的相关目录复制到多个远程主机的指定安装路径,并根据配置信息修改 worker-server 的配置文件。

相关文章:

  • 解线性方程组的直接方法:高斯消元法与其程序实现
  • 如何通过 iTick 外汇数据 API 与 Cursor AI 实现量化策略开发
  • 设计模式的六大原则
  • PHP回调后门分析
  • 比R版本快几十倍| Pyscenic单细胞转录因子预测
  • 项目日记 -云备份 -服务端配置信息模块
  • 深入解析 Python 正则表达式:全面指南与实战示例
  • Python实现小红书app版爬虫
  • CSS圣杯布局与双飞翼布局
  • WordPress超级菜单插件UberMenu v3.78汉化版
  • NVIDIA TensorRT-LLM:高性能大语言模型推理框架详解
  • AI与.NET技术实操系列(一):开篇
  • CentOS 7 更换 yum 源(阿里云)+ 扩展 epel 源
  • vue3,element-plus 表格单选、多选、反选、全选
  • [深度学习]图像分类项目-食物分类
  • QuecPython 网络协议之TCP/UDP协议最祥解析
  • 实战经验:Gone 框架模块化改造中的 go work 反思
  • 10分钟打造专属AI助手!ToDesk云电脑/顺网云/海马云操作DeepSeek哪家强?
  • 信奥赛CSP-J复赛集训(模拟算法专题)(31):P2692 覆盖
  • 部署Jenkins
  • 王星昊再胜连笑,夺得中国围棋天元赛冠军
  • 中介在网上非法贩婴“一个孩子8.5万元”?丹阳警方介入
  • 上海市政府常务会议研究抓好稳就业稳企业稳市场稳预期工作,让企业感受温度
  • 财政部下达农业生产防灾救灾资金3.76亿元,支持黄淮海等地抗旱保春播
  • 涨价应对关税变化是短期之策,跨境电商塑造新品牌开辟“新蓝海”
  • 京东美团开打,苦了商家?