在 Google Compute Engine 中使用 Dataproc

1. 簡介 - Google Dataproc

Dataproc 是一項全代管且具備高擴充性的服務,可執行 Apache Spark、Apache Flink、Presto 和許多其他開放原始碼工具和架構。使用 Dataproc 以全球規模進行資料湖泊現代化、ETL / ELT 和安全數據資料學作業。Dataproc 也與多項 Google Cloud 服務完全整合,包括 BigQueryCloud StorageVertex AIDataplex

Dataproc 提供三種版本:

  • 無伺服器型 Dataproc 可讓您執行 PySpark 工作,不必設定基礎架構和自動調度資源。無伺服器型 Dataproc 支援 PySpark 批次工作負載和工作階段 / 筆記本。
  • Google Compute Engine 上的 Dataproc 可讓您管理 Hadoop YARN 叢集,處理以 YARN 為基礎的 Spark 工作負載,以及 Flink 和 Presto 等開放原始碼工具。您可以視需要垂直或水平擴充雲端叢集,包括自動調度資源。
  • Google Kubernetes Engine 上的 Dataproc 可讓您在 GKE 基礎架構中設定 Dataproc 虛擬叢集,以提交 Spark、PySpark、SparkR 或 Spark SQL 工作。

2. 在 Google Cloud VPC 中建立 Dataproc 叢集

在這個步驟中,您將使用 Google Cloud 控制台,在 Google Cloud 上建立 Dataproc 叢集。

首先,請在控制台上啟用 Dataproc 服務 API。啟用後,在搜尋列中搜尋「Dataproc」,然後點選「建立叢集」

選取「Compute Engine 上的叢集」,使用 Google Compute Engine(GCE) VM 做為執行 Dataproc 叢集的基本架構。

a961b2e8895e88da.jpeg

您現在位於「叢集建立」頁面。

9583c91204a09c12.jpeg

本頁內容:

  • 為叢集提供專屬名稱。
  • 選取特定區域。您也可以選取可用區,但 Dataproc 可自動為您選擇可用區。在本程式碼研究室中,請選取「us-central1」和「us-central1-c」。
  • 選取「標準」叢集類型。確保有一個主要節點。
  • 在「設定節點」分頁中,確認建立的工作站數量為兩個。
  • 在「Customize cluster」(自訂叢集) 區段中,勾選「Enable Component Gateway」(啟用元件閘道) 旁的方塊。這樣一來,您就能存取叢集上的網頁介面,包括 Spark UI、Yarn Node Manager 和 Jupyter Notebooks。
  • 在「Optional Components」(選用元件) 中,選取「Jupyter Notebook」。這會設定叢集,並提供 Jupyter Notebook 伺服器。
  • 其餘設定均保留預設值,然後點選「建立叢集」

這會啟動 Dataproc 叢集。

3. 啟動叢集並透過 SSH 連線至叢集

叢集狀態變更為「執行中」後,請在 Dataproc 控制台中點選叢集名稱。

7332f1c2cb25807d.jpeg

按一下「VM Instance」(VM 執行個體) 分頁標籤,即可查看叢集的主節點和兩個 worker 節點。

25be1578e00f669f.jpeg

按一下主要節點旁邊的「SSH」SSH,登入主要節點。

2810ffd97f315bdb.jpeg

執行 HDFS 指令,查看目錄結構。

hadoop_commands_example

sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51 
sudo hadoop fs -ls /

4. 網頁介面和元件閘道

Dataproc 叢集控制台中,按一下叢集名稱,然後點選「WEB INTERFACES」(網頁介面) 分頁標籤。

6398f71d6293d6ff.jpeg

這會顯示可用的網頁介面,包括 Jupyter。按一下「Jupyter」即可開啟 Jupyter 筆記本。您可以使用這個功能,在 GCS 中建立以 PySpark 儲存的筆記本,將筆記本儲存在 Google Cloud Storage,然後開啟 PySpark 筆記本,在本程式碼研究室中使用。

5. 監控及觀察 Spark 工作

Dataproc 叢集啟動並執行後,請建立 PySpark 批次工作,並將工作提交至 Dataproc 叢集。

建立 Google Cloud Storage (GCS) 值區,用來儲存 PySpark 指令碼。請務必在與 Dataproc 叢集相同的區域建立 bucket。

