作业编辑

更新时间:
复制为 MD 格式

在项目中,您可以通过创建作业来进行任务开发。本文为您介绍作业编辑相关的创建、设置和运行等操作。

背景信息

本文为您提供作业编辑的相关操作,具体如下:

前提条件

已创建项目或已被加入到项目中,详情请参见项目管理

新建作业

  1. 进入数据开发的项目列表页面。

    1. 通过阿里云账号登录阿里云E-MapReduce控制台

    2. 在顶部菜单栏处,根据实际情况选择地域和资源组

    3. 单击上方的数据开发页签。

  2. 单击待编辑项目所在行的作业编辑

  3. 新建作业。

    1. 在页面左侧,在需要操作的文件夹上单击右键,选择新建作业

      说明

      您还可以通过在文件夹上单击右键,进行新建子文件夹重命名文件夹删除文件夹操作。

    2. 新建作业对话框中,输入作业名称作业描述,从作业类型列表中,选择新建的作业类型。

      目前E-MapReduce数据开发支持的作业类型有:Shell、Hive、Hive SQL、Spark、SparkSQL、Spark Shell、Spark Streaming、MR、Sqoop、Pig 、Flink、Streaming SQL、Presto SQLImpala SQL。

      说明

      创建作业时作业类型一经确定,不能修改。

    3. 单击确定

      作业创建成功后,就可以做相应的作业设置、作业编辑等操作了。

设置作业

各类作业类型的开发与设置,请参见作业部分。以下内容介绍的是作业的基础设置高级设置共享库告警设置

  1. 作业编辑页面,单击右上角的作业设置

  2. 作业设置面板,设置基础信息。

    配置项

    说明

    作业概要

    作业名称

    您创建作业的名称。

    作业类型

    您创建作业的类型。

    失败重试次数

    作业运行失败后的重试次数,可以选择的重试次数范围为:0~5次。

    失败策略

    作业运行失败后支持的策略如下:

    • 暂停当前工作流:作业运行失败后,不再继续执行当前工作流。

    • 继续执行下一个作业:作业运行失败后,继续执行下一个作业。

    根据业务情况,可以打开或者关闭使用最新作业内容和参数开关。

    • 关闭:作业失败后重新执行时,使用初始作业内容和参数生成作业实例。

    • 打开:作业失败后重新执行时,使用最新的作业内容和参数生成作业实例。

    作业描述

    单击右侧的编辑,可以修改作业的描述。

    运行资源

    单击右侧的加号图标,添加作业执行所依赖的JAR包或UDF等资源。

    您需要将资源先上传至OSS,然后在运行资源中直接添加即可。

    配置参数

    指定作业代码中所引用的变量的值。您可以在代码中引用变量,格式为${变量名}

    单击右侧的加号图标,添加KeyValue,根据需要选择是否为Value进行加密。其中,Key为变量名,Value为变量的值。另外,您还可以根据调度启动时间在此配置时间变量,详情请参见作业日期设置

  3. 作业设置面板,单击高级设置页签。

    配置项

    说明

    模式

    • 提交节点包括以下两种模式,详情请参见作业提交模式说明

      • Worker节点提交:作业通过LauncherYARN上分配资源进行提交。

      • Header/Gateway节点提交:作业在分配的机器上直接运行。

    • 预期最大运行时长:0~10800秒。

    环境变量

    添加作业执行的环境变量,也可以在作业脚本中直接export环境变量。

    • 示例一:一个Shell类型的任务,内容是echo ${ENV_ABC}。如果此处设置了一个环境变量 ENV_ABC=12345,则echo命令的输出结果为12345

    • 示例二:一个Shell类型的作业,内容是java -jar abc.jar,其中abc.jar的内容如下:

      public static void main(String[] args) {System.out.println(System.getEnv("ENV_ABC"));}

      返回的结果是12345。此处环境变量的设置相当于执行了以下脚本。

      export ENV_ABC=12345
      java -jar abc.jar

    调度参数

    设置作业运行YARN队列、内存、虚拟核数、优先级和执行用户等信息。当未设置这些参数时,作业会直接采用Hadoop集群的默认值。

    说明

    内存设置用于设置启动器Launcher的内存配额。

  4. 作业设置面板,单击共享库页签。

    依赖库区域,填写库列表

    执行作业需要依赖一些数据源相关的库文件。E-MapReduce将这些库以依赖库的形式发布在调度服务的仓库中,在创建作业时需要指定使用哪个版本的依赖库。您只需设置相应的依赖库版本,例如sharedlibs:streamingsql:datasources-bundle:2.0.0

  5. 作业设置面板,单击告警设置页签。

    配置项

    说明

    执行失败

    设置作业执行失败时,是否通知到用户告警组或钉钉告警组。

    启动超时

    设置作业启动超时时,是否通知到用户告警组或钉钉告警组。

    作业执行超时

    设置作业执行超时时,是否通知到用户告警组或钉钉告警组。

