创建EMR Shell节点

为了满足特定业务需求,您可以在DataWorks中创建EMR Shell节点。通过编辑自定义Shell脚本,对数据处理、调用Hadoop组件、操作文件等高级功能进行使用。本文介绍了在DataWorks里配置和使用EMR Shell节点,以便您编辑和运行Shell任务。

前提条件

  • 已创建阿里云EMR集群,并注册EMR集群至DataWorks。操作详情请参见注册EMR集群至DataWorks

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

  • 已购买Serverless资源组并完成资源组配置,包括绑定工作空间、网络配置等,详情请参见新增和使用Serverless资源组

  • 数据开发(DataStudio)中已创建业务流程。

    数据开发(DataStudio)基于业务流程对不同开发引擎进行具体开发操作,所以您创建节点前需要先新建业务流程,操作详情请参见创建业务流程

  • 在DataWorks资源组本地运行Python脚本时,代码需要调用第三方包,需要根据任务使用的资源组不同,采用不同方式在资源组上准备第三方包环境:

    • Serverless资源组(推荐):通过镜像管理安装第三方包,详情请参见镜像管理

    • 独享调度资源组:通过运维助手安装第三方包,详情请参见运维助手

使用限制

  • 仅支持使用Serverless资源组(推荐)或独享调度资源组运行该类型任务。

  • DataLake或自定义集群若要在DataWorks管理元数据,需先在集群侧配置EMR-HOOK。若未配置,则无法在DataWorks中实时展示元数据、生成审计日志、展示血缘关系、开展EMR相关治理任务。配置EMR-HOOK,详情请参见配置Hive的EMR-HOOK

  • spark-submit方式提交的任务,deploy-mode推荐使用cluster模式,不建议使用client模式。

  • EMR Shell节点是运行在DataWorks调度资源组,而非EMR集群的,您可以使用一些EMR组件命令,但无法直接读取EMR上资源情况。如果要引用资源,则需要先上传DataWorks资源。详情请参见上传EMR资源

步骤一:创建EMR Shell节点

  1. 进入数据开发页面。

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

  2. 新建EMR Shell节点。

    1. 右键单击目标业务流程,选择新建节点 > EMR > EMR Shell

      说明

      您也可以鼠标悬停至新建,选择新建节点 > EMR > EMR Shell

    2. 新建节点对话框中,输入名称,并选择引擎实例节点类型路径。单击确认,进入EMR Shell节点编辑页面。

      说明

      节点名称支持大小写字母、中文、数字、下划线(_)和小数点(.)。

步骤二:开发EMR Shell任务

在EMR Shell节点编辑页面双击已创建的节点,您可以根据不同场景需求选择适合您的操作方案:

方案一:先上传资源后引用EMR JAR资源

DataWorks也支持您从本地先上传资源至DataStudio,再引用资源。如果您使用的是DataLake(新版数据湖)集群,则可通过如下步骤引用EMR JAR资源,若EMR Shell节点依赖的资源较大,则无法通过DataWorks页面上传。您可将资源存放至HDFS上,然后在代码中进行引用。

  1. 创建EMR JAR资源。

    创建EMR JAR资源,详情请参见创建和使用EMR资源。示例将本文《准备初始数据及JAR资源包》中生成的JAR包存储在JAR资源的存放目录emr/jars下。首次使用需要选择一键授权,然后单击点击上传按钮,上传JAR资源。新建JAR资源

  2. 引用EMR JAR资源。

    1. 打开创建的EMR Shell节点,停留在代码编辑页面。

    2. EMR > 资源节点下,找到待引用资源(示例为onaliyun_mr_wordcount-1.0-SNAPSHOT.jar),右键选择引用资源引用资源

    3. 选择引用后,当EMR Shell节点的代码编辑页面显示##@resource_reference{""}格式的语句,表明已成功引用代码资源。此时,需要执行下述命令。如下命令涉及的资源包、Bucket名称、路径信息等为本文示例的内容,使用时,您需要替换为实际使用的信息。

      ##@resource_reference{"onaliyun_mr_wordcount-1.0-SNAPSHOT.jar"}
      onaliyun_mr_wordcount-1.0-SNAPSHOT.jar cn.apache.hadoop.onaliyun.examples.EmrWordCount oss://onaliyun-bucket-2/emr/datas/wordcount02/inputs oss://onaliyun-bucket-2/emr/datas/wordcount02/outputs
      说明

      EMR Shell节点编辑代码时不支持注释语句。

