为了满足特定业务需求,您可以在DataWorks中创建EMR Shell节点。通过自定义编辑Shell脚本,您能够进行数据处理、调用Hadoop组件、操作文件等高级功能。本文介绍了如何在DataWorks里配置和使用EMR Shell节点,以便您编辑和运行Shell脚本。
背景信息
本节点支持使用OSS REF方式引用OSS资源,详情请参见方案一:直接引用OSS资源。
前提条件
数据开发(DataStudio)中已创建业务流程。
数据开发(DataStudio)基于业务流程对不同开发引擎进行具体开发操作,所以您创建节点前需要先新建业务流程,操作详情请参见创建业务流程。
已创建阿里云EMR集群,并注册EMR集群至DataWorks。
创建EMR相关节点并开发EMR任务前,您需要先将EMR集群注册至DataWorks工作空间,操作详情请参见注册EMR集群至DataWorks。
(可选,RAM账号需要)进行任务开发的RAM账号已被添加至对应工作空间中,并具有开发或空间管理员(权限较大,谨慎添加)角色权限,添加成员的操作详情请参见为工作空间添加空间成员。
已购买独享调度资源组并完成资源组配置,包括绑定工作空间、网络配置等,详情请参见新增和使用独享调度资源组。
使用限制
该类任务不支持公共调度资源组运行,支持在2023年12月1号之后购买的资源组运行。
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节点
进入数据开发页面。
登录DataWorks控制台,单击左侧导航栏的 ,在下拉框中选择对应工作空间后单击进入数据开发。
创建业务流程。
如果您已有业务流程,则可以忽略该步骤。
鼠标悬停至图标,选择新建业务流程。
在新建业务流程对话框,输入业务名称。
单击新建。
创建EMR Shell节点。
右键某个业务的业务流程,选择
。说明您也可以将鼠标悬停至图标,选择
。在弹出的新建节点对话框中,输入名称,并选择引擎实例、节点类型及路径。
说明节点名称必须是大小写字母、中文、数字、下划线(_)和小数点(.),且不能超过128个字符。
单击确认,进入EMR Shell节点编辑页面。
开发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中的一个具体的对象(文件名称或路径)。
该功能不支持公共调度资源组。并且若您在2023年12月1日前购买的资源组,需联系我们进行资源组升级以使用此功能。
方案二:先上传资源后引用EMR JAR资源
DataWorks也支持您从本地先上传资源至DataStudio,再引用资源。如果您使用的是DataLake(新版数据湖)集群,则可通过如下步骤引用EMR JAR资源,若EMR Shell节点依赖的资源较大,则无法通过DataWorks页面上传。您可将资源存放至HDFS上,然后在代码中进行引用。
创建EMR JAR资源。
创建EMR JAR资源,详情请参见创建和使用EMR资源。示例将本文《准备初始数据及JAR资源包》中生成的JAR包存储在JAR资源的存放目录emr/jars下。首次使用需要进行一键授权,然后单击点击上传按钮,上传JAR资源。
引用EMR JAR资源。
打开创建的EMR Shell节点,停留在代码编辑页面。
在
节点下,找到待引用资源(示例为onaliyun_mr_wordcount-1.0-SNAPSHOT.jar
),右键选择引用资源。选择引用后,当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节点编辑代码时不支持注释语句。
配置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信息。
如果您需要修改代码中的参数赋值,请单击界面上方工具栏的高级运行。参数赋值逻辑详情请参见运行,高级运行和开发环境冒烟测试赋值逻辑有什么区别。
调度参数使用详情,请参考调度参数支持的格式。
配置任务调度
如果您需要周期性执行创建的节点任务,可以单击节点编辑页面右侧的调度配置,根据业务需求配置该节点任务的调度信息:
配置任务调度的基本信息,详情请参见配置基础属性。
配置时间调度周期、重跑属性和上下游依赖关系,详情请参见时间属性配置说明及配置同周期调度依赖。
说明您需要设置节点的重跑属性和依赖的上游节点,才可以提交节点。
配置资源属性,详情请参见配置资源属性。访问公网或VPC网络时,请选择与目标节点网络连通的调度资源组作为周期调度任务使用的资源组。详情请参见配置资源组与网络连通。
调试代码任务
(可选)选择运行资源组、赋值自定义参数取值。
在工具栏单击图标,在参数对话框选择已调试运行需要使用的独享调度资源组。
如果您的任务代码中有使用调度参数变量,可在此处为变量赋值,用于调试。参数赋值逻辑详情请参见运行,高级运行和开发环境冒烟测试赋值逻辑有什么区别。
保存并运行SQL语句。
在工具栏,单击图标,保存编写的SQL语句,单击图标,运行创建的SQL任务。
(可选)冒烟测试。
如果您希望在开发环境进行冒烟测试,可在执行节点提交,或节点提交后执行,冒烟测试,操作详情请参见执行冒烟测试。