更新时间:2024-08-07 GMT+08:00

新增并执行作业

功能介绍

在MRS集群中新增并提交一个作业。

  • 如需使用OBS加密功能,请先参考使用OBS加密数据运行作业页面进行相关配置后,再调用API接口运行作业。
  • 需要先在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“单击同步”进行IAM用户同步,然后再通过该接口提交作业。

接口约束

调试

您可以在API Explorer中调试该接口,支持自动认证鉴权。API Explorer可以自动生成SDK代码示例,并提供SDK代码示例调试功能。

URI

POST /v2/{project_id}/clusters/{cluster_id}/job-executions
表1 路径参数

名称

是否必选

参数类型

说明

project_id

String

参数解释:

项目编号。获取方法,请参见获取项目ID

约束限制:

不涉及

取值范围:

只能由英文字母和数字组成,且长度为[1-64]个字符。

默认取值:

不涉及

cluster_id

String

参数解释:

集群ID。获取方法,请参见获取集群ID

约束限制:

不涉及

取值范围:

只能由英文字母、数字以及“_”和“-”组成,且长度为[1-64]个字符。

默认取值:

不涉及

请求参数

表2 请求参数说明

参数名

是否必选

参数类型

说明

job_type

String

参数解释:

作业类型。

约束限制:

不涉及

取值范围:

  • MapReduce
  • SparkSubmit
  • SparkPython:该类型作业将转换为SparkSubmit类型提交,MRS控制台界面的作业类型展示为SparkSubmit,通过接口查询作业列表信息时作业类型请选择SparkSubmit。
  • HiveScript
  • HiveSql
  • DistCp,导入、导出数据。
  • SparkScript
  • SparkSql
  • Flink

默认取值:

不涉及

说明:

只有包含Spark、Hive和Flink组件的集群才能新增Spark、Hive和Flink类型的作业。

job_name

String

参数解释:

作业名称。

约束限制:

不涉及

取值范围:

只能由英文字母、数字以及“_”和“-”组成,且长度为[1-64]个字符。

不同作业的名称允许相同,但不建议设置相同。

默认取值:

不涉及

arguments

Array of strings

参数解释:

程序执行的关键参数,该参数由用户程序内的函数指定,MRS只负责参数的传入。

约束限制:

最多为150000字符,不能包含;|&>'<$!\\特殊字符,可为空。

说明:
  • 若输入带有敏感信息(如登录密码)的参数可能在作业详情展示和日志打印中存在暴露的风险,请谨慎操作。
  • 针对MRS 1.9.2及之后版本的集群,存储在OBS上的文件路径支持以“obs://”开头格式。如需使用该格式提交HiveScript或HiveSql类型的作业,请先在集群详情页面单击“组件管理 > Hive > 服务配置”,参数类别设置为“全部配置”,搜索参数“core.site.customized.configs”,新增OBS的endpoint配置项,参数为“fs.obs.endpoint”,值请输入OBS对应的endpoint,具体请参考终端节点
  • 针对MRS 3.x及之后版本的集群,存储在OBS上的文件路径支持以“obs://”开头格式。如需使用该格式提交HiveScript或HiveSql类型的作业,请先在集群详情页面单击“组件管理 > Hive > 服务配置”,“基础配置”切换为“全部配置”,搜索参数“core.site.customized.configs”,新增OBS的endpoint配置项,参数为“fs.obs.endpoint”,值请输入OBS对应的endpoint,具体请参考终端节点

properties

Map<String,String>

参数解释:

程序系统参数。

约束限制:

最多为2048字符,不能包含><|'`&!\特殊字符,可为空。

响应参数

状态码:200

表3 响应Body参数

参数名

参数类型

说明

job_submit_result

JobSubmitResult object

参数解释:

作业执行结果,详细参数说明请参考表4

表4 JobSubitResult参数说明

参数名

参数类型

说明

job_id

String

参数解释:

作业ID。

取值范围:

不涉及

state

String

参数解释:

作业提交状态。

取值范围:

  • COMPLETE:作业提交完成。
  • FAILED:作业提交失败。

状态码:400

表5 响应Body参数

参数名

参数类型

说明

error_code

String

参数解释:

错误码。

取值范围:

不涉及

error_msg

String

参数解释:

错误描述。

取值范围:

不涉及

请求示例