方案二:直接引用OSS资源

当前节点可通过OSS REF的方式直接引用OSS资源,在运行EMR节点时,DataWorks会自动加载代码中的OSS资源至本地使用。该方式常用于“需要在EMR任务中运行JAR依赖”、“EMR任务需依赖脚本”等场景。引用格式如下:

ossref://{endpoint}/{bucket}/{object}
  • endpoint:OSS对外服务的访问域名。Endpoint为空时,仅支持使用与当前访问的EMR集群同地域的OSS,即OSS的Bucket需要与EMR集群所在地域相同。

  • Bucket:OSS用于存储对象的容器,每一个Bucket有唯一的名称,登录OSS管理控制台,可查看当前登录账号下所有Bucket

  • object:存储在Bucket中的一个具体的对象(文件名称或路径)。

使用示例

  1. 在OSS Bucket中上传示例文件。本文以emr_shell_test.sh为例,示例文件内容如下:

    #!/bin/sh
    echo "Hello, DataWorks!"
  2. 在EMR Shell节点中直接引用OSS资源。

    sh ossref://oss-cn-shanghai.aliyuncs.com/test-oss-of-dataworks/emr_shell_test.sh
    说明

    oss-cn-shanghai.aliyuncs.comendpointtest-oss-of-dataworksBucket名称,emr_shell_test.shobject文件名。

    运行结果如下,即可看到emr_shell_test.sh文件的输出结果:

    ...
    >>> [2024-10-24 15:46:01][INFO   ][CommandExecutor       ]: Process ready to execute. command: sh ./emr_shell_test.sh
    >>> [2024-10-24 15:46:01][INFO   ][CommandExecutor       ]: Command state update to RUNNING
    >>> [2024-10-24 15:46:01][INFO   ][CommandExecutor       ]: Process start to execute...
    Process Output>>> Hello, DataWorks!
    ...

配置EMR Shell调度参数

在SQL编辑区域开发任务代码,您可在代码中使用${变量名}的方式定义变量,并在节点编辑页面右侧导航栏的调度配置>调度参数中为该变量赋值。实现调度场景下代码的动态传参,调度参数使用详情,请参考调度参数支持的格式,示例如下。

DD=`date`;
echo "hello world, $DD"
##可以结合调度参数使用
echo ${var};
说明

如果您使用的是DataLake(新版数据湖)集群,则还支持如下命令行。

  • Shell命令:/usr/bin/bin下的Shell命令。例如,ls、echo等。

  • Yarn组件:hadoop、hdfs、yarn。

  • Spark组件:spark-submit。

  • Sqoop组件:sqoop-export、sqoop-import、sqoop-import-all-tables等。

使用该组件时,您需要在RDS白名单中添加资源组的IP信息。

执行SQL任务

  1. 在工具栏单击高级运行图标,在参数对话框选择已创建的调度资源组,单击运行

    说明
    • 访问公共网络或VPC网络环境的数据源需要使用与数据源测试连通性成功的调度资源组。详情请参见网络连通方案

    • 如果您后续执行任务需要修改使用的资源组,您可单击带参运行高级运行图标,选择需要更换的调度资源组。

  2. 单击保存图标,保存编写的SQL语句。

  3. (可选)冒烟测试。

    如果您希望在开发环境进行冒烟测试,可在执行节点提交或节点提交后执行冒烟测试,操作详情请参见执行冒烟测试

步骤三:配置节点调度

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

说明

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

步骤四:发布节点任务

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

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

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

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

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

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

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

后续步骤

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

相关文档

了解如何在EMR Shell节点使用Python 2或Python 3命令运行Python脚本:详情请参见Shell类型节点运行Python脚本

了解如何在EMR Shell节点使用OSSUtils工具:详情请参见Shell类型节点使用OSSUtils工具