在作业中添加注解

进行数据开发时,您可以通过在作业内容里添加特定的注解来添加作业参数。注解的格式如下。

!!! @<注解名称>: <注解内容>
说明

!!!必须顶格,并且每行一个注解。

当前支持的注解如下。

注解名称

说明

示例

rem

表示一行注释。

!!! @rem: 这是一行注释

env

添加一个环境变量。

!!! @env: ENV_1=ABC

var

添加一个自定义变量。

!!! @var: var1="value1 and \"one string end with 3 spaces\" "
!!! @var: var2=${yyyy-MM-dd}

resource

添加一个资源文件。

!!! @resource: oss://bucket1/dir1/file.jar

sharedlibs

添加依赖库,仅对Streaming SQL作业有效。包含多个依赖库时,依赖库间用英文半角逗号(,)隔开。

!!! @sharedlibs: sharedlibs:streamingsql:datasources-bundle:1.7.0,...

scheduler.queue

设置提交队列。

!!! @scheduler.queue: default

scheduler.vmem

设置申请内存,单位MB。

!!! @scheduler.vmem: 1024

scheduler.vcores

设置申请的核数。

!!! @scheduler.vcores: 1

scheduler.priority

设置申请的优先级,取值范围为1~100。

!!! @scheduler.priority: 1

scheduler.user

设置提交用户名。

!!! @scheduler.user: root
重要

使用注解时,需要注意以下事项:

  • 无效注解将被自动跳过。例如,设置未知注解、注解内容不符合预期等。

  • 注解中的作业参数优先级高于作业配置中的参数,如果作业注解和作业配置中有相同的参数,则以作业注解为准。

作业注解示例如下:

