
# SparkJob作业接口应用示例
#### 概述
本文指导用户通过调用API的方式，执行Spark作业的完整流程，包括启动Spark作业、查询作业状态和详情、查询spark作业列表等。
本流程假设终端租户已经在Console界面完成AI DataLake的服务授权，且已创建工作空间和Spark端点。API的调用方法请参见[如何调用API](https://support.huaweicloud.com/api-aidatalake/aidatalake_02_0004.html)。
#### 前提条件
- workspace_id：工作空间ID，可在控制台的工作空间管理页面查看。
- endpoint_name：Spark端点名称，可在控制台的端点管理页面查看，或参考[查询所有端点列表 - ListV2AllEndpoints](https://support.huaweicloud.com/api-aidatalake/ListV2AllEndpoints.html)获取。
 
 #### 启动Spark作业
调用启动Spark作业接口，提交Spark作业，同时记录接口返回的"job_id"。
- 请求示例 POST /v2/workspaces/{workspace_id}/spark-jobs
  {workspace_id}：工作空间ID，用于资源隔离。
  

- Body：
  ```
  {
    "name" : "spark-jar-job-example",
    "endpoint_name" : "spark-endpoint",
    "job_config" : {
      "type" : "spark_jar_job",
      "main_class" : "com.example.SparkJobDriver",
      "main_jar" : "obs://bucket/path/job.jar",
      "main_args" : [ "--input", "obs://bucket/input", "--output", "obs://bucket/output" ]
    },
    "resource_config" : {
      "executor_number" : 2,
      "driver_resource_spec" : {
        "cpu" : 2000,
        "memory" : 4096
      },
      "executor_resource_spec" : {
        "cpu" : 2000,
        "memory" : 4096
      }
    }
  }
  ```
  
- 响应示例：
  ```
  {
         "job_id": "1ee7d9db-90ec-xxxx-xxxx-0de936dade77"
  }
  ```
  
 
#### 查询Spark作业的状态
调用查询Spark作业状态接口，查询作业状态，等待作业状态变为SUCCEED，表示作业执行完成。
- 请求示例： GET /v2/workspaces/{workspace_id}/spark-jobs/{job_id}/state
  - {workspace_id}：工作空间ID，用于资源隔离。
  
  - {job_id}：[启动Spark作业]响应信息中的"job_id"参数值。
   

- 响应示例：
  ```
  {  
         "job_id": "1ee7d9db-90ec-xxxx-xxxx-0de936dade77",
         "state": "SUCCEED"
  }
  ```
  
 
#### 查询Spark作业详情
调用查看Spark作业详情接口，查看作业的完整配置信息和执行结果。
- 请求示例： GET /v2/workspaces/{workspace_id}/spark-jobs/{job_id}
  - {workspace_id}：工作空间ID，用于资源隔离。
  
  - {job_id}：[启动Spark作业]响应信息中的"job_id"参数值。
   
- 响应示例：
  ```
  {
    "job_id" : "1ee7d9db-90ec-xxxx-xxxx-0de936dade77",
    "client_token" : "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
    "name" : "spark-jar-job-example",
    "endpoint_name" : "spark-endpoint",
    "state" : "SUCCEED",
    "job_config" : {
      "type" : "spark_jar_job",
      "main_class" : "com.example.SparkJobDriver",
      "main_jar" : "obs://bucket/path/job.jar",
      "main_args" : [ "--input", "obs://bucket/input", "--output", "obs://bucket/output" ]
    },
    "resource_config" : {
      "executor_number" : 2,
      "driver_resource_spec" : {
        "cpu" : 2000,
        "memory" : 4096
      },
      "executor_resource_spec" : {
        "cpu" : 2000,
        "memory" : 4096
      }
    },
    "create_time" : 1698776400000,
    "start_time" : 1698776450000,
    "end_time" : 1698776700000,
    "create_user" : {
      "user_id" : "user123",
      "user_name" : "admin"
    },
    "log_url" : "https://obs.example.com/logs/spark-job.log"
  }
  ```
  
 
#### 取消Spark作业执行
若作业执行异常需要终止，调用取消Spark作业接口取消正在执行的作业。仅支持取消处于QUEUED或RUNNING状态的作业。
- 请求示例： POST /v2/workspaces/{workspace_id}/spark-jobs/{job_id}/cancel
  - {workspace_id}：工作空间ID，用于资源隔离。
  
  - {job_id}：[启动Spark作业]响应信息中的"job_id"参数值。
   
- 响应示例：无响应体，HTTP状态码204表示取消成功。
 
