使用 JupyterLab 擴充功能開發無伺服器 Spark 工作負載

本文說明如何在可存取 Google 服務的電腦或自行管理的 VM 上,安裝及使用 JupyterLab 擴充功能。本文也說明如何開發及部署無伺服器 Spark 筆記本程式碼。

只要幾分鐘就能安裝擴充功能,並享有下列功能:

  • 啟動無伺服器 Spark 和 BigQuery 筆記本,快速開發程式碼
  • 在 JupyterLab 中瀏覽及預覽 BigQuery 資料集
  • 在 JupyterLab 中編輯 Cloud Storage 檔案
  • 在 Composer 中排定筆記本

事前準備

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  3. Enable the Dataproc API.

    Enable the API

  4. Install the Google Cloud CLI.

  5. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  6. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  7. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

  8. Enable the Dataproc API.

    Enable the API

  9. Install the Google Cloud CLI.

  10. 如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI

  11. 如要初始化 gcloud CLI,請執行下列指令:

    gcloud init
  12. 安裝 JupyterLab 擴充功能

    來產生預估費用。

    您可以在可存取 Google 服務的機器或 VM 上安裝及使用 JupyterLab 擴充功能,例如本機或 Compute Engine VM 執行個體

    如要安裝擴充功能,請按照下列步驟操作:

    1. python.org/downloads 下載並安裝 Python 3.11 以上版本。

      • 確認已安裝 Python 3.11 以上版本。
        python3 --version
        
    2. 虛擬化 Python 環境。

      pip3 install pipenv
      

      • 建立安裝資料夾。
        mkdir jupyter
        
      • 變更為安裝資料夾。
        cd jupyter
        
      • 建立虛擬環境。
        pipenv shell
        
    3. 在虛擬環境中安裝 JupyterLab。

      pipenv install jupyterlab
      

    4. 安裝 JupyterLab 擴充功能。

      pipenv install bigquery-jupyter-plugin
      

    5. 啟動 JupyterLab

      jupyter lab
      

      1. 瀏覽器會開啟 JupyterLab Launcher 頁面。其中包含「Dataproc Jobs and Sessions」(Dataproc 工作和工作階段) 專區。如果您有權存取 Dataproc 無伺服器筆記本,或是在專案中執行 Jupyter 選用元件的 Dataproc 叢集,其中也會包含「Serverless for Apache Spark Notebooks」(適用於 Apache Spark 的無伺服器筆記本) 和「Dataproc Cluster Notebooks」(Dataproc 叢集筆記本) 專區。

        JupyterLab 啟動器瀏覽器頁面
      2. 根據預設,Serverless for Apache Spark 互動式工作階段會在您執行gcloud init時設定的專案和區域中執行 (請參閱「事前準備」)。如要變更工作階段的專案和區域設定,請依序前往 JupyterLab 的「Settings」>「 Google Cloud 」>「 Google Cloud Project Settings」

        你必須重新啟動擴充功能,變更才會生效。

    建立 Serverless for Apache Spark 執行階段範本

    Apache Spark 無伺服器執行階段範本 (也稱為工作階段範本) 包含在工作階段中執行 Spark 程式碼的設定。您可以使用 Jupyterlab 或 gcloud CLI 建立及管理執行階段範本。

    JupyterLab

    1. 在 JupyterLab Launcher 頁面的「Serverless for Apache Spark Notebooks」部分,按一下 New runtime template 資訊卡。

    2. 填寫「執行階段範本」表單。

      • 範本資訊

        • 顯示名稱執行階段 ID說明:接受或填寫範本顯示名稱、範本執行階段 ID 和範本說明。
      • 執行設定:選取「使用者帳戶」,即可使用使用者身分 (而非 Dataproc 服務帳戶身分) 執行 Notebook。

        • 服務帳戶:如未指定服務帳戶,系統會使用 Compute Engine 預設服務帳戶
        • 執行階段版本:確認或選取執行階段版本
        • 自訂容器映像檔:視需要指定自訂容器映像檔的 URI。
        • 暫存值區:您可以選擇指定 Cloud Storage 暫存值區的名稱,供 Serverless for Apache Spark 使用。
        • Python 套件存放區:根據預設,當使用者在筆記本中執行 pip 安裝指令時,系統會從 PyPI 提取式快取下載並安裝 Python 套件。您可以指定貴機構的 Python 套件專用私人構件存放區,做為預設的 Python 套件存放區。
      • 加密:接受預設的 Google-owned and Google-managed encryption key,或選取「客戶管理的加密金鑰 (CMEK)」。 如果是 CMEK,請選取或提供金鑰資訊。

      • 網路設定:在專案中選取子網路,或從主機專案共用子網路 (您可以從 JupyterLab 「設定」>「設定」>「專案設定」 Google Cloud Google Cloud 變更專案)。您可以指定要套用至指定網路的網路標記。請注意,Serverless for Apache Spark 會在指定的子網路上啟用私人 Google 存取權 (PGA)。如需網路連線需求,請參閱「Google Cloud Serverless for Apache Spark 網路設定」。

      • 工作階段設定:您可以選擇填寫這些欄位,限制使用範本建立的工作階段時間長度。

        • 最長閒置時間:工作階段終止前的最長閒置時間。允許的範圍:10 分鐘至 336 小時 (14 天)。
        • 工作階段時間上限:工作階段終止前的工作階段持續時間上限。允許的範圍:10 分鐘至 336 小時 (14 天)。
      • Metastore:如要搭配工作階段使用 Dataproc Metastore 服務,請選取 Metastore 專案 ID 和服務。

      • 永久記錄伺服器:您可以選取可用的永久 Spark 記錄伺服器,以便在工作階段期間和結束後存取工作階段記錄。

      • Spark 屬性:您可以選取並新增 Spark 資源分配自動調度資源GPU 屬性。按一下「新增資源」,即可新增其他 Spark 資源。詳情請參閱「Spark 屬性」。

      • 標籤:為每個標籤按一下「新增標籤」,即可在以範本建立的工作階段中設定標籤。

    3. 按一下「儲存」即可建立範本。

    4. 如要查看或刪除執行階段範本,請按照下列步驟操作。

      1. 依序點選「設定」>「設定」 Google Cloud
      2. 「Dataproc Settings」(Dataproc 設定) >「Serverless Runtime Templates」(無伺服器執行階段範本) 區段會顯示執行階段範本清單。

        執行階段範本清單

        • 按一下範本名稱,即可查看範本詳細資料。
        • 如要刪除範本,請使用範本的「動作」選單。
    5. 開啟並重新載入 JupyterLab 啟動器頁面,即可在 JupyterLab 啟動器頁面查看已儲存的筆記本範本資訊卡。

    gcloud

    1. 建立 YAML 檔案,其中包含執行階段範本設定。

      簡單的 YAML

      environmentConfig:
        executionConfig:
          networkUri: default
      jupyterSession:
        kernel: PYTHON
        displayName: Team A
      labels:
        purpose: testing
      description: Team A Development Environment
      

      複雜的 YAML

      description: Example session template
      environmentConfig:
        executionConfig:
          serviceAccount: sa1
          # Choose either networkUri or subnetworkUri
          networkUri:
          subnetworkUri: default
          networkTags:
           - tag1
          kmsKey: key1
          idleTtl: 3600s
          ttl: 14400s
          stagingBucket: staging-bucket
        peripheralsConfig:
          metastoreService: projects/my-project-id/locations/us-central1/services/my-metastore-id
          sparkHistoryServerConfig:
            dataprocCluster: projects/my-project-id/regions/us-central1/clusters/my-cluster-id
      jupyterSession:
        kernel: PYTHON
        displayName: Team A
      labels:
        purpose: testing
      runtimeConfig:
        version: "2.3"
        containerImage: gcr.io/my-project-id/my-image:1.0.1
        properties:
          "p1": "v1"
      description: Team A Development Environment
      

    2. 在本機或 Cloud Shell 中執行下列 gcloud beta dataproc session-templates import 指令,從 YAML 檔案建立工作階段 (執行階段) 範本:

      gcloud beta dataproc session-templates import TEMPLATE_ID \
          --source=YAML_FILE \
          --project=PROJECT_ID \
          --location=REGION
      

    啟動及管理筆記本

    安裝 Dataproc JupyterLab 擴充功能後,即可點選 JupyterLab 啟動器頁面上的範本資訊卡,執行下列操作:

    在 Serverless for Apache Spark 上啟動 Jupyter 筆記本

    JupyterLab 啟動器頁面的「Serverless for Apache Spark Notebooks」部分會顯示筆記本範本資訊卡,這些資訊卡會對應至 Serverless for Apache Spark 執行階段範本 (請參閱「建立 Serverless for Apache Spark 執行階段範本」)。

    1. 按一下資訊卡,建立 Serverless for Apache Spark 工作階段並啟動筆記本。工作階段建立完成且筆記本核心準備就緒後,核心狀態會從 Starting 變更為 Idle (Ready)

    2. 撰寫及測試筆記本程式碼。

      1. 複製下列 PySpark Pi estimation 程式碼,並貼到 PySpark 筆記本儲存格,然後按下 Shift+Return 鍵執行程式碼。

        import random
            
        def inside(p):
            x, y = random.random(), random.random()
            return x*x + y*y < 1
            
        count = sc.parallelize(range(0, 10000)) .filter(inside).count()
        print("Pi is roughly %f" % (4.0 * count / 10000))

        筆記本結果:

    3. 建立及使用筆記本後,您可以點選「Kernel」分頁中的「Shut Down Kernel」,終止筆記本工作階段。

      • 如要重複使用工作階段,請從「File」>>「New」選單中選擇「Notebook」,建立新筆記本。建立新筆記本後,請從核心選取對話方塊中選擇現有工作階段。新筆記本會重複使用工作階段,並保留先前筆記本的工作階段內容。
    4. 如果沒有終止工作階段,Dataproc 會在工作階段閒置計時器到期時終止工作階段。您可以在執行階段範本設定中設定工作階段閒置時間。工作階段閒置時間預設為一小時。

    在 Dataproc on Compute Engine 叢集上啟動筆記本

    如果您建立了 Dataproc on Compute Engine Jupyter 叢集,JupyterLab Launcher 頁面會包含「Dataproc Cluster Notebook」(Dataproc 叢集 Notebook) 區段,其中有預先安裝的 Kernel 卡片。

    如要在 Dataproc on Compute Engine 叢集上啟動 Jupyter 筆記本,請按照下列步驟操作:

    1. 按一下「Dataproc 叢集筆記本」專區中的資訊卡。

    2. 當核心狀態從 Starting 變更為 Idle (Ready) 時,您就可以開始編寫及執行筆記本程式碼。

    3. 建立及使用筆記本後,您可以點選「Kernel」分頁中的「Shut Down Kernel」,終止筆記本工作階段。

    管理 Cloud Storage 中的輸入和輸出檔案

    分析探索性資料及建構機器學習模型時,通常會用到以檔案為基礎的輸入和輸出內容。Serverless for Apache Spark 會存取 Cloud Storage 上的這些檔案。

    • 如要存取 Cloud Storage 瀏覽器,請點選 JupyterLab Launcher 頁面側欄中的 Cloud Storage 瀏覽器圖示,然後按兩下資料夾即可查看內容。

    • 您可以按一下 Jupyter 支援的檔案類型,開啟並編輯檔案。儲存檔案變更時,系統會將變更寫入 Cloud Storage。

    • 如要建立新的 Cloud Storage 資料夾,請按一下新資料夾圖示,然後輸入資料夾名稱。

    • 如要將檔案上傳至 Cloud Storage bucket 或資料夾,請按一下上傳圖示,然後選取要上傳的檔案。

    開發 Spark 筆記本程式碼

    安裝 Dataproc JupyterLab 擴充功能後,您可以從 JupyterLab Launcher 頁面啟動 Jupyter 筆記本,開發應用程式程式碼。

    PySpark 和 Python 程式碼開發

    Apache Spark 無伺服器型服務和 Compute Engine 叢集上的 Dataproc 支援 PySpark 核心。Dataproc on Compute Engine 也支援 Python 核心。

    • 在 JupyterLab「啟動器」頁面的「Serverless for Apache Spark Notebooks」(適用於 Apache Spark 筆記本的無伺服器服務) 或「Dataproc Cluster Notebook」(Dataproc 叢集筆記本) 部分中,按一下 PySpark 資訊卡,即可開啟 PySpark 筆記本。

    • 在 JupyterLab 啟動器頁面的「Dataproc Cluster Notebook」部分,按一下 Python 核心資訊卡,即可開啟 Python 筆記本。

    開發 SQL 程式碼

    如要開啟 PySpark 筆記本來撰寫及執行 SQL 程式碼,請前往 JupyterLab Launcher 頁面,然後在「Serverless for Apache Spark Notebooks」或「Dataproc Cluster Notebook」部分中,按一下 PySpark 核心資訊卡。

    Spark SQL Magic:由於啟動 Serverless for Apache Spark Notebooks 的 PySpark 核心已預先載入 Spark SQL Magic,因此您可以在儲存格頂端輸入 %%sparksql magic,然後在儲存格中輸入 SQL 陳述式,不必使用 spark.sql('SQL STATEMENT').show() 包裝 SQL 陳述式。

    BigQuery SQL:BigQuery Spark 連接器可讓筆記本程式碼從 BigQuery 資料表載入資料、在 Spark 中執行分析,然後將結果寫入 BigQuery 資料表。

    Serverless for Apache Spark 2.2 和後續版本執行階段都包含 BigQuery Spark 連接器。如果使用較早的執行階段啟動 Serverless for Apache Spark 筆記本,可以將下列 Spark 屬性新增至 Serverless for Apache Spark 執行階段範本,安裝 Spark BigQuery 連接器:

    spark.jars: gs://spark-lib/bigquery/spark-bigquery-with-dependencies_2.12-0.25.2.jar
    

    Scala 程式碼開發

    使用映像檔版本 2.0 以上版本建立的 Compute Engine Dataproc 叢集,會包含 Apache Toree,這是 Jupyter Notebook 平台的 Scala 核心,可提供 Spark 的互動式存取權。

    • 在 JupyterLab Launcher 頁面的「Dataproc cluster Notebook」 部分,按一下 Apache Toree 資訊卡,開啟 Scala 程式碼開發筆記本。

      圖 1. JupyterLab 啟動器頁面中的 Apache Toree 核心資訊卡。

    使用 Visual Studio Code 擴充功能開發程式碼

    您可以使用 Google Cloud Visual Studio Code (VS Code) 擴充功能執行下列操作:

    • 在 Serverless for Apache Spark 筆記本中開發及執行 Spark 程式碼。
    • 建立及管理 Serverless for Apache Spark 執行階段 (工作階段) 範本、互動式工作階段和批次工作負載。

    Visual Studio Code 擴充功能免費,但您使用的任何Google Cloud 服務 (包括 Dataproc、Serverless for Apache Spark 和 Cloud Storage 資源) 都會產生費用。

    搭配 BigQuery 使用 VS Code:您也可以搭配 BigQuery 使用 VS Code,執行下列操作:

    • 開發及執行 BigQuery 筆記本。
    • 瀏覽、檢查及預覽 BigQuery 資料集。

    事前準備

    1. 下載並安裝 VS Code
    2. 開啟 VS Code,然後在活動列中按一下「擴充功能」
    3. 使用搜尋列找出 Jupyter 擴充功能,然後按一下「安裝」。Microsoft 的 Jupyter 擴充功能是必要依附元件。

      VS Code 控制台中的 Jupyter 擴充功能清單。

    安裝 Google Cloud 擴充功能

    1. 開啟 VS Code,然後在活動列中按一下「擴充功能」
    2. 使用搜尋列找出「Google Cloud Code」擴充功能,然後按一下「安裝」

      VS Code 控制台中的 Google Cloud Code 擴充功能。

    3. 如果系統提示,請重新啟動 VS Code。

    VS Code 活動列中現在會顯示「程式碼」Google Cloud 圖示。

    設定擴充功能

    1. 開啟 VS Code,然後在活動列中按一下「程式碼」Google Cloud
    2. 開啟「Dataproc」Dataproc部分。
    3. 按一下「登入」 Google Cloud。系統會將您重新導向至登入頁面,請輸入憑證。
    4. 使用頂層應用程式工作列,依序前往「Code」>「Settings」>「Settings」>「Extensions」
    5. 找到「程式碼」Google Cloud ,然後點選「管理」圖示開啟選單。
    6. 選取 [設定]。
    7. 在「專案」和「Dataproc 區域」欄位中,輸入要用於開發筆記本和管理 Serverless for Apache Spark 資源的 Google Cloud 專案和區域名稱。

    開發 Serverless for Apache Spark 筆記本

    1. 開啟 VS Code,然後在活動列中按一下「程式碼」Google Cloud
    2. 開啟「Notebooks」部分,然後點選「New Serverless Spark Notebook」
    3. 選取或建立新的執行階段 (工作階段) 範本,用於筆記本工作階段。
    4. 系統會建立新的 .ipynb 檔案,其中包含範例程式碼,並在編輯器中開啟。

      VS Code 控制台中的新無伺服器 Spark 筆記本。

      現在起,您可以在 Serverless for Apache Spark 筆記本中編寫及執行程式碼。

    建立及管理 Serverless for Apache Spark 資源

    1. 開啟 VS Code,然後在活動列中按一下「程式碼」Google Cloud
    2. 開啟「Dataproc」Dataproc部分,然後按一下下列資源名稱:

      • 叢集:建立及管理叢集和工作。
      • 無伺服器:建立及管理批次工作負載和互動式工作階段。
      • Spark 執行階段範本:建立及管理工作階段範本。

      VS Code 控制台中列出的 Dataproc 資源。

    資料集探索工具

    使用 JupyterLab 資料集探索工具,查看 BigLake Metastore 資料集。

    如要開啟 JupyterLab 資料集探索工具,請按一下側欄中的圖示。

    您可以在資料集探索工具中搜尋資料庫、資料表或資料欄。 按一下資料庫、資料表或資料欄名稱,即可查看相關聯的中繼資料。

    部署程式碼

    安裝 Dataproc JupyterLab 擴充功能後,您可以使用 JupyterLab 執行下列操作:

    • 在 Google Cloud 無伺服器 Apache Spark 基礎架構上執行筆記本程式碼

    • 在 Cloud Composer 上排定筆記本執行作業

    • 將批次工作提交至 Google Cloud Serverless for Apache Spark 基礎架構,或提交至 Compute Engine 叢集上的 Dataproc。

    在 Cloud Composer 上排定筆記本執行作業

    請完成下列步驟,在 Cloud Composer 中排定筆記本程式碼的執行時間,以便在 Serverless for Apache Spark 或 Compute Engine 叢集上的 Dataproc 中,以批次工作形式執行。

    1. 建立 Cloud Composer 環境

    2. 按一下筆記本右上方的「Job Scheduler」按鈕。

    3. 填寫「建立排程工作」表單,提供下列資訊:

      • 筆記本執行工作的專屬名稱
      • 用於部署筆記本的 Cloud Composer 環境
      • 如果筆記本已參數化,請輸入參數
      • 用於執行筆記本的 Dataproc 叢集或無伺服器執行階段範本
        • 如果選取叢集,是否要在叢集上執行完筆記本後停止叢集
      • 如果首次執行筆記本失敗,重試次數和重試延遲時間 (以分鐘為單位)
      • 要傳送的執行通知和收件者清單。 通知會透過 Airflow SMTP 設定傳送。
      • 筆記本執行排程
    4. 點選「建立」

    5. 成功排定筆記本的執行時間後,工作名稱會顯示在 Cloud Composer 環境的排定工作清單中。

    將批次工作提交至 Google Cloud 無伺服器 Apache Spark

    • 在 JupyterLab 啟動器頁面的「Dataproc Jobs and Sessions」(Dataproc 工作和工作階段) 部分,點選「Serverless」(無伺服器) 資訊卡。

    • 按一下「批次」分頁標籤,然後按一下「建立批次」,並填寫「批次資訊」欄位。

    • 按一下「提交」即可提交工作。

    將批次工作提交至 Dataproc on Compute Engine 叢集

    • 在 JupyterLab 啟動器頁面的「Dataproc Jobs and Sessions」(Dataproc 工作和工作階段) 部分中,按一下「Clusters」(叢集) 資訊卡。

    • 按一下「Jobs」(工作) 分頁標籤,然後按一下「Submit Job」(提交工作)

    • 選取「叢集」,然後填寫「工作」欄位。

    • 按一下「提交」即可提交工作。

    查看及管理資源

    安裝 Dataproc JupyterLab 擴充功能後,您可以在 JupyterLab 啟動器頁面的「Dataproc Jobs and Sessions」(Dataproc 工作和工作階段) 區段中,查看及管理 Google Cloud 適用於 Apache Spark 的無伺服器服務和 Compute Engine 上的 Dataproc。

    按一下「Dataproc Jobs and Sessions」(Dataproc 工作和工作階段) 部分,即可顯示「Clusters」(叢集) 和「Serverless」(無伺服器) 資訊卡。

    如要查看及管理 Google Cloud Serverless for Apache Spark 工作階段,請按照下列步驟操作:

    1. 按一下「無伺服器」資訊卡。
    2. 按一下「Sessions」分頁標籤,然後按一下工作階段 ID 開啟「Session details」頁面,即可查看工作階段屬性、在記錄檔探索工具中查看記錄,以及終止工作階段。 Google Cloud 注意:系統會建立專屬的 Google Cloud 無伺服器 Apache Spark 工作階段,啟動每個 Google Cloud 無伺服器 Apache Spark 筆記本。

    如要查看及管理 Google Cloud 無伺服器 Apache Spark 批次作業,請按照下列步驟操作:

    1. 按一下「批次」分頁標籤,即可查看目前專案和區域中的 Google Cloud Serverless for Apache Spark 批次清單。按一下批次 ID 即可查看批次詳細資料。

    如要查看及管理 Dataproc on Compute Engine 叢集,請按照下列步驟操作:

    1. 按一下「叢集」資訊卡。系統會選取「叢集」分頁,列出目前專案和區域中有效的 Dataproc on Compute Engine 叢集。您可以點選「動作」欄中的圖示,啟動、停止或重新啟動叢集。按一下叢集名稱,即可查看叢集詳細資料。按一下「動作」欄中的圖示,即可複製、停止或刪除工作。

    如要查看及管理 Dataproc on Compute Engine 工作,請按照下列步驟操作:

    1. 按一下「Jobs」(工作) 資訊卡,即可查看目前專案中的工作清單。按一下工作 ID 即可查看工作詳細資料。