執行 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 執行器會根據您的需求擴充或關閉。

設定 Dataproc Container for Spark on GDC 的容器,以使用專用硬體,例如專用硬體節點或 GPU。

執行 Spark 應用程式的必要條件

執行 Spark 應用程式前,請要求平台管理員 (PA) 授予您 mkt-system 命名空間的 Spark 運算子 (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. 在 GKE 叢集上,使用 kubectl 指令,根據 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

應用程式範例

這個部分包含下列範例,以及執行 Spark 應用程式的對應SparkApplication規格:

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 estimation」一文:https://spark.apache.org/examples.html
  • 如需 Spark Pi YAML 檔案範例,請參閱「撰寫 Spark 應用程式規格」。

Spark SQL

請按照下列步驟執行 Spark SQL:

  1. 如要執行 Spark SQL 應用程式來選取 1 值,請使用下列查詢:

    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. 找出巢狀結構的 sparkConf 欄位,該欄位位於 spec 欄位中。
  4. 找出 sparkConf 區段中巢狀的 spark.eventLog.dir 欄位值。
  5. 開啟路徑即可查看事件記錄。

如需 SparkApplication 規格的 YAML 檔案範例,請參閱「撰寫 Spark 應用程式規格」。

如需詳細資訊,請與客戶經理聯絡。