更新时间:2026-08-05 GMT+08:00
分享

开发一个Shell作业

本章节介绍如何在数据开发模块上开发并执行Shell作业示例。

环境准备

  • 已开通弹性云服务器,并创建ECS,ECS主机名为“ecs-dgc”。

    本示例主机选择“CentOS 8.0 64bit with ARM(40GB)”的公共镜像,并且使用ECS自带的Shell环境,您可登录主机后使用shell命令确认服务器的Shell环境。

  • 已开通数据集成增量包,CDM集群名为“cdm-dlfpython”,提供数据开发模块与ECS主机通信的代理。
  • 请确保ECS主机与CDM集群网络互通,互通需满足如下条件:
    • CDM集群与ECS主机同区域情况下,同虚拟私有云、同子网、同安全组的不同实例默认网络互通;如果同虚拟私有云但是子网或安全组不同,还需配置路由规则及安全组规则,配置路由规则请参见如何配置路由规则章节,配置安全组规则请参见如何配置安全组规则章节。
    • CDM集群与ECS主机处于不同区域的情况下,需要通过公网或者专线打通网络。通过公网互通时,需确保CDM集群已绑定EIP,数据源所在的主机可以访问公网且防火墙规则已开放连接端口。
    • 此外,您还必须确保该ECS主机与CDM集群所属的企业项目必须相同,如果不同,需要修改工作空间的企业项目。

约束限制

  • Shell节点支持脚本参数和作业参数。
  • Shell注释不能以"#{"开头,与数据开发内置的EL表达式用法冲突。

建立主机数据连接

开发Python脚本前,我们需要建立一个到弹性云服务器ECS的连接。

  1. 登录DataArts Studio管理控制台

    详情请参考访问DataArts Studio实例控制台

  2. DataArts Studio控制台首页,选择对应工作空间的“管理中心”模块,进入管理中心页面。
  3. 在管理中心页面,单击“数据连接”,进入数据连接页面并单击“创建数据连接”
  4. 参见表1配置相关参数,创建主机连接名称为“ecs”的数据连接,如图1所示。

    表1 主机连接

    参数

    是否必选

    说明

    数据连接类型

    主机连接固定选择为主机连接。

    数据连接名称

    数据连接的名称,只能包含字母、数字、下划线和中划线,且长度不超过100个字符。

    描述

    为更好地识别数据连接,此处加以描述信息,长度不能超过100个字符。

    标签

    标识数据连接的属性。设置标签后,便于统一管理。
    说明:

    标签的名称,只能包含中文、英文字母、数字和下划线,不能以下划线开头,且长度不能超过100个字符。

    适用组件

    选择此连接适用的组件。勾选组件后,才能在相应组件内使用本连接。

    基础与网络连通配置

    主机地址

    Linux操作系统主机的IP地址。

    请参考查看云服务器详细信息获取。

    绑定Agent

    选择CDM集群,CDM集群提供Agent。如果没有可用的CDM集群,请参考创建CDM集群进行创建。

    说明:
    • CDM集群作为管理中心数据连接Agent时,单集群的并发活动线程最大为200。即当多个数据连接共用同一Agent时,通过这些数据连接提交SQL脚本、Shell脚本、Python脚本等任务的同时运行上限为200,超出的任务将排队等待。建议您按照业务量情况规划多个Agent分担压力。

    • 在调度Shell、Python脚本时,Agent会访问ECS主机,如果Shell、Python脚本的调度频率很高,ECS主机会将Agent的内网IP加入黑名单。为了保障作业的正常调度,强烈建议您使用ECS主机的root用户将绑定Agent(即CDM集群)的内网IP加到/etc/hosts.allow文件里面。

      CDM集群的内网IP获取方式请参见查看集群信息并修改配置

    端口

    主机的SSH端口号。

    Linux操作系统主机的默认登录端口为22,如有修改可通过主机路径“/etc/ssh/sshd_config”文件中的port字段确认端口号。

    KMS加密密钥

    通过KMS加解密数据源认证信息,选择KMS中的任一默认密钥或自定义密钥即可。
    说明:
    • 第一次通过DataArts Studio或KPS使用KMS加密时,会自动生成默认密钥dlf/default或kps/default。关于默认密钥的更多信息,请参见什么是默认密钥章节。
    • 仅支持通过对称密钥加密,暂不支持非对称密钥。

    数据源认证及其他功能配置

    用户名

    主机的登录用户名。

    登录方式

    选择主机的登录方式:

    • 密钥对
    • 密码

    密钥对

    “登录方式”“密钥对”时,显示该配置项。

    主机的登录方式为密钥对时,您需要获取并上传其私钥文件至OBS,在此处选择对应的OBS路径(OBS路径中不能存在中文字符)。

    说明:

    此处上传的私钥文件应和主机上配置的公钥是一个密钥对,详情请参见密钥对使用场景介绍

    密钥对密码

    如果密钥对未设置密码,则不需要填写该配置项。

    密码

    “登录方式”“密码”时,显示该配置项。

    主机的登录方式为密码时,填写主机的登录密码。

    图1 新建主机连接

    关键参数说明:

  5. 单击“测试”,测试数据连接的连通性。如果无法连通,数据连接将无法创建。
  6. 测试通过后,单击“确定”,创建数据连接。

