运行 Dataproc Container for Spark 服务

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 应用,请完成以下步骤:

  1. 检查项目中的 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
    
  2. 编写 SparkApplication 规范并将其存储在 YAML 文件中。如需了解详情,请参阅编写 Spark 应用规范部分。

  3. 使用 kubectl 命令,在 GKE 集群上提交、运行和监控 SparkApplication 规范中配置的 Spark 应用。如需了解详情,请参阅应用示例部分。

  4. 查看申请的状态。

  5. 可选:查看应用日志。如需了解详情,请参阅查看 Spark 3 应用的日志部分。

  6. 使用 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:

  1. 在组织基础架构集群中应用以下 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"
    
  2. 使用以下命令验证 SparkApplication 规范示例是否在 1-2 分钟内运行并完成:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-pi -n mkt-system
    
  3. 查看驱动程序日志以查看结果:

    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. 如需运行选择 1 值的 Spark SQL 应用,请使用以下查询:

    select 1;
    
  2. 在组织基础架构集群中应用以下 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"
    
  3. 使用以下命令验证 SparkApplication 规范示例是否在不到一分钟的时间内运行并完成:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication pyspark-sql-arrow -n mkt-system
    

Spark MLlib

请按以下步骤操作,以运行 Spark MLlib:

  1. 使用以下 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")
    
  2. 在组织基础架构集群中应用以下 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"
    
  3. 使用以下命令验证 SparkApplication 规范示例是否在不到一分钟的时间内运行并完成:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-ml -n mkt-system
    

SparkR

请按以下步骤运行 SparkR:

  1. 使用以下示例代码运行一个 SparkR 实例,该实例会加载捆绑的数据集并打印第一行:

    library(SparkR)
    sparkR.session()
    df <- as.DataFrame(faithful)
    head(df)
    
  2. 在组织基础架构集群中应用以下 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"
    
  3. 使用以下命令验证 SparkApplication 规范示例是否在不到一分钟的时间内运行并完成:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get SparkApplication spark-r-dataframe -n mkt-system
    

查看 Spark 3 应用的日志

Spark 有以下两种类型的日志可供您直观呈现:

使用终端运行命令。

驾驶员日志

请按以下步骤操作,查看 Spark 应用的驱动程序日志:

  1. 找到您的 Spark 驱动程序 pod:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG get pods -n mkt-system
    
  2. 打开 Spark 驱动程序 pod 中的日志:

    kubectl --kubeconfig INFRA_CLUSTER_KUBECONFIG logs DRIVER_POD -n mkt-system
    

    DRIVER_POD 替换为您在上一步中找到的 Spark 驱动程序 pod 的名称。

事件日志

您可以在 SparkApplication 规范的 YAML 文件中指定的路径中找到事件日志。

请按以下步骤操作,查看 Spark 应用的事件日志:

  1. 打开 SparkApplication 规范的 YAML 文件。
  2. 在文件中找到 spec 字段。
  3. 找到嵌套在 spec 字段中的 sparkConf 字段。
  4. 找到嵌套在 sparkConf 部分中的 spark.eventLog.dir 字段的值。
  5. 打开相应路径以查看事件日志。

如需查看 SparkApplication 规范的 YAML 文件示例,请参阅编写 Spark 应用规范

如需了解详情,请与您的客户经理联系。