Google Distributed Cloud (GDC) 经过网闸隔离的设备提供了一个适用于 Spark 的 Dataproc 容器。这是一个用于数据处理的 Apache Spark 环境。如需详细了解 Apache Spark,请参阅 https://spark.apache.org/
。使用 Dataproc Container for Spark 的容器在分布式云 Kubernetes 集群中运行新的或现有的 Spark 应用,只需进行极少的更改。如果您熟悉 Spark 工具,可以继续使用它们。
在 YAML 文件中定义 Spark 应用,Distributed Cloud 会为您分配资源。Dataproc Container for Spark 容器可在数秒内启动。Spark 执行器会根据您的需求进行纵向扩容或关闭。
配置 Dataproc Container for Spark on Distributed Cloud 中的容器以使用专用硬件,例如专用硬件节点或 GPU。
部署 Dataproc Container for Spark 服务
平台管理员 (PA) 必须先为您安装 Marketplace 服务,然后您才能使用这些服务。如果您需要 Dataproc Container for Spark,请与您的 PA 联系。如需了解详情,请参阅安装 GDC Marketplace 软件包。
运行 Spark 应用的前提条件
您必须在用户集群中拥有服务账号,才能使用 Dataproc Container for Spark 服务。Spark 的 Dataproc 容器会创建一个 Spark 驱动程序 pod 来运行 Spark 应用。Spark 驱动程序 pod 需要 pod 命名空间中的 Kubernetes 服务账号,该账号具有执行以下操作的权限:
- 创建、获取、列出和删除执行器 pod。
- 为驱动程序创建 Kubernetes 无头服务。
在运行 Spark 应用之前,请完成以下步骤,确保您在 foo
命名空间中拥有具有上述权限的服务账号:
在
foo
命名空间中为 Spark 驱动程序 pod 创建一个服务账号:kubectl create serviceaccount spark --kubeconfig AO_USER_KUBECONFIG --namespace=foo
创建用于授予权限以创建、获取、列出和删除执行程序 pod 的角色,并在
foo
命名空间中为驱动程序创建 Kubernetes 无头服务:kubectl create role spark-driver --kubeconfig AO_USER_KUBECONFIG --verb=* \ --resource=pods,services,configmaps,persistentvolumeclaims \ --namespace=foo
创建角色绑定,以授予服务账号在
foo
命名空间中的角色访问权限:kubectl create --kubeconfig AO_USER_KUBECONFIG \ rolebinding spark-spark-driver \ --role=spark-driver --serviceaccount=foo:spark \ --namespace=foo
运行示例 Spark 3 应用
通过容器化 Spark 应用,您可以轻松使用分布式云在本地运行大数据应用。作为应用操作员 (AO),运行在 SparkApplication
自定义资源类型的 GKE 对象中指定的 Spark 应用。
如需在 Distributed Cloud 上运行和使用 Apache Spark 3 应用,请完成以下步骤:
检查项目中的
spark-operator
映像,找到要在 Spark 应用中引用的$DATAPROC_IMAGE
:export DATAPROC_IMAGE=$(kubectl get pod --kubeconfig AO_USER_KUBECONFIG \ --selector app.kubernetes.io/name=spark-operator -n foo \ -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: foo 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: spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在 1-2 分钟内运行并完成:kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication spark-pi -n foo
查看驱动程序日志以查看结果:
kubectl --kubeconfig AO_USER_KUBECONFIG logs spark-pi-driver -n foo | 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: foo 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: spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在不到一分钟的时间内运行并完成:kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n foo
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: foo 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: spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在不到一分钟的时间内运行并完成:kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication spark-ml -n foo
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: foo 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: spark executor: cores: 1 instances: 1 memory: "512m"
使用以下命令验证
SparkApplication
规范示例是否在不到一分钟的时间内运行并完成:kubectl --kubeconfig AO_USER_KUBECONFIG get SparkApplication spark-r-dataframe -n foo
查看 Spark 3 应用的日志
Spark 有以下两种类型的日志可供您直观呈现:
使用终端运行命令。
驾驶员日志
请按以下步骤操作,查看 Spark 应用的驱动程序日志:
找到您的 Spark 驱动程序 pod:
kubectl -n spark get pods
打开 Spark 驱动程序 pod 中的日志:
kubectl -n spark logs DRIVER_POD
将
DRIVER_POD
替换为您在上一步中找到的 Spark 驱动程序 pod 的名称。
事件日志
您可以在 SparkApplication
规范的 YAML 文件中指定的路径中找到事件日志。
请按以下步骤操作,查看 Spark 应用的事件日志:
- 打开
SparkApplication
规范的 YAML 文件。 - 在文件中找到
spec
字段。 - 找到嵌套在
spec
字段中的sparkConf
字段。 - 找到嵌套在
sparkConf
部分中的spark.eventLog.dir
字段的值。 - 打开相应路径以查看事件日志。
如需查看 SparkApplication
规范的 YAML 文件示例,请参阅编写 Spark 应用规范。
如需了解详情,请与您的客户经理联系。