开发Shell脚本

  1. 在“数据开发 > 脚本开发”模块中创建一个Shell脚本,脚本名称为“shell_test”。
  2. 选择已创建好的主机连接ecs。
  3. 编写以下Shell脚本,该脚本包含参数传递和交互式输入。假设我们要从一个HDFS路径中读取文件并保存到本地路径,同时要求用户输入一个确认信息:

    #!/bin/bash
    
    # 获取传递的参数
    SOURCE_PATH=$1
    LOCAL_OUTPUT_FILE=$2
    
    # 检查参数是否传递
    if [ -z "$SOURCE_PATH" ] || [ -z "$LOCAL_OUTPUT_FILE" ]; then
        echo "Usage: $0 <source_path> <local_output_file>"
        exit 1
    fi
    
    # 从HDFS中读取文件(假设Hadoop环境已配置)
    hadoop fs -getmerge $SOURCE_PATH $LOCAL_OUTPUT_FILE
    
    # 检查文件是否成功下载
    if [ $? -eq 0 ]; then
        echo "文件已成功下载到 $LOCAL_OUTPUT_FILE"
    else
        echo "文件下载失败"
    fi
    
    # 交互式输入
    read -p "请输入一个确认信息: " confirmation
    echo "您输入的确认信息是: $confirmation"

  4. 运行脚本。查看脚本运行结果。

在作业中引用Shell脚本

  1. 在左侧菜单栏选择“数据开发 > 作业开发”。创建批处理的Pipeline作业。
  2. 在作业画布中,从左侧节点列表中拖动“Shell”节点到画布上,配置Shell节点参数。

    配置“Shell语句”参数,编写以下Shell脚本,该脚本包含参数传递和交互式输入。假设我们要从一个HDFS路径中读取文件并保存到本地路径,同时要求用户输入一个确认信息:

    #!/bin/bash
    
    # 获取传递的参数
    SOURCE_PATH=$1
    LOCAL_OUTPUT_FILE=$2
    
    # 检查参数是否传递
    if [ -z "$SOURCE_PATH" ] || [ -z "$LOCAL_OUTPUT_FILE" ]; then
        echo "Usage: $0 <source_path> <local_output_file>"
        exit 1
    fi
    
    # 从HDFS中读取文件(假设Hadoop环境已配置)
    hadoop fs -getmerge $SOURCE_PATH $LOCAL_OUTPUT_FILE
    
    # 检查文件是否成功下载
    if [ $? -eq 0 ]; then
        echo "文件已成功下载到 $LOCAL_OUTPUT_FILE"
    else
        echo "文件下载失败"
    fi
    
    # 交互式输入
    read -p "请输入一个确认信息: " confirmation
    echo "您输入的确认信息是: $confirmation"

    或者,在Shell脚本中,选择刚创建的Shell脚本。

    • 如果没有已创建好的脚本,单击“新建”按钮(),创建Shell脚本,并引用该脚本。
    • 如果已创建好的脚本,直接引用已创建Shell脚本。(开发Shell脚本已创建)

  3. 配置参数传递。配置Shell节点参数。

    添加参数

    单击“作业参数配置”页签,添加一个参数。
    • 参数名称设置为source_path。

      参数值设置为HDFS中的源路径,例如 /user/your_username/source_data。

    • 参数名称设置为local_output_file。

      参数值设置为本地输出文件路径,例如 /path/to/local/output/file。

  4. 保存并提交作业。
  5. 单击“执行调度”运行作业。
  6. 查看运行结果。

    在“批作业监控”页面,确保作业运行成功。单击作业前面的,在操作列查看Shell节点的运行日志信息。

    例如,日志信息可能如下:

    文件已成功下载到/path/to/local/output/file
    请输入一个确认信息: 确认
    您输入的确认信息是: 确认

相关文档