重要说明:

IBM Cloud Pak® for Data 4.7 版本将于 2025 年 7 月 31 日结束支持(EOS)。 欲了解更多信息,请参阅 IBM Cloud Pak for Data 版本 4.X 的停止服务公告

在 IBM Cloud Pak for Data 4.7 版本支持结束之前,升级到 IBM Software Hub 5.1 版本。 更多信息,请参阅 IBM Software Hub 版本 5.1 文档中的升级 IBM Software Hub。

Spark 作业 API 语法、参数和返回码

您通常使用 cURL 命令提交 Spark 作业。

Spark 作业 cURL 命令语法为:

curl -k -X POST <V4_JOBS_API_ENDPOINT> -H "Authorization: Bearer <ACCESS_TOKEN>" -d @input.json

Spark 作业 cURL 选项:

  • -k 选项表示跳过证书验证,因为服务实例 Web 站点使用自签名 SSL 证书。
  • <V4_JOBS_API_ENDPOINT> 是要用于提交 Spark 作业的实例的端点。 请注意, IBM Cloud Pak for Data 服务器上可以存在多个 Analytics Engine Powered by Apache Spark 实例,每个实例都有自己的端点用于提交作业。 要获取所供应实例的 Spark 作业端点,请参阅 管理服务实例
  • -H 选项是标头参数。 标头参数是键值对。 必须在授权标头中发送不记名令牌 (<ACCESS_TOKEN>)。 要获取服务实例的访问令牌,请参阅 生成访问令牌
  • -d 选项定义要在 POST 请求中发送到服务器的有效内容数据。 请参阅下面的输入有效内容示例。