运行作业

  1. 执行作业。

    1. 在新建的作业页面,单击右上方的运行来执行作业。

    2. 运行作业对话框中,选择资源组和执行集群。

    3. 单击确定

  2. 查看作业运行日志。

    1. 作业运行后,您可以在日志页签中查看作业运行的日志。

      2021-09-02 16:37:54.653 [main] INFO  c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-xxx] submit user: hadoop
      2021-09-02 16:37:54.654 [main] INFO  c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-3xxx] envs(override): {EMR_FLOW_AGENT_JOB_ID=FJI-xxx, PATH=/mnt/disk3/yarn/usercache/hadoop/appcache/application_1630311773326_0022/container_1630311773326_0022_01_000001, EMR_FLOW_CLUSTER_ID=C-xxx, FLOW_SKIP_SQL_ANALYZE=false, EMR_FLOW_JOB_INSTANCE_ID="xxx", EMR_FLOW_NODE_INSTANCE_ID="xxx", EMR_FLOW_JOB_ID="xxx"}
      2021-09-02 16:37:54.654 [main] INFO  c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][xxx] Executing command line: [bash, -c, echo 234]
      2021-09-02 16:37:54.655 [main] INFO  c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-3xxx] Shell Executor type: com.aliyun.emr.flow.agent.common.shell.JavaShellExecutor.
      ===================JOB OUTPUT BEGIN===================
      234
      ===================JOB OUTPUT END=====================
      2021-09-02 16:37:55.159 [main] INFO  c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [COMMAND][FJI-3E78xxx] Finished command line, exit code=0.
      Thu Sep 02 16:37:55 CST 2021 [JobLauncherRunner] INFO Closing job launcher ...
      2021-09-02 16:37:55.161 [main] INFO  c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-3E788xxx] Closing ...
      2021-09-02 16:37:55.162 [main] INFO  c.a.e.f.a.j.l.impl.CommonShellJobLauncherImpl - [FJI-3E788F6xxx] Stopping command executor ...
      Thu Sep 02 16:37:55 CST 2021 [YarnJobLauncherAM] INFO Closing launcher am ...
      2021-09-02 16:37:55.167 [main] INFO  o.a.hadoop.yarn.client.api.impl.AMRMClientImpl - Waiting for application to be successfully unregistered.
      Thu Sep 02 16:37:55 CST 2021 [YarnJobLauncherAM] INFO Emr flow launcher is quit.
      2021-09-02 16:37:55.385 [Shutdown-FJI-3E788F67373BAECD_0] INFO  c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-3E78xxx] Call shutdown hook.
      2021-09-02 16:37:55.385 [Shutdown-FJI-3E788F67373BAECD_0] INFO  c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-378xxx] Closing ...
      2021-09-02 16:37:55.385 [Shutdown-FJI-3E788F67373BAECD_0] INFO  c.a.emr.flow.agent.jobs.launcher.JobLauncherBase - [FJI-3E78xxx] This launcher is closed already, skip.
      ######END_OF_LOG######
    2. 单击运行记录页签,可以查看作业实例的运行情况。

    3. 单击目标运行记录右侧的详情,跳转到运维中心,可以查看作业实例的详细信息。

作业可执行操作

作业编辑区域,您可以在作业名称上单击右键,执行如下操作。

操作

说明

克隆作业

在相同文件夹下,克隆当前作业的配置,生成一个新的作业。

重命名作业

重新命名作业名称。

删除作业

只有在作业没有关联工作流,或关联的工作流没有在运行或调度时,才可以被删除。

作业提交模式说明

Spark-Submit进程(在数据开发模块中为启动器Launcher)是Spark的作业提交命令,用于提交Spark作业,一般占用600 MB以上内存。作业设置面板中的内存设置,用于设置Launcher的内存配额。

新版作业提交模式包括以下两种。

作业提交模式

描述

Header/Gateway节点提交

Spark-Submit进程运行在Header节点上,不受YARN监控。Spark-Submit内存消耗大,作业过多会造成Header节点资源紧张,导致整个集群不稳定。

Worker节点提交

Spark-Submit进程运行在Worker节点上,占用YARN的一个Container,受YARN监控。此模式可以缓解Header节点的资源使用。

E-MapReduce集群中,作业实例消耗内存计算方式如下。

作业实例消耗内存 = Launcher消耗内存 + 用户作业(Job)消耗内存

Spark作业中,用户作业(Job)消耗内存又可以进一步细分,计算方式如下。

Job消耗内存 = Spark-Submit(指逻辑模块,非进程)消耗内存 + Driver端消耗内存 + Executor端消耗内存

作业配置不同,Driver端消耗的物理内存的位置也不同,详细内容如下表。

Spark使用模式

Spark-SubmitDriver

进程情况

Yarn-Client模式

作业提交进程使用LOCAL模式

Spark-SubmitDriver端是在同一个进程中。

作业提交进程是Header节点上的一个进程,不受YARN监控。

作业提交进程使用YARN模式

作业提交进程是Worker节点上的一个进程,占用YARN的一个Container,受YARN监控。

Yarn-Cluster模式

Driver端是独立的一个进程,与Spark-Submit不在一个进程中。

Driver端占用YARN的一个Container。