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. 外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して 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. 外部 ID プロバイダ(IdP)を使用している場合は、まずフェデレーション ID を使用して gcloud CLI にログインする必要があります。

  11. gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
  12. JupyterLab 拡張機能をインストールする

    ローカルマシンや Compute Engine VM インスタンスなど、Google サービスにアクセスできるマシンまたは VM に JupyterLab 拡張機能をインストールして使用できます。

    拡張機能をインストールする手順は次のとおりです。

    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] セクションが含まれています。また、次のものが含まれる場合もあります:プロジェクトで Jupyter のオプション コンポーネントを実行している Dataproc サーバーレス ノートブックまたは Dataproc クラスタにアクセスできる場合は、Apache Spark 用サーバーレス ノートブックおよび Dataproc クラスタ ノートブックのセクションを含めることもできます。

        JupyterLab ランチャーのブラウザページ
      2. デフォルトでは、Apache Spark Interactive 用 Serverless セッションは、始める前にgcloud init を実行したときに設定したプロジェクトとリージョンで実行されます。セッションのプロジェクトとリージョンの設定は、JupyterLab の [設定] > Google Cloud [設定] > Google Cloud [プロジェクトの設定] で変更できます。

        変更を有効にするには、拡張機能を再起動する必要があります。

    Apache Spark 用サーバーレス ランタイム テンプレートを作成する

    Apache Spark 用 Serverless ランタイム テンプレート(セッション テンプレートとも呼ばれます)には、セッションで Spark コードを実行するための構成設定が含まれています。ランタイム テンプレートの作成と管理は、Jupyterlab または gcloud CLI を使用して行うことができます。

    JupyterLab

    1. JupyterLab の [ランチャー] ページの [Apache Spark ノートブックのサーバーレス] セクションで New runtime template カードをクリックします。

    2. ランタイム テンプレート フォームに入力します。

      • テンプレート情報:

        • 表示名ランタイム ID説明: テンプレートの表示名、テンプレートのランタイム ID、テンプレートの説明を受け入れるか、入力します。
      • 実行構成: Dataproc サービス アカウント ID ではなくユーザー ID でノートブックを実行するには、[ユーザー アカウント] を選択します。

        • サービス アカウント: サービス アカウントを指定しない場合は、Compute Engine のデフォルトのサービス アカウントが使用されます
        • ランタイム バージョン: ランタイム バージョンを確認または選択します。
        • カスタム コンテナ イメージ: 必要に応じて、カスタム コンテナ イメージの URI を指定します。
        • ステージング バケット: Serverless for Apache Spark で使用する Cloud Storage のステージング バケットの名前を必要に応じて指定できます。
        • Python パッケージ リポジトリ: デフォルトでは、ユーザーがノートブックで pip インストール コマンドを実行すると、Python パッケージは PyPI プルスルー キャッシュからダウンロードされてインストールされます。組織のプライベート アーティファクト リポジトリを、Python パッケージで使用するデフォルトの Python パッケージ リポジトリとして指定できます。
      • 暗号化: デフォルトの Google-owned and Google-managed encryption key をそのまま使用するか、[顧客管理の暗号鍵(CMEK)] を選択します。CMEK の場合は、鍵情報を選択または指定します。

      • ネットワーク構成: プロジェクト内のサブネットワーク、またはホスト プロジェクトから共有されたサブネットワークを選択します(プロジェクトは、JupyterLab の [設定] > [ Google Cloud 設定] > [ Google Cloud プロジェクト設定] で変更できます)。指定したネットワークに適用するネットワーク タグを指定できます。Apache Spark 用 Serverless は、指定されたサブネットでプライベート Google アクセス(PGA)を有効にします。ネットワーク接続の要件については、Google Cloud Apache Spark 用サーバーレスのネットワーク構成をご覧ください。

      • セッション構成: 必要に応じて、これらのフィールドに入力して、テンプレートで作成されたセッションの期間を制限できます。

        • 最大アイドル時間: セッションが終了するまでの最大アイドル時間。指定できる範囲: 10 分~336 時間(14 日)。
        • 最大セッション時間: セッションが終了するまでのセッションの最大存続時間。指定できる範囲: 10 分~336 時間(14 日)。
      • Metastore: セッションで Dataproc Metastore サービスを使用するには、メタストアのプロジェクト ID とサービスを選択します。

      • Persistent History Server: 使用可能な Persistent Spark History Server を選択して、セッション中とセッション後にセッションログにアクセスできるようにします。

      • Spark プロパティ: Spark のリソース割り当て自動スケーリング、または GPU のプロパティを選択して追加できます。[プロパティを追加] をクリックして、他の Spark プロパティを追加します。詳細については、Spark プロパティをご覧ください。

      • ラベル: テンプレートで作成されたセッションに設定する各ラベルの [ラベルを追加] をクリックします。

    3. [保存] をクリックしてテンプレートを作成します。

    4. ランタイム テンプレートを表示または削除します。

      1. [設定] > [ Google Cloud 設定] をクリックします。
      2. [Dataproc の設定 > サーバーレス ランタイム テンプレート] セクションに、ランタイム テンプレートのリストが表示されます。

        ランタイム テンプレートのリスト

        • テンプレート名をクリックして、テンプレートの詳細を表示します。
        • テンプレートを削除するには、テンプレートの [操作] メニューを使用します。
    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. 次の gcloud beta dataproc session-templates import コマンドをローカル、または Cloud Shell で実行して、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] をクリックすると、ノートブック セッションを終了できます。

      • セッションを再利用するには、[ファイル>>新規作成] メニューから [ノートブック] を選択して、新しいノートブックを作成します。新しいノートブックが作成されたら、カーネル選択ダイアログで既存のセッションを選択します。新しいノートブックはセッションを再利用し、以前のノートブックのセッション コンテキストを保持します。
    4. セッションを終了しない場合、セッションのアイドル タイマーが期限切れになると、Dataproc によってセッションが終了します。セッションのアイドル時間を設定するには、ランタイム テンプレートの構成を使用します。デフォルトのセッション アイドル時間は 1 時間です。

    Dataproc on Compute Engine クラスタ でノートブックを起動する

    Compute Engine に Dataproc Jupyter クラスタを作成した場合、JupyterLab の [ランチャー] ページに、事前にインストールしたカーネル カードが表示された [Dataproc クラスタ ノートブック] セクションが表示されます。

    Dataproc on Compute Engine クラスタ で Jupyter ノートブックを起動するには:

    1. [Dataproc クラスタ ノートブック] セクションでカードをクリックします。

    2. カーネルのステータスが Starting から Idle (Ready) に変わったら、ノートブック コードの作成と実行を開始できます。

    3. ノートブックを作成して使用した後、[Kernel] タブで [Shut down Kernel] をクリックすると、ノートブック セッションを終了できます。

    Cloud Storage で入出力ファイルを管理する

    探索的データの分析と ML モデルの構築には、多くの場合、ファイルベースの入力と出力が含まれます。Apache Spark 向け Serverless は、Cloud Storage 上のこれらのファイルにアクセスします。

    • Cloud Storage ブラウザにアクセスするには、JupyterLab の [ランチャー] ページのサイドバーで Cloud Storage ブラウザ アイコンをクリックし、フォルダをダブルクリックして内容を表示します。

    • Jupyter でサポートされているファイル形式をクリックして開き、編集できます。ファイルへの変更を保存すると、Cloud Storage に書き込まれます。

    • 新しい Cloud Storage フォルダを作成するには、新しいフォルダ アイコンをクリックして、フォルダの名前を入力します。

    • Cloud Storage バケットまたはフォルダにファイルをアップロードするには、アップロード アイコンをクリックして、アップロードするファイルを選択します。

    Spark ノートブック コードを開発する

    Dataproc JupyterLab 拡張機能をインストールした後、JupyterLab の [ランチャー] ページから Jupyter ノートブックを起動してアプリケーション コードを開発できます。

    PySpark と Python のコード開発

    Apache Spark 用サーバーレスと Compute Engine 上の Dataproc クラスタは、PySpark カーネルをサポートしています。Dataproc on Compute Engine は Python カーネルもサポートしています。

    SQL のコード開発

    SQL コードを記述して実行する PySpark ノートブックを開くには、JupyterLab の [ランチャー] ページの [Apache Spark ノートブックのサーバーレス] セクションまたは [Dataproc クラスタ ノートブック] セクションで、PySpark カーネルカードをクリックします。

    Spark SQL マジック: Serverless for Apache Spark ノートブックを起動する PySpark カーネルは、Spark SQL マジックがプリロードされています。SQL ステートメントでラップするには、spark.sql('SQL STATEMENT').show() を使用する代わりに、セルの先頭に「%%sparksql magic」と入力し、セルに SQL ステートメントを入力します。

    BigQuery SQL: BigQuery Spark コネクタを使用すると、ノートブック コードで BigQuery テーブルからデータを読み込み、Spark で分析を実行して、結果を BigQuery テーブルに書き込むことができます。

    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 以降で作成された Dataproc on Compute Engine クラスタには、Apache Toree(Spark へのインタラクティブなアクセスを可能にする Jupyter ノートブック プラットフォーム用の Scala カーネル)が含まれています。

    • JupyterLab の [ランチャー] ページの [Dataproc クラスタ ノートブック] セクションの 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、Apache Spark 用 Serverless、Cloud Storage リソースなど)の料金が発生します。

    BigQuery で VS Code を使用する: BigQuery で VS Code を使用すると、次のこともできます。

    • BigQuery ノートブックを開発して実行する。
    • BigQuery データセットをブラウジング、検査、プレビューする。

    始める前に

    1. VS Code をダウンロードしてインストールします。
    2. VS Code を開き、アクティビティ バーで [Extensions] をクリックします。
    3. 検索バーを使用して Jupyter 拡張機能を見つけ、[Install] をクリックします。Microsoft の Jupyter 拡張機能は必須の依存関係です。

      VS Code コンソールの Jupyter 拡張機能のリスト。

    Google Cloud 拡張機能をインストールする

    1. VS Code を開き、アクティビティ バーで [Extensions] をクリックします。
    2. 検索バーを使用して Google Cloud Code 拡張機能を見つけ、[Install] をクリックします。

      VS Code コンソールの Google Cloud Code 拡張機能。

    3. プロンプトが表示されたら、VS Code を再起動します。

    VS Code のアクティビティ バーGoogle Cloud Code アイコンが表示されます。

    拡張機能の設定

    1. VS Code を開き、アクティビティ バーで [Google Cloud Code] をクリックします。
    2. [Dataproc] セクションを開きます。
    3. [Login to Google Cloud] をクリックします。認証情報を使用してログインするようにリダイレクトされます。
    4. 最上位のアプリケーション タスクバーを使用して、[Code] > [Settings] > [Settings] > [Extensions] に移動します。
    5. [Google Cloud Code] を見つけ、[Manage] アイコンをクリックしてメニューを開きます。
    6. [設定] を選択します。
    7. [プロジェクト] フィールドと [Dataproc リージョン] フィールドに、ノートブックの開発と Serverless for Apache Spark リソースの管理に使用する Google Cloud プロジェクトとリージョンの名前を入力します。

    Apache Spark 用サーバーレス ノートブックを開発する

    1. VS Code を開き、アクティビティ バーで [Google Cloud Code] をクリックします。
    2. [ノートブック] セクションを開き、[新しいサーバーレス Spark ノートブック] をクリックします。
    3. ノートブック セッションで使用する新しいランタイム(セッション)テンプレートを選択または作成します。
    4. サンプルコードを含む新しい .ipynb ファイルが作成され、エディタで開きます。

      VS Code コンソールの新しいサーバーレス Spark ノートブック。

      これで、Apache Spark 用 Serverless ノートブックでコードを記述して実行できるようになりました。

    Apache Spark 用サーバーレス リソースを作成して管理する

    1. VS Code を開き、アクティビティ バーで [Google Cloud Code] をクリックします。
    2. [Dataproc] セクションを開き、次のリソース名をクリックします。

      • クラスタ: クラスタとジョブを作成して管理します。
      • サーバーレス: バッチ ワークロードとインタラクティブ セッションを作成して管理します。
      • Spark ランタイム テンプレート: セッション テンプレートを作成して管理します。

      VS Code コンソールに表示された Dataproc リソース。

    データセット エクスプローラ

    JupyterLab データセット エクスプローラを使用して、BigLake metastore データセットを表示します。

    JupyterLab データセット エクスプローラを開くには、サイドバーのアイコンをクリックします。

    データベース、テーブル、列は、データセット エクスプローラで検索できます。データベース、テーブル、列の名前をクリックして、関連するメタデータを表示します。

    コードをデプロイする

    Dataproc JupyterLab 拡張機能をインストールした後、JupyterLab を使用して次のことができます。

    • Google Cloud Apache Spark 用サーバーレス インフラストラクチャでノートブック コードを実行する

    • Cloud Composer でノートブックの実行をスケジュールする

    • Google Cloud Apache Spark 用サーバーレス インフラストラクチャまたは Dataproc on Compute Engine クラスタにバッチジョブを送信します。

    Cloud Composer でノートブックの実行をスケジュールする

    Cloud Composer でノートブック コードをスケジュールして、Apache Spark 用 Serverless または Dataproc on Compute Engine クラスタでバッチジョブとして実行するには、次の操作を行います。

    1. Cloud Composer 環境を作成します。

    2. ノートブックの右上にある [ジョブ スケジューラ] ボタンをクリックします。

    3. [Create A Scheduled Job] フォームに次の情報を入力します。

      • ノートブック実行ジョブの一意の名前
      • ノートブックのデプロイに使用する Cloud Composer 環境
      • ノートブックがパラメータ化されている場合は入力パラメータ
      • ノートブックの実行に使用する Dataproc クラスタまたはサーバーレス ランタイム テンプレート
        • クラスタが選択されている場合、クラスタでノートブックの実行が完了した後にクラスタを停止するかどうか
      • ノートブックの実行が初回で失敗した場合の再試行回数と再試行遅延(分単位)
      • 送信する実行通知と受信者リスト。通知は Airflow の SMTP 構成を使用して送信されます。
      • ノートブックの実行スケジュール
    4. [作成] をクリックします。

    5. ノートブックのスケジュールが正常に設定されると、ジョブ名が Cloud Composer 環境のスケジュールされたジョブのリストに表示されます。

    Google Cloud Apache Spark 用サーバーレスにバッチジョブを送信する

    • JupyterLab の [ランチャー] ページの [Dataproc のジョブとセッション] セクションにある [サーバーレス] カードをクリックします。

    • [バッチ] タブをクリックし、[バッチを作成] をクリックして [バッチ情報] フィールドに入力します。

    • [送信] をクリックしてジョブを送信します。

    Dataproc on Compute Engine クラスタにバッチジョブを送信する

    • JupyterLab の [ランチャー] ページの [Dataproc のジョブとセッション] セクションで [クラスタ] カードをクリックします。

    • [ジョブ] タブをクリックし、[ジョブを送信] をクリックします。

    • [クラスタ] を選択し、[ジョブ] フィールドに入力します。

    • [送信] をクリックしてジョブを送信します。

    リソースを表示して管理する

    Dataproc JupyterLab 拡張機能をインストールしたら、JupyterLab の [ランチャー] ページの [Dataproc のジョブとセッション] セクションで、 Google Cloud Serverless for Apache Spark と Dataproc on Compute Engine を表示して管理できます。

    [Dataproc のジョブとセッション] セクションをクリックして、[クラスタ] カードと [サーバーレス] カードを表示します。

    Google Cloud Apache Spark 用サーバーレス セッションを表示して管理するには:

    1. [Serverless] カードをクリックします。
    2. [セッション] タブをクリックしてから、セッション ID をクリックして [セッションの詳細] ページを開き、セッション プロパティを表示し、ログ エクスプローラで 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. [ジョブ] カードをクリックして、現在のプロジェクトに存在するジョブのリストを表示します。ジョブの詳細を表示するには、ジョブ ID をクリックします。