679fd2f76806f4e2.jpeg

GCS 值區建立完成後,請將下列檔案複製到這個值區。

https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py

這項指令碼會建立範例 Spark DataFrame,並以 Hive 資料表的形式寫入。

hive_job.py

from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row

spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()

df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
        (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
    ], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")

將這個指令碼做為 Spark 批次工作提交至 Dataproc。按一下左側導覽選單中的「Jobs」(工作),然後點選「Submit Job」(提交工作)

5767fc7c50b706d3.jpeg

提供工作 ID區域。選取叢集,並提供您複製的 Spark 指令碼 GCS 位置。這項工作會在 Dataproc 上以 Spark 批次工作形式執行。

在「屬性」下方新增鍵 spark.submit.deployMode 和值 client,確保驅動程式在 Dataproc 主節點中執行,而不是在工作站節點中執行。按一下「提交」,將批次工作提交至 Dataproc。

a7ca90f5132faa31.jpeg

Spark 指令碼會建立 DataFrame,並寫入 Hive 資料表 test_table_1

工作順利執行後,您可以在「監控」分頁下方查看控制台列印陳述式。

bdec2f3ae1055f9.jpeg

現在 Hive 資料表已建立完成,請提交另一個 Hive 查詢工作,選取資料表的內容並顯示在控制台上。

使用下列屬性建立另一個工作:

c16f02d1b3afaa27.jpeg

請注意,「Job Type」(工作類型) 設為「Hive」,查詢來源類型為「Query Text」(查詢文字),這表示我們會在「Query Text」(查詢文字) 文字方塊中編寫整個 HiveQL 陳述式。

提交工作,其餘參數則保留預設值。

e242e50bc2519bf4.jpeg

請注意,HiveQL 會選取所有記錄,並顯示在主控台上。

6. 自動調度資源

自動調度資源是估算工作負載「合適」叢集工作站節點數量的作業。

Dataproc AutoscalingPolicies API 提供叢集資源自動管理機制,並啟用叢集 worker VM 自動調度資源功能。自動調度資源政策是可重複使用的設定,當中說明採用自動調度資源政策的叢集 worker 應如何調度資源,並定義資源調度界限、頻率和積極程度,讓您可在整個叢集生命週期中精細控管叢集資源。

Dataproc 自動調度資源政策是使用 YAML 檔案編寫,這些 YAML 檔案會傳遞至 CLI 指令,用於建立叢集,或在透過 Cloud 控制台建立叢集時,從 GCS bucket 選取。

以下是 Dataproc 自動調度資源政策的範例:

policy.yaml

workerConfig:
  minInstances: 10
  maxInstances: 10
secondaryWorkerConfig:
  maxInstances: 50
basicAlgorithm:
  cooldownPeriod: 4m
  yarnConfig:
    scaleUpFactor: 0.05
    scaleDownFactor: 1.0
    gracefulDecommissionTimeout: 1h

7. 設定 Dataproc 選用元件

這會啟動 Dataproc 叢集。

建立 Dataproc 叢集時,系統會自動在叢集上安裝標準的 Apache Hadoop 生態系統元件 (請參閱 Dataproc 版本清單)。您可以在建立叢集時,在叢集上安裝稱為「選用元件」的其他元件。

e39cc34245af3f01.jpeg

從控制台建立 Dataproc 叢集時,我們已啟用選用元件,並選取 Jupyter Notebook 做為選用元件。

8. 清理資源

如要清理叢集,請在 Dataproc 控制台中選取叢集,然後按一下「停止」。叢集停止後,按一下「刪除」即可刪除叢集。

刪除 Dataproc 叢集後,請刪除複製程式碼的 GCS bucket。

如要清理資源並停止產生不必要的帳單費用,請先停止 Dataproc 叢集,然後刪除。

停止及刪除叢集前,請務必將寫入 HDFS 儲存空間的所有資料複製到 GCS,確保資料能長期保存。

如要停止叢集,請按一下「停止」

52065de928ab52e7.jpeg

叢集停止後,按一下「刪除」即可刪除叢集。

在確認對話方塊中,按一下「刪除」即可刪除叢集。

52065de928ab52e7.jpeg