GDC 提供了一个适用于 Spark 的 Dataproc 容器。这是一个用于数据处理的 Apache Spark 环境。如需详细了解 Apache Spark,请参阅 https://spark.apache.org/
。使用 Dataproc Container for Spark 的容器,只需进行极少的更改,即可在 GDC Kubernetes 集群中运行新的或现有的 Spark 应用。如果您熟悉 Spark 工具,可以继续使用它们。
在 YAML 文件中定义 Spark 应用,然后 GDC 会为您分配资源。Dataproc Container for Spark 容器可在数秒内启动。Spark 执行器会根据您的需求进行纵向扩容或关闭。
配置 GDC 上 Dataproc Container for Spark 中的容器,以使用专用硬件,例如专用硬件节点或 GPU。
运行 Spark 应用的前提条件
在运行 Spark 应用之前,请让平台管理员 (PA) 授予您 mkt-system
命名空间中 Spark Operator (mkt-spark-operator
) 角色的访问权限。
运行示例 Spark 3 应用
通过容器化 Spark 应用,您可以更轻松地使用 GDC 在本地运行大数据应用。作为应用运算符 (AO),运行在 SparkApplication
自定义资源类型的 GKE 对象中指定的 Spark 应用。
如需在 GDC 上运行和使用 Apache Spark 3 应用,请完成以下步骤:
检查项目中的
spark-operator
映像,找到要在 Spark 应用中引用的$DATAPROC_IMAGE
:export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig INFRA_CLUSTER_KUBECONFIG \ --selector app.kubernetes.io/name=spark-operator -n mkt-system \ -o=jsonpath='{.items[*].spec.containers[0].image}' \ | sed 's/spark-operator/dataproc/')
例如:
export DATAPROC_IMAGE=10.200.8.2:10443/dataproc-service/private-cloud-devel/dataproc:3.1-dataproc-17
编写
SparkApplication
规范并将其存储在 YAML 文件中。如需了解详情,请参阅编写 Spark 应用规范部分。使用
kubectl
命令,在 GKE 集群上提交、运行和监控SparkApplication
规范中配置的 Spark 应用。如需了解详情,请参阅应用示例部分。查看申请的状态。
可选:查看应用日志。如需了解详情,请参阅查看 Spark 3 应用的日志部分。
使用 Spark 应用收集驱动程序和执行器的状态并将其呈现给用户。
编写 Spark 应用规范
SparkApplication
规范包含以下组件:
apiVersion
字段。kind
字段。metadata
字段。spec
部分。
如需了解详情,请参阅 GitHub 上编写 SparkApplication 规范: https://github.com/kubeflow/spark-operator/blob/gh-pages/docs/user-guide.md#writing-a-sparkapplication-spec
应用示例
本部分包含以下示例及其相应的 SparkApplication
规范,用于运行 Spark 应用:
Spark Pi
本部分包含一个示例,用于运行计算密集型 Spark Pi 应用,该应用通过在圆圈中投掷飞镖来估计 𝛑(圆周率)。
请按以下步骤运行 Spark Pi:
在组织基础架构集群中应用以下
SparkApplication
规范示例:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-pi namespace: mkt-system spec: type: Python pythonVersion: "3" mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/pi.py" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在 1-2 分钟内运行并完成:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
查看驱动程序日志以查看结果:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs spark-pi-driver -n mkt-system | grep "Pi is roughly"
输出类似于以下内容:
Pi is roughly 3.1407357036785184
如需了解详情,请参阅以下资源:
- 如需查看应用代码,请参阅 Apache Spark 文档中的Pi 估计一文:
https://spark.apache.org/examples.html
。 - 如需查看 Spark Pi YAML 文件示例,请参阅编写 Spark 应用规范。
Spark SQL
请按以下步骤运行 Spark SQL:
如需运行选择
1
值的 Spark SQL 应用,请使用以下查询:select 1;
在组织基础架构集群中应用以下
SparkApplication
规范示例:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: pyspark-sql-arrow namespace: mkt-system spec: type: Python mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainApplicationFile: "local:///usr/lib/spark/examples/src/main/python/sql/arrow.py" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在不到一分钟的时间内运行并完成:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
Spark MLlib
请按以下步骤操作,以运行 Spark MLlib:
使用以下 Scala 示例运行执行统计分析并将结果输出到控制台的 Spark MLlib 实例:
import org.apache.spark.ml.linalg.{Matrix, Vectors} import org.apache.spark.ml.stat.Correlation import org.apache.spark.sql.Row val data = Seq( Vectors.sparse(4, Seq((0, 1.0), (3, -2.0))), Vectors.dense(4.0, 5.0, 0.0, 3.0), Vectors.dense(6.0, 7.0, 0.0, 8.0), Vectors.sparse(4, Seq((0, 9.0), (3, 1.0))) ) val df = data.map(Tuple1.apply).toDF("features") val Row(coeff1: Matrix) = Correlation.corr(df, "features").head println(s"Pearson correlation matrix:\n $coeff1") val Row(coeff2: Matrix) = Correlation.corr(df, "features", "spearman").head println(s"Spearman correlation matrix:\n $coeff2")
在组织基础架构集群中应用以下
SparkApplication
规范示例:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-ml namespace: mkt-system spec: type: Scala mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: IfNotPresent mainClass: org.apache.spark.examples.ml.SummarizerExample mainApplicationFile: "local:///usr/lib/spark/examples/jars/spark-examples_2.12-3.1.3.jar" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在不到一分钟的时间内运行并完成:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
SparkR
请按以下步骤运行 SparkR:
使用以下示例代码运行一个 SparkR 实例,该实例会加载捆绑的数据集并打印第一行:
library(SparkR) sparkR.session() df <- as.DataFrame(faithful) head(df)
在组织基础架构集群中应用以下
SparkApplication
规范示例:apiVersion: "sparkoperator.k8s.io/v1beta2" kind: SparkApplication metadata: name: spark-r-dataframe namespace: mkt-system spec: type: R mode: cluster image: "${DATAPROC_IMAGE?}" imagePullPolicy: Always mainApplicationFile: "local:///usr/lib/spark/examples/src/main/r/dataframe.R" sparkVersion: "3.1.3" restartPolicy: type: Never driver: cores: 1 coreLimit: "1000m" memory: "512m" serviceAccount: dataproc-addon-spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在不到一分钟的时间内运行并完成:kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
查看 Spark 3 应用的日志
Spark 有以下两种类型的日志可供您直观呈现:
使用终端运行命令。
驾驶员日志
请按以下步骤操作,查看 Spark 应用的驱动程序日志:
找到您的 Spark 驱动程序 pod:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
打开 Spark 驱动程序 pod 中的日志:
kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
将
DRIVER_POD
替换为您在上一步中找到的 Spark 驱动程序 pod 的名称。
事件日志
您可以在 SparkApplication
规范的 YAML 文件中指定的路径中找到事件日志。
请按以下步骤操作,查看 Spark 应用的事件日志:
- 打开
SparkApplication
规范的 YAML 文件。 - 在文件中找到
spec
字段。 - 找到嵌套在
spec
字段中的sparkConf
字段。 - 找到嵌套在
sparkConf
部分中的spark.eventLog.dir
字段的值。 - 打开相应路径以查看事件日志。
如需查看 SparkApplication
规范的 YAML 文件示例,请参阅编写 Spark 应用规范。
如需了解详情,请与您的客户经理联系。