所有示例中涉及的OBS路径、样例文件及终端节点和AKSK,请提前准备并在提交请求时根据实际情况替换。

  • 新增一个MapReduce作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"MapReduceTest",
        "job_type":"MapReduce",
        "arguments":[
            "obs://obs-test/program/hadoop-mapreduce-examples-x.x.x.jar",
            "wordcount",
            "obs://obs-test/input/",
            "obs://obs-test/job/mapreduce/output"
        ],
        "properties":{
            "fs.obs.endpoint":"obs endpoint",
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    }
  • 新增一个SparkSubmit作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"SparkSubmitTest",
        "job_type":"SparkSubmit",
        "arguments":[
            "--master",
            "yarn",
            "--deploy-mode",
            "cluster",
            "--py-files",
            "obs://obs-test/a.py",
            "--conf",
            "spark.yarn.appMasterEnv.PYTHONPATH=/tmp:$PYTHONPATH",
            "--conf",
            "spark.yarn.appMasterEnv.aaa=aaaa",
            "--conf",
            "spark.executorEnv.aaa=executoraaa",
            "--properties-file",
            "obs://obs-test/test-spark.conf",
            "obs://obs-test/pi.py",
            "100000"
        ],
        "properties":{
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    }
  • 新增一个HiveScript作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"HiveScriptTest",
        "job_type":"HiveScript",
        "arguments":[
            "obs://obs-test/sql/test_script.sql"
        ],
        "properties":{
            "fs.obs.endpoint":"obs endpoint",
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    }
  • 新建一个HiveSql作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
      "job_name" : "HiveSqlTest",
      "job_type" : "HiveSql",
      "arguments" : [ "DROP TABLE IF EXISTS src_wordcount;\ncreate external table src_wordcount(line string) row format delimited fields terminated by \"\\n\" stored as textfile location \"obs://donotdel-gxc/input/\";\ninsert into src_wordcount values(\"v1\")" ],
      "properties" : {
        "fs.obs.endpoint" : "obs endpoint",
        "fs.obs.access.key" : "xxx",
        "fs.obs.secret.key" : "yyy"
      }
    }
  • 新建一个DistCp作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"DistCpTest",
        "job_type":"DistCp",
        "arguments":[
            "obs://obs-test/DistcpJob/",
            "/user/test/sparksql/"
        ],
        "properties":{
            "fs.obs.endpoint":"obs endpoint",
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    }
  • 新建一个SparkScript作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"SparkScriptTest",
        "job_type":"SparkScript",
        "arguments":[
            "op-key1",
            "op-value1",
            "op-key2",
            "op-value2",
            "obs://obs-test/sql/test_script.sql"
        ],
        "properties":{
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    } 
  • 新建一个SparkSql作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"SparkSqlTest",
        "job_type":"SparkSql",
        "arguments":[
            "op-key1",
            "op-value1",
            "op-key2",
            "op-value2",
            "create table student_info3 (id string,name string,gender string,age int,addr string);"
        ],
        "properties":{
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    } 
  • 新建一个Flink作业
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
        "job_name":"FlinkTest",
        "job_type":"Flink",
        "arguments":[
            "run",
            "-d",
            "-ynm",
            "testExcutorejobhdfsbatch",
            "-m",
            "yarn-cluster",
            "hdfs://test/examples/batch/WordCount.jar"
        ],
        "properties":{
            "fs.obs.endpoint":"obs endpoint",
            "fs.obs.access.key":"xxx",
            "fs.obs.secret.key":"yyy"
        }
    }
  • 新增一个SparkPython作业(该类型作业将转换为SparkSubmit类型提交,MRS控制台界面的作业类型展示为SparkSubmit,通过接口查询作业列表信息时作业类型请选择SparkSubmit。)
    POST https://{endpoint}/v2/{project_id}/clusters/{cluster_id}/job-executions
    
    {
      "job_name" : "SparkPythonTest",
      "job_type" : "SparkPython",
      "arguments" : [ "--master", "yarn", "--deploy-mode", "cluster", "--py-files", "obs://obs-test/a.py", "--conf", "spark.yarn.appMasterEnv.PYTHONPATH=/tmp:$PYTHONPATH", "--conf", "spark.yarn.appMasterEnv.aaa=aaaa", "--conf", "spark.executorEnv.aaa=executoraaa", "--properties-file", "obs://obs-test/test-spark.conf", "obs://obs-test/pi.py", "100000" ],
      "properties" : {
        "fs.obs.access.key" : "xxx",
        "fs.obs.secret.key" : "yyy"
      }
    }

响应示例

状态码:200

  • 成功示例
    {
      "job_submit_result":{
          "job_id":"44b37a20-ffe8-42b1-b42b-78a5978d7e40",
          "state":"COMPLETE"
      }
    }

状态码:400

  • 失败示例
    {
    "error_msg":"不能提交Hive相关作业",
    "error_code":"0168"
    }

状态码

状态码请参见状态码

错误码

请参见错误码