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 應用程式,請完成下列步驟:
檢查專案中的
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 應用程式規格」一節。在 GKE 叢集上,使用
kubectl
指令,根據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
應用程式範例
這個部分包含下列範例,以及執行 Spark 應用程式的對應SparkApplication
規格:
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 estimation」一文:
https://spark.apache.org/examples.html
。 - 如需 Spark Pi YAML 檔案範例,請參閱「撰寫 Spark 應用程式規格」。
Spark SQL
請按照下列步驟執行 Spark SQL:
如要執行 Spark SQL 應用程式來選取
1
值,請使用下列查詢: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
欄位。 - 找出巢狀結構的
sparkConf
欄位,該欄位位於spec
欄位中。 - 找出
sparkConf
區段中巢狀的spark.eventLog.dir
欄位值。 - 開啟路徑即可查看事件記錄。
如需 SparkApplication
規格的 YAML 檔案範例,請參閱「撰寫 Spark 應用程式規格」。
如需詳細資訊,請與客戶經理聯絡。