注: POST 方法在应用程序初始验证后返回。 将异步处理作业请求; 首先创建 SparkContext ,然后执行应用程序。 可以使用 GET 方法来访存应用程序的当前状态。 请参阅 [Spark 作业状态] (spark-jobs.html#spark-job-status)。

Python 作业的输入有效内容示例:

{
"application_details": {
        "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
        "arguments": ["/opt/ibm/spark/examples/src/main/resources/people.txt"],
        "conf": {
                "spark.app.name": "MyJob",
                "spark.eventLog.enabled": "true",
                "spark.driver.memory": "4G",
                "spark.driver.cores": 1,
                "spark.executor.memory": "4G",
                "spark.executor.cores": 1,
                "ae.spark.executor.count": 1
                },
        "env": {
                "SAMPLE_ENV_KEY": "SAMPLE_VALUE"
                }
        }
}

R 作业的输入有效内容示例:

{
"application_details": {
        "application": "/opt/ibm/spark/examples/src/main/r/dataframe.R",
        "conf": {
                "spark.app.name": "MyJob",
                "spark.eventLog.enabled": "true",
                "spark.driver.memory": "4G",
                "spark.driver.cores": 1,
                "spark.executor.memory": "4G",
                "spark.executor.cores": 1,
                "ae.spark.executor.count": 1
                },
        "env": {
                "SAMPLE_ENV_KEY": "SAMPLE_VALUE"
                }
        }
}

Scala 作业的输入有效内容示例:

{
"application_details": {
        "application": "/opt/ibm/spark/examples/jars/spark-examples*.jar",
        "arguments": ["1"],
        "class": "org.apache.spark.examples.SparkPi",
        "conf": {
                "spark.app.name": "MyJob",
                "spark.eventLog.enabled": "true",
                "spark.driver.memory": "4G",
                "spark.driver.cores": 1,
                "spark.executor.memory": "4G",
                "spark.executor.cores": 1,
                "ae.spark.executor.count": 1
                },
        "env": {
                "SAMPLE_ENV_KEY": "SAMPLE_VALUE"
                }
        }
}

如果提交作业成功,那么返回的响应为:

{
"application_id": "<application_id>",
"state": "ACCEPTED"
}

提示:

  • 保存返回的 "application_id" 值以获取作业的状态或停止作业。
  • 保存返回值 "spark_application_id" 以监视和分析 Spark 历史记录服务器上的 Spark 应用程序。

Spark 作业 API 参数

可以在 Spark 作业 API 中使用的参数如下所示:

表 1. Spark 作业 API 的参数
名称 子属性 必选/可选 类型 描述
应用程序详细信息 必需 对象 指定 Spark 应用程序详细信息
application 必需 字符串 指定 Spark 应用程序文件,即 Python, R 或 scala 作业文件的文件路径
参量 可选 字符串 [] 指定应用程序参数
conf 可选 键值 JSON 对象 指定覆盖预定义值的 Spark 配置值。 请参阅 缺省 Spark 配置参数和环境变量 部分,以获取 Spark 服务定义的缺省配置参数。 请参阅 Apache Spark 配置 ,以了解 Apache Spark支持的配置参数。
env 可选 键值 JSON 对象 指定作业所需的 Spark 环境变量。 请参阅 缺省 Spark 配置参数和环境变量 部分,以了解 Spark 服务定义的缺省环境变量。 请参阅 Apache Spark 环境变量 ,以了解 Apache Spark支持的环境变量。
class 可选 字符串 指定 Scala 应用程序的入口点。
driver-java-options 可选 字符串 指定要传递到驱动程序的额外 Java 选项
驱动程序库路径 可选 字符串 指定要传递到驱动程序的额外库路径条目
驱动程序类路径 可选 字符串 指定要传递给驱动程序的额外类路径条目。 请注意,随 --jars 添加的 JAR 会自动包含在类路径中。
JAR 可选 字符串 指定要包含在驱动程序和执行程序类路径上的 JAR 的逗号分隔列表
程序包 可选 字符串 指定要包含在驱动程序和执行程序类路径上的 JAR 的 Maven 坐标的逗号分隔列表。 搜索本地 Maven 存储库,然后搜索 Maven 中央存储库,最后搜索 --repositories提供的任何其他远程存储库。 坐标的格式应为 groupId:artifactId:version
排除-包 可选 字符串 指定在解析 --packages 中提供的依赖关系时要排除的 groupId:artifactId 的逗号分隔列表,以避免依赖关系冲突
存储库 可选 字符串 指定要搜索 --packages 提供的 Maven 坐标的其他远程存储库的逗号分隔列表
Py 文件 可选 字符串 指定要放置在 Python 应用程序的 PYTHONPATH 上的 .zip.egg.py 文件的逗号分隔列表
volumes 可选 对象列表 指定要安装的除 Spark 实例卷以外的卷。 如果在应用程序有效内容中添加了卷,那么有效内容中的 conf 部分是必需的。
Name 必需 字符串 指定卷的名称
源子路径 可选 字符串 指定要安装的卷中的源路径。 源路径必须是相对路径。
安装路径 必需 字符串 指定要安装卷的位置。 请注意,存在一些禁止使用的安装路径,当您尝试输入这些路径时,将限制您使用这些路径,因为这些路径可能会损害运行时。

请注意, Spark 驱动程序和执行程序的缺省内存分配仅为 1 G。 虽然在 Spark 驱动程序和执行程序 pod 中都有额外的 1 G 内存可用,但保留此内存以运行 Spark 守护程序。 您无法使用此额外的 1 G ,也无法从实例内存配额中分配此额外的 G。 例如,假定您定义了同时将 spark.executor.memoryspark.driver.memory 设置为 2 G 运行 4 执行程序的作业,那么对于驱动程序,内存分配将为 2 G ,而对于执行程序,内存分配将为 4 * 2 G ,总计为 10 G。 因此,具有 60 G 内存限制的实例最多可以同时运行其中 6 个作业。

响应码

Spark 作业 API 返回以下响应代码:

Spark 作业 API 响应代码
返回码 返回码的含义 描述
202 已接受作业 已成功验证 Spark 作业并接受该作业以提交应用程序。
400 错误请求 当有效内容不正确时,例如,如果有效内容格式不正确或缺少参数,就会返回此代码。
404 找不到 当针对不存在的实例标识提交 Spark 应用程序时,将返回此值。
500 内部服务器错误 如果服务器未响应您要求其执行的操作,那么将返回此消息。 请再次尝试提交该作业。
503 服务不可用 资源不足时,就会返回此代码。
可能的响应: Could not complete the request. Reason - FailedScheduling.

缺省 Spark 配置参数和环境变量

下表列出了 Analytics Engine powered by Apache Spark 中常用的 Spark 配置参数和环境变量及其默认值。

下表列出了 Spark 配置参数及其缺省值:

缺省 Spark 配置参数
Spark 配置 缺省值
spark.eventLog.enabled TRUE
spark.executor.extraClassPath /home/spark/space/assets/data_asset/*:/home/spark/user_home/dbdrivers/*:/cc-home/_global_/dbdrivers/*:/home/spark/shared/user-libs/spark2/*:/home/spark/user_home/dbdrivers/*:/home/spark/shared/user-libs/common/*:/home/spark/shared/user-libs/connectors/*:/opt/ibm/connectors/parquet-encryption/*:/opt/ibm/third-party/libs/spark2/*:/opt/ibm/third-party/libs/common/*:/opt/ibm/third-party/libs/connectors/*:/opt/ibm/spark/external-jars/*
spark.executer.memory 1 G
spark.executer.cores 1
(custom) ae.spark.executor.count 1
(custom) ae.spark.application.priority 1
spark.driver.extraClassPath /home/spark/space/assets/data_asset/*:/home/spark/user_home/dbdrivers/*:/cc-home/_global_/dbdrivers/*:/home/spark/shared/user-libs/spark2/*:/home/spark/user_home/dbdrivers/*:/home/spark/shared/user-libs/common/*:/home/spark/shared/user-libs/connectors/*:/opt/ibm/connectors/parquet-encryption/*:/opt/ibm/third-party/libs/spark2/*:/opt/ibm/third-party/libs/common/*:/opt/ibm/third-party/libs/connectors/*:/opt/ibm/spark/external-jars/*
spark.driver.memory 1024 万
spark.driver.cores 1
spark.local.dir /tmp/spark/scratch 请参阅 spark.local.dir 配置参数 以获取详细信息。
spark.master.ui.port 8080
spark.worker.ui.port 8081
spark.ui.port 4040
spark.history.ui.port 18080
spark.ui.enabled TRUE
spark.ui.killEnabled FALSE
spark.eventLog.dir file:///home/spark/spark-events
spark.ui.reverseProxy TRUE
spark.ui.showConsoleProgress TRUE
spark.shuffle.service.port 7337
spark.r.command /opt/ibm/conda/R/bin/Rscript
spark.hadoop.fs.s3a.fast.upload TRUE
spark.hadoop.fs.s3a.multipart.size 33554432
spark.hadoop.fs.stocator.scheme.list cos
spark.hadoop.fs.stocator.cos.scheme cos
spark.hadoop.fs.stocator.glob.bracket.support TRUE
spark.hadoop.fs.stocator.cos.impl com.ibm.stocator.fs.cos.COSAPIClient
spark.hadoop.fs.cos.impl com.ibm.stocator.fs.ObjectStoreFileSystem
spark.hadoop.fs.s3a.impl org.apache.hadoop.fs.s3a.S3AFileSystem
spark.authenticate FALSE
spark.network.crypto.enabled FALSE
spark.network.crypto.keyLength 256

下表列出了环境变量及其缺省值:

缺省 Spark 环境变量
环境变量 缺省值
SPARK_DIST_CLASSPATH /home/spark/space/assets/data_asset/*:/home/spark/user_home/dbdrivers/*:/cc-home/_global_/dbdrivers/*:/opt/ibm/connectors/idax/*:/opt/ibm/connectors/cloudant/*:/opt/ibm/connectors/db2/*:/opt/ibm/connectors/others-db-drivers/*:/opt/ibm/connectors/wdp-connector-driver/*:/opt/ibm/connectors/wdp-connector-jdbc-library/*:/opt/ibm/connectors/stocator/*:/opt/ibm/connectors/s3/*:/opt/ibm/image-libs/common/*:/opt/ibm/image-libs/spark2/*:/opt/ibm/third-party/libs/batch/*:/opt/ibm/spark/external-jars/*
SPARK_LOCAL_DIRS /tmp/spark/scratch
SPARK_MASTER_WEBUI_PORT 8080
SPARK_MASTER_PORT 7077
SPARK_WORKER_WEBUI_PORT 8081
CLASSPATH /home/spark/user_home/dbdrivers/*:/opt/ibm/connectors/idax/*:/opt/ibm/connectors/cloudant/*:/opt/ibm/connectors/db2/*:/opt/ibm/connectors/others-db-drivers/*:/opt/ibm/connectors/wdp-connector-driver/*:/opt/ibm/connectors/wdp-connector-jdbc-library/*:/opt/ibm/connectors/stocator/*:/opt/ibm/connectors/s3/*:/opt/ibm/image-libs/common/*:/opt/ibm/image-libs/spark2/*:/opt/ibm/third-party/libs/batch/*
LD_LIBRARY_PATH /opt/ibm/connectors/dsdriver/dsdriver/lib:/opt/ibm/connectors/others-db-drivers/oracle/lib:/opt/ibm/jdk/jre/lib/architecture/server:/opt/ibm/jdk/jre/lib/architecture/:/usr/local/lib:/lib64
运行时间-PYTHON_ENV python310
PYTHONPATH /home/spark/space/assets/data_asset:/home/spark/user_home/python-3:/cc-home/_global_/python-3:/home/spark/shared/user-libs/python:/home/spark/shared/conda/envs/python/lib/python/site-packages:/opt/ibm/conda/miniconda/lib/python/site-packages:/opt/ibm/third-party/libs/python3:/opt/ibm/image-libs/python3:/opt/ibm/image-libs/spark2/xskipper-core.jar:/opt/ibm/image-libs/spark2/spark-extensions.jar:/opt/ibm/image-libs/spark2/metaindexmanager.jar:/opt/ibm/image-libs/spark2/stmetaindexplugin.jar:/opt/ibm/spark/python:/opt/ibm/spark/python/lib/py4j-0.10.7-src.zip
R_LIBS_USER /home/spark/space/assets/data_asset:/home/spark/shared/user-libs/R:/opt/ibm/third-party/libs/R:/opt/ibm/conda/R/lib64/R/library/:/opt/ibm/spark/R/lib:/opt/ibm/image-libs/R

父主题: 提交 Spark 作业