Google Distributed Cloud (GDC) 實體隔離環境提供適用於 Spark 的 Dataproc 容器。這是用於資料處理的 Apache Spark 環境。如要進一步瞭解 Apache Spark,請參閱 https://spark.apache.org/
。使用 Dataproc Container for Spark 的容器,在 Distributed Cloud 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 服務,使用者叢集必須有服務帳戶。Dataproc Container for Spark 會建立 Spark 驅動程式 Pod,以執行 Spark 應用程式。Spark 驅動程式 Pod 需要 Pod 命名空間中的 Kubernetes 服務帳戶,並具備下列動作的權限:
- 建立、取得、列出及刪除執行器 Pod。
- 為驅動程式建立 Kubernetes 無介面服務。
執行 Spark 應用程式前,請先完成下列步驟,確保您在 foo
命名空間中擁有具備先前權限的服務帳戶:
建立服務帳戶,供 Spark 驅動程式 Pod 在
foo
命名空間中使用: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 應用程式容器化,可簡化在 Distributed Cloud 上執行大數據應用程式的程序。以應用程式運算子 (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 應用程式規格」一節。在 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: 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 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: 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 應用程式規格」。
如需詳細資訊,請與客戶經理聯絡。