5.2 作业管理接口
5.2.1 新增并执行作业
状态码
状态码 描述
200 正常响应示例。
错误码
请参见错误码。
5.2 作业管理接口
5.2.1 新增并执行作业
功能介绍
在MRS集群中新增并提交一个作业。
需要先在集群详情页的“概览”页签,单击“IAM用户同步”右侧的“同步”进行IAM 用户同步,然后再通过该接口提交作业。
如需使用OBS加密功能,请先参考“MRS用户指南 > 管理现有集群 > 作业管理 > 使用 OBS加密数据运行作业”页面进行相关配置后,再调用API接口运行作业。
所有示例中涉及的OBS路径、样例文件及终端节点和AKSK,请提前准备并在提交请求 时根据实际情况替换。
接口约束
无
调试
您可以在API Explorer中调试该接口。
URI
POST /v2/{project_id}/clusters/{cluster_id}/job-executions
表5-15 路径参数
参数 是否必选 参数类型 描述
project_id 是 String 项目编号。获取方法,请参见获 取项目ID。
cluster_id 是 String 集群ID。获取方法,请参见获取 集群ID。
请求参数
表5-16 请求 Body 参数
参数 是否必选 参数类型 描述
job_type 是 String 作业类型:
● MapReduce
● SparkSubmit
● SparkPython:该类型作业 将转换为SparkSubmit类型 提交,MRS控制台界面的作 业类型展示为
SparkSubmit,通过接口查 询作业列表信息时作业类型 请选择SparkSubmit。
● HiveScript
● HiveSql
● DistCp,导入、导出数据。
● SparkScript
● SparkSql
● Flink
● FlinkSql
job_name 是 String 作业名称,只能由字母、数字、
中划线和下划线组成,并且长度 为1~64个字符。
说明: 不同作业的名称允许相 同,但不建议设置相同。
参数 是否必选 参数类型 描述 arguments 否 Array of
strings 程序执行的关键参数,该参数由 用户程序内的函数指定,MRS只 负责参数的传入。 最多为 150000字符,不能包含;|&>'<
$!"\特殊字符,可为空。 说明:
● 若输入带有敏感信息(如登 录密码)的参数可能在作业 详情展示和日志打印中存在 暴露的风险,请谨慎操作。
● 提交HiveScript或HiveSql类 型的作业时如需以“obs://”
开头格式访问存储在OBS上 的文件,请在Hive服务配置 页面搜索参数
“core.site.customized.confi gs”,新增OBS的endpoint 配置项,参数为
“fs.obs.endpoint”,值请 输入OBS对应的endpoint,
具体请参考终端节点。
properties 否 Map<String,St
ring> 程序系统参数。 最多为2048字 符,不能包含><|'`&!\特殊字 符,可为空。
响应参数
状态码: 200
表5-17 响应 Body 参数
参数 参数类型 描述
job_submit_re
sult JobSubmitRe
sult object 作业执行结果。
表5-18 JobSubmitResult
参数 参数类型 描述
job_id String 作业ID。
state String 作业提交状态。 枚举值:
● COMPLETE:作业提交完成。
● FAILED:作业提交失败。
状态码: 500
表5-19 响应 Body 参数
参数 参数类型 描述
error_code String 错误码 error_msg String 错误描述
请求示例
● 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_type" : "SparkSql",
"job_name" : "SparkScriptTest",
"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_type" : "SparkSql",
"job_name" : "SparkSqlTest",
"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_type" : "SparkPython",
"job_name" : "SparkPythonTest",
"arg" : [ "--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"
}}
● FlinkSql作业请求示例
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", "-u", "SELECT name, COUNT(*) AS cnt FROM (VALUES ('Bob'), ('Alice'), ('Greg'), ('Bob')) AS NameTable(name) GROUP BY name;" ],
"properties" : {
"fs.obs.endpoint" : "obs endpoint", "fs.obs.access.key" : "xxx", "fs.obs.secret.key" : "yyy"
}}
响应示例
状态码: 200 新增并执行作业
{ "job_submit_result" : {
"job_id" : "44b37a20-ffe8-42b1-b42b-78a5978d7e40", "state" : "COMPLETE"
}}
状态码: 500 新增并执行作业失败
{ "job_submit_result" : {
"error_msg" : "不能提交Hive相关作业", "error_code" : "0168"
}}
状态码
状态码 描述
200 新增并执行作业
500 新增并执行作业失败
错误码
请参见错误码。