# 通过API方式连接Spark端点并提交作业
在AI DataLake控制台上创建Spark端点后，即可向该端点提交Spark作业，利用端点的计算能力处理数据。目前支持通过API方式提交SQL作业、Python作业和JAR作业。
#### 前提条件
- 已获取工作空间ID 。 登录[AI DataLake管理控制台](https://console.huaweicloud.com/fabric/)，在"工作空间管理"页面找到目标工作空间ID。
  
- 已获取Spark端点名称（endpoint_name）。 登录[AI DataLake管理控制台](https://console.huaweicloud.com/fabric/)，在"引擎端点"下的"批处理引擎Spark"页面找到目标Spark端点名称。
  
- 已根据作业类型编写对应的作业文件，并将编写好的文件上传至OBS桶，记录其OBS路径。
 
#### 注意事项
对接LakeFormation场景下，IAM账号名不能包含中划线（-），否则Spark作业提交将报错失败。
#### 涉及API
- [执行SparkSql作业 - RunSparkSql](https://support.huaweicloud.com/api-aidatalake/RunSparkSql.html)
- [启动Spark作业 - RunSparkJob](https://support.huaweicloud.com/api-aidatalake/RunSparkJob.html)
 
#### 提交SparkSQL作业
使用Postman等工具，调用[执行SparkSql作业 - RunSparkSql](https://support.huaweicloud.com/api-aidatalake/RunSparkSql.html)API接口提交SparkSQL作业，代码示例如下。
```
POST /v2/workspaces/{workspace_id}/spark-sqls
{
  "endpoint_name": "spark-endpoint-01",
  "catalog_context": {
  "catalog_name": "hive_catalog",
  "database_name": "default"
  },
  "statement": "SELECT * FROM table_name LIMIT 100",
  "timeout": {
  "queued_timeout": 180,
  "running_timeout": 720
  }
}
```
表1SparkSQL作业参数说明 
| 参数            | 说明     | 示例                                   |
|:---|:---|:---|
| endpoint_name | 端点名称   | spark-endpoint-01                     |
| catalog_name   | 数据目录名称  | hive_catalog                         |
| database_name  | 数据库名称   | default                             |
| statement       | SQL查询语句 | SELECT \* FROM table_name LIMIT 100 |
| queued_timeout  | 排队超时     | 180                                   |
| running_timeout | 运行超时  | 720                                  |
   
#### 提交Spark Jar作业
使用Postman等工具，调用[启动Spark作业 - RunSparkJob](https://support.huaweicloud.com/api-aidatalake/RunSparkJob.html)API接口提交Spark Jar作业，代码示例如下。
```
POST /v2/workspaces/{workspace_id}/spark-jobs
{
  "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"
    ]
  },
  "image": {
    "image_id": "dd877a59-5cbd-44c5-b8a7-dc464cca****",
    "image_version_id": "01ae8ee6-af8a-48a8-895b-8d4a70bf****"
  },
  "resource_config": {
    "executor_number": 2,
    "driver_resource_spec": {
      "cpu": 2000,
      "memory": 4096
    },
    "executor_resource_spec": {
      "cpu": 2000,
      "memory": 4096
    }
  }
}
```
表2Spark Jar作业参数说明 
| 参数                     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | 示例                                                                                                                                                                               |
|:---|:---|:---|
| name                   | 作业名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | spark-jar-job-example                                                                                                                                                           |
| endpoint_name         | 端点名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | spark-endpoint                                                                                                                                                                  |
| type                    | 作业类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         | spark_jar_job                                                                                                                                                                    |
| main_class             | 主类名称，用于指定Spark Jar作业的入口类。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | com.example.SparkJobDriver                                                                                                                                                       |
| main_jar               | 主Jar包路径                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        | obs://bucket/path/job.jar                                                                                                                                                       |
| main_args            | 入口类参数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             | "--input", "obs://bucket/input", "--output", "obs://bucket/output" |
| image_id               | 镜像ID，请通过调用[查看自定义镜像列表](https://support.huaweicloud.com/api-aidatalake/ListV2TenantImages.html)接口查询获取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           | dd877a59-5cbd-44c5-b8a7-dc464cca\*\*\*\*                                                                                                                                       |
| image_version_id       | 说明： 如果端点的资源使用模式为混合模式和按需弹性，且当前所选镜像版本已创建镜像快照，选择该版本镜像时会自动关联对应的镜像快照，端点启动时自动使用快照创建镜像资源，无需额外操作。创建镜像快照的具体操作，请参见[镜像加速](https://support.huaweicloud.com/usermanual-aidatalake/aidatalake_01_0108.html)。 镜像版本。查看镜像版本的具体操作如下： 1. 在AI DataLake管理控制台页面的左侧导航栏，选择"镜像管理"。  2. 在"预置镜像"或"自定义镜像"页签下，单击镜像名称。  3. 查看预置镜像或者自定义镜像的版本。 - 查看预置镜像版本：单击"版本"页签，在"镜像版本"列，查看预置镜像的版本。  - 查看自定义镜像版本：在"镜像版本"列，查看自定义镜像的版本。 如果没有自定义镜像，请手动注册。具体操作，请参见[注册自定义镜像](https://support.huaweicloud.com/usermanual-aidatalake/aidatalake_01_0059.html#section2)。      | 20e48735-f273-413c-a0f5-4cd4544f\*\*\*\*                                                                                                                                           |
| executor_number         | 执行器数量                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          | 2                                                                                                                                                                                |
| driver_resource_spec   | Driver资源                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 2核4GB                                                                                                                                                                           |
| executor_resource_spec | Executor资源                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | 2核4GB                                                                                                                                                                              |
   
#### 提交Spark Python作业
使用Postman等工具，调用[启动Spark作业 - RunSparkJob](https://support.huaweicloud.com/api-aidatalake/RunSparkJob.html)API接口提交Spark Python作业，代码示例如下。
```
POST /v2/workspaces/{workspace_id}/spark-jobs
{
  "name": "python-job-example",
  "endpoint_name": "spark-endpoint",
  "job_config": {
    "type": "spark_python_job",
    "main_python_file": "obs://bucket/path/job.py",
    "main_args": [
      "--input-path",
      "obs://bucket/input"
    ]
  },
  "image": {
    "image_id": "dd877a59-5cbd-44c5-b8a7-dc464cca****",
    "image_version_id": "01ae8ee6-af8a-48a8-895b-8d4a70bf****"
  },
  "resource_config": {
    "executor_number": 2,
    "driver_resource_spec": {
      "cpu": 2000,
      "memory": 4096
    },
    "executor_resource_spec": {
      "cpu": 2000,
      "memory": 4096
    }
  }
}
```
表3Spark Python参数说明 
| 参数                     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       | 示例                                       |
|:---|:---|:---|
| name                  | 作业名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | python-job-example                      |
| endpoint_name          | 端点名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     | spark-endpoint                           |
| type                     | 作业类型                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    | spark_python_job                         |
| main_python_file       | Python路径                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | obs://bucket/path/job.py                   |
| --input-path           | 入口参数                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  | obs://bucket/input                       |
| image_id               | 镜像ID，请通过调用[查看自定义镜像列表](https://support.huaweicloud.com/api-aidatalake/ListV2TenantImages.html)接口查询获取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | dd877a59-5cbd-44c5-b8a7-dc464cca\*\*\*\* |
| image_version_id      | 说明： 如果端点的资源使用模式为混合模式和按需弹性，且当前所选镜像版本已创建镜像快照，选择该版本镜像时会自动关联对应的镜像快照，端点启动时自动使用快照创建镜像资源，无需额外操作。创建镜像快照的具体操作，请参见[镜像加速](https://support.huaweicloud.com/usermanual-aidatalake/aidatalake_01_0108.html)。 镜像版本。查看镜像版本的具体操作如下： 1. 在AI DataLake管理控制台页面的左侧导航栏，选择"镜像管理"。  2. 在"预置镜像"或"自定义镜像"页签下，单击镜像名称。  3. 查看预置镜像或者自定义镜像的版本。 - 查看预置镜像版本：单击"版本"页签，在"镜像版本"列，查看预置镜像的版本。  - 查看自定义镜像版本：在"镜像版本"列，查看自定义镜像的版本。 如果没有自定义镜像，请手动注册。具体操作，请参见[注册自定义镜像](https://support.huaweicloud.com/usermanual-aidatalake/aidatalake_01_0059.html#section2)。      | 20e48735-f273-413c-a0f5-4cd4544f\*\*\*\*  |
| executor_number        | 执行器数量                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | 2                                        |
| driver_resource_spec   | Driver资源                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 | 2核4GB                                   |
| executor_resource_spec | Executor资源                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               | 2核4GB                                    |
   
#### 相关操作
- [取消SparkSql作业执行 - CancelSparkSql](https://support.huaweicloud.com/api-aidatalake/CancelSparkSql.html)和[取消Spark作业执行 - CancelSparkJob](https://support.huaweicloud.com/api-aidatalake/CancelSparkJob.html)
- [基于PySpark的数据处理](https://support.huaweicloud.com/qs-aidatalake/aidatalake_01_0005.html)
 
