DataWorks的SSH节点可通过指定SSH数据源的方式,在DataWorks远程访问该数据源连接的主机,并触发脚本在远程主机执行。例如,您可通过此方式实现在DataWorks远程访问ECS(Elastic Compute Service)并触发ECS中的脚本周期性调度执行。本文为您介绍使用SSH节点进行任务开发的主要流程。
使用限制
支持Serverless资源组(推荐)或旧版独享调度资源组运行SSH任务,如需购买使用Serverless资源组,详情请参见新增和使用Serverless资源组。
注意事项
通过SSH节点启动远程主机的某进程执行场景下,当SSH节点任务异常退出时(例如,任务超时等场景),不会影响底层远程主机中的操作行为,即DataWorks不会主动向远程主机下发进程终止命令。
SSH节点支持标准Shell语法,不支持交互性语法。
前提条件
已创建业务流程。
数据开发(DataStudio)基于业务流程执行不同引擎的具体开发操作,因此,创建节点前需先创建业务流程,操作详情请参见创建业务流程。
已创建SSH数据源。
您需先通过创建SSH数据源远程访问您的SSH服务器,才可在SSH节点中进行SSH任务的开发和周期性调度。创建数据源,请参见创建SSH数据源。
说明SSH节点仅支持使用JDBC连接串方式创建的SSH数据源。同时,为避免任务运行失败,请确保数据源与资源组网络连通。
(可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发或空间管理员(权限较大,谨慎添加)角色权限。添加成员并授权,详情请参见为工作空间添加空间成员。
步骤一:创建SSH节点
进入数据开发页面。
登录DataWorks控制台,切换至目标地域后,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
右键单击目标业务流程,选择
。在新建节点对话框输入节点名称,单击确认。节点创建完成,您可在节点中进行对应任务的开发与配置。
步骤二:开发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
步骤三:配置任务调度
如您需要周期性执行创建的节点任务,可单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息。配置详情请参见任务调度属性配置概述。
您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
步骤四:调试任务代码
您可根据需要执行如下调试操作,查看任务是否符合预期。
步骤五:提交发布任务
节点任务配置完成后,需执行提交发布操作,提交发布后节点即会根据调度配置内容进行周期性运行。
单击工具栏中的图标,保存节点。
单击工具栏中的图标,提交节点任务。
提交时需在提交对话框中输入变更描述,并根据需要选择是否在节点提交后执行代码评审。
说明您需设置节点的重跑属性和依赖的上游节点,才可提交节点。
代码评审可对任务的代码质量进行把控,防止由于任务代码有误,未经审核直接发布上线后出现任务报错。如进行代码评审,则提交的节点代码必须通过评审人员的审核才可发布,详情请参见代码评审。
如您使用的是标准模式的工作空间,任务提交成功后,需单击节点编辑页面右上方的发布,将该任务发布至生产环境执行,操作请参见发布任务。
后续步骤
任务运维:任务提交发布后,会基于节点的配置周期性运行,您可单击节点编辑界面右上角的运维,进入运维中心查看周期任务的调度运行情况。详情请参见查看并管理周期任务。
常见问题
Q:造成SSH节点长时间处于运行中状态无法正常退出,且运行时长超过预期的可能原因与解决方案。
A:远程服务器上的SSH服务器,可能有默认的断开逻辑,如果一小时以内,客户端和服务器之间没有数据往来,服务端会断开,而DataWorks的SSH节点无法判定服务端是否断开,因此会一直等下去,而实际上连接已经中断。
解决办法:
在SSH服务器的配置文件(如
/etc/ssh/sshd_config
)中配置以下三个参数,避免SSH服务端中断连接,并且每60秒发送一个keepalive packet
以保持连接。ClientAliveInterval:30
ClientAliveCountMax:0
TCPKeepAlive:yes
重启sshd。
sudo service sshd restart
说明不同操作系统或者操作系统版本的启动命令可能存在差异,请根据实际情况重启sshd。