SSH节点

DataWorks的SSH节点可通过指定SSH数据源的方式,在DataWorks远程访问该数据源连接的主机,并触发脚本在远程主机执行。例如,您可通过此方式实现在DataWorks远程访问ECS(Elastic Compute Service)并触发ECS中的脚本周期性调度执行。本文为您介绍使用SSH节点进行任务开发的主要流程。

使用限制

  • 支持Serverless资源组运行SSH任务,如需购买使用Serverless资源组,详情请参见新增和使用Serverless资源组

  • 支持的地域:华东1(杭州)、华东2(上海)、华北2(北京)、华北3(张家口)、华北6(乌兰察布)、华南1(深圳)、中国香港、日本(东京)、新加坡、马来西亚(吉隆坡)、印度尼西亚(雅加达)、德国(法兰克福)、英国(伦敦)、美国(硅谷)、美国(弗吉尼亚)

注意事项

  • 通过SSH节点启动远程主机的某进程执行场景下,当SSH节点任务异常退出时(例如,任务超时等场景),不会影响底层远程主机中的操作行为,即DataWorks不会主动向远程主机下发进程终止命令。

  • SSH节点支持标准Shell语法,不支持交互性语法。

前提条件

  • 已创建业务流程。

    数据开发(DataStudio)基于业务流程执行不同引擎的具体开发操作,因此,创建节点前需先创建业务流程,操作详情请参见创建业务流程

  • 已创建SSH数据源。

    您需先通过创建SSH数据源远程访问您的SSH服务器,才可在SSH节点中进行SSH任务的开发和周期性调度。创建数据源,请参见创建SSH数据源

    说明

    SSH节点仅支持使用JDBC连接串方式创建的SSH数据源。同时,为避免任务运行失败,请确保数据源与资源组网络连通。

  • (可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员

步骤一:创建SSH节点

  1. 进入数据开发页面。

    登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的数据开发与治理 > 数据开发,在下拉框中选择对应工作空间后单击进入数据开发

  2. 右键单击目标业务流程,选择新建节点 > SSH

  3. 新建节点对话框输入节点名称,单击确认。节点创建完成,您可在节点中进行对应任务的开发与配置。

步骤二:开发SSH任务

(可选)选择SSH数据源

如果您的工作空间创建了多个SSH数据源,需先在SSH节点编辑页面选择合适的数据源。如果仅创建了一个SSH数据源,默认使用该数据源进行开发操作。

说明

SSH节点仅支持使用JDBC连接串方式创建的SSH数据源。同时,为避免任务运行失败,请确保数据源与资源组网络连通。

开发代码:简单示例

在SSH节点的代码编辑区域编写要执行的任务。示例代码如下。

# 1. 环境准备
# 请在远程主机上找到您需要执行的文件。例如,远程主机tmp目录下存在文件nihao.sh。
# 为便于测试,您可在SSH节点直接执行以下命令创建nihao.sh文件。
echo "echo nihao,dataworks" >/tmp/nihao.sh
# 2. 通过SSH节点触发远程主机文件执行。
# 通过DataWorks的SSH节点触发/temp/nihao.sh文件执行。
sh /tmp/nihao.sh

开发代码:使用调度参数

DataWorks提供的调度参数可实现周期调度场景下代码动态入参,您可在节点任务中通过${变量名}的方式定义代码中的变量,并在节点编辑页面右侧导航栏的调度配置>调度参数,为该变量赋值。调度参数支持的格式及配置详情,请参见调度参数支持的格式配置并使用调度参数

您可结合DataWorks的调度参数使用,以下为调度参数在SSH节点的使用示例。

# 需求:在/tmp/sshnode.log文件中每日写入SSH节点的执行时间。
# 实现:sshnode.log文件使用变量${myDate},并为变量myDate赋值$[yyyy-mm-dd hh24:mi:ss],以该方式在文件中写入SSH节点的执行时间。
echo ${myDate} >/tmp/sshnode.log
cat /tmp/sshnode.log

步骤三:配置任务调度

如您需要周期性执行创建的节点任务,可单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息。配置详情请参见任务调度属性配置概述

说明

您需要设置节点的重跑属性依赖的上游节点,才可以提交节点。

步骤四:调试任务代码

您可根据需要执行如下调试操作,查看任务是否符合预期。

  1. (可选)选择运行资源组、赋值自定义参数取值。

    • 单击工具栏的高级运行图标,在参数对话框选择调试运行需使用的调度资源组。

    • 如您的任务代码中有使用调度参数变量,可在此处为变量赋值,用于调试。参数赋值逻辑,详情请参见任务调试流程

  2. 保存并运行任务代码。

    单击工具栏的保存图标,保存编写的任务代码,单击运行图标,运行创建的任务。

  3. (可选)冒烟测试。

    如您希望在开发环境进行冒烟测试,查看调度节点任务的执行是否符合预期,则可在节点提交时,或节点提交后执行冒烟测试,操作详情请参见执行冒烟测试

步骤五:提交发布任务

节点任务配置完成后,需执行提交发布操作,提交发布后节点即会根据调度配置内容进行周期性运行。

  1. 单击工具栏中的保存图标,保存节点。

  2. 单击工具栏中的提交图标,提交节点任务。

    提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。

    说明
    • 您需设置节点的重跑属性依赖的上游节点,才可提交节点。

    • 代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审

如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务

后续步骤

任务运维:任务提交发布后,会基于节点的配置周期性运行,您可单击节点编辑界面右上角的运维,进入运维中心查看周期任务的调度运行情况。详情请参见查看并管理周期任务

常见问题

Q:造成SSH节点长时间处于运行中状态无法正常退出,且运行时长超过预期的可能原因与解决方案。

A:远程服务器上的SSH服务器,可能有默认的断开逻辑,如果一小时以内,客户端和服务器之间没有数据往来,服务端会断开,而DataWorks的SSH节点无法判定服务端是否断开,因此会一直等下去,而实际上连接已经中断。

解决办法:

  1. 在SSH服务器的配置文件(如/etc/ssh/sshd_config)中配置以下三个参数,避免SSH服务端中断连接,并且每60秒发送一个keepalive packet以保持连接。

    • ClientAliveInterval:30

    • ClientAliveCountMax:0

    • TCPKeepAlive:yes

  2. 重启sshd。

    sudo service sshd restart
    说明

    不同操作系统或者操作系统版本的启动命令可能存在差异,请根据实际情况重启sshd。