Dataproc Serverless for Spark のインタラクティブ セッションを作成する

Dataproc Serverless for Spark Interactive セッションを使用して、Jupyter ノートブックでコードを作成して実行する方法について説明します。

プレビュー リリースの制限事項

  • Spark ジョブは、送信されたユーザーの ID ではなく、サービス アカウント ID で実行されます。
  • 課金指標は Stackdriver に記録されません(プレビュー期間中は、Dataproc for Spark Serverless Interactive は無料です)。
  • GPU はまだサポートされていません。
  • セッションは、ランタイム テンプレートの max session time プロパティ設定に関係なく、24 時間後に終了します。この制限は、一般提供リリースで削除される予定です。

準備

  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. To initialize the gcloud CLI, run the following command:

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

    Go to project selector

  7. Enable the Dataproc API.

    Enable the API

  8. Install the Google Cloud CLI.
  9. To initialize the gcloud CLI, run the following command:

    gcloud init

Dataproc for Spark サーバーレス インタラクティブ セッションを作成する

Dataproc Serverless for Spark Interactive セッション内で Jupyter ノートブックを開きます。Dataproc Serverless Interactive Preview リリースでは、次の 2 つの方法でセッションを作成できます。

  1. Dataproc JupyterLab プラグインを使用して、ユーザーがテンプレートの設定に基づいてセッションを起動する際に使用できるテンプレートを作成します。

  2. Vertex AI Workbench を使用して、Google が管理するセッションを作成します。

JupyterLab プラグイン

以降のセクションでは、Dataproc JupyterLab プラグインを使用して Spark インタラクティブ セッション用のユーザー マネージャー Dataproc サーバーレスを作成する方法について説明します。

マシンを設定する

このクイックスタートは、ローカルマシンや Compute Engine VM インスタンスなどの Google サービスにアクセスできるマシンで設定して実行できます。

  1. Python 3.8+ がマシンにインストールされていることを確認します。Python は python.or/downloads からダウンロードしてインストールできます。

    1. Python 3.8+ のインストールを確認します。

      python3 --version
      
  2. [JupyterLab 3.6.3+] をマシンにインストールします。

    pip3 install --upgrade jupyterlab
    
    1. JupyterLab 3.6.3 以降のインストールを確認します。

      pip3 show jupyterlab
      
  3. Dataproc JupyterLab プラグインをインストールします。

    pip3 install dataproc-jupyter-plugin
    
    1. JupyterLab のバージョンが 4.0.0 より前の場合は、プラグイン拡張機能を有効にします。

      jupyter server extension enable dataproc_jupyter_plugin
      
  4. JupyterLab を起動する

    jupyter lab
    
    1. ブラウザで Jupyter ランチャー ページが開きます。Dataproc のジョブとセッションのセクションが含まれています。また、次のものが含まれる場合もあります:プロジェクトでJupyter のオプション コンポーネントを実行している Dataproc サーバーレス ノートブックまたは Dataproc クラスタにアクセスできる場合は、Dataproc サーバーレス ノートブックおよび Dataproc クラスタ ノートブックのセクションを含めることもできます。

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

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

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

JupyterLab

  1. JupyterLab Launcher ページの [Dataproc Cluster Notebooks] セクションで New runtime template カードをクリックします。

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

  3. [Display name] と [Description] を指定し、他の設定を入力または確認します。

    注:

    • ネットワーク構成: サブネットワーク必須限定公開の Google アクセスすべてのポートでサブネット通信を許可する必要があります(Dataproc Serverless for Spark のネットワーク構成)。 始める前にgcloud init を実行したときに構成したリージョンの default ネットワークのサブネットが限定公開の Google アクセスに対して有効になっていない場合は、次の操作を行う必要があります。限定公開の Google アクセスを有効にするか、限定公開の Google アクセスが有効になっているリージョン サブネットワークを持つ別のネットワークを選択します。Dataproc サーバーレスが使用するリージョンは、JupyterLab の [設定] > [Dataproc 設定] ページで変更できます。

    • Metastore: このセクションのフィールドを使用して、セッションで使用する使用可能な Dataproc Metastore サービスを選択できます。

    • 最大アイドル時間: セッションが自動的に終了する前のノートブックの最大アイドル時間。範囲: 10 分~ 336 時間(14 日)。

    • 最大セッション時間: セッションが自動的に終了する前のセッションの最大存続時間。範囲: 10 分~ 336 時間(14 日)。

    • PHS: 利用可能な永続 Spark 履歴サーバーを選択して、セッション中およびセッション後にセッションログにアクセスできます。

    • Spark プロパティ: サーバーレス Spark セッションに設定する各プロパティの [プロパティの追加] をクリックします。サポートされている Spark プロパティとサポートされていない Spark プロパティの説明については、Dataproc Serverless for Spark のネットワーク構成をご覧ください。

    • ラベル:サーバーレス Spark セッションに設定する各ラベルの [ラベルを追加] をクリックします。

  4. [Dataproc 設定] ページに、ランタイム テンプレートが一覧表示されます。リスト内のテンプレートの [アクション] メニューから、テンプレートを削除できます。

  5. [Save] をクリックします。

  6. ランチャー ページを開いて再読み込みし、JupyterLab ランチャーに保存されているノートブック テンプレート カードを表示します。

gcloud

  1. ランタイム テンプレート構成で YAML ファイルを作成します。

    例:

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

    始める前にgcloud init を実行したときに構成したリージョンの default ネットワークのサブネットが限定公開の Google アクセスに対して有効になっていない場合は、次の操作を行う必要があります。限定公開の Google アクセスを有効にするか、限定公開の Google アクセスが有効になっているリージョン サブネットワークを持つ別のネットワークを選択します。Dataproc サーバーレスが使用するリージョンは、JupyterLab の [設定] > [Dataproc 設定] ページで変更できます。

  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
    
    • セッション テンプレートを記述、一覧表示、エクスポート、削除するためのコマンドについては、gcloud beta dataproc session-templates をご覧ください。

ノートブックを開く

JupyterLab Launcher ページの [Dataproc サーバーレス ノートブック] セクションには、サーバーレス ランタイム テンプレートで指定されたランタイム カーネルにマッピングされるノートブック テンプレート カードが表示されます。

  1. ランタイム カーネルカードをクリックしてセッションを作成し、ノートブックを開きます。セッションの作成が完了し、カーネルが使用可能になると、カーネルのステータスが Unknown から Idle に変更され、ノートブックが開きます。

    セッションのステータスを表示するには、[JupyterLab ランチャー] ページのDataproc ジョブとセッションサーバーレスカードをクリックしてから、セッションタブをクリックします。セッションが完全にプロビジョニングされ、コードを実行する準備が整うと、セッションのステータスが Creating から Active に変わります。

  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] をクリックすると、ノートブック セッションを終了できます。

    • セッションを終了しない場合、Dataproc はセッション アイドル タイマーが期限切れになるとセッションを終了します。セッションのアイドル時間は、ランタイム テンプレートの構成で構成できます。デフォルトのセッション アイドル時間は 1 時間です。

Vertex AI

このセクションでは、Vertex AI Workbench を使用してマネージド セッションを作成し、セッションで PySpark ノートブックを開いて使用する方法を説明します。

  1. Google Cloud コンソールで [Vertex AI Workbench] ページに移動します。[新しいノートブック] をクリックして、新しいマネージド ノートブックを開きます。
  2. [マネージド ノートブックの作成] ページのフィールドに入力します。
    1. ノートブック名: ノートブックの名前を入力します。
    2. リージョン: リストからリージョンを選択します。Vertex AI マネージド ノートブックは、記載されているリージョンで利用できます。
    3. 権限:Single user only を選択します。
    4. ユーザーのメールアドレス: メールアドレスを入力します。
    5. [作成] をクリックしてノートブックを作成し、[Vertex AI Workbench] ページに戻ります。
  3. ノートブックは、[Vertex AI Workbench] ページに表示されます。このリンクが有効になったら、ノートブックの行で [JupyterLab を開く] をクリックします。
  4. 表示された [マネージド ノートブックを認証する] ダイアログで [認証] をクリックして、Vertex AI Workbench がデータにアクセスし、マネージド ノートブックを認証してからアカウントを選択し、JupyterLab を開くためのアクセスを許可します。
  5. ノートブックの [ランチャー] タブで、[サーバーレス Spark] を選択してセッションを作成します。
  6. [サーバーレス Spark セッションの作成] ページに入力します。
    1. セッション名:セッションの名前を入力します。各セッションは 1 つの Jupyter ノートブックをサポートしています。
    2. 言語: [PySpark] を選択します。
    3. 実行構成: Compute Engine のデフォルトのサービス アカウントを使用するには、サービス アカウントの項目を空のままにします。
    4. ネットワークの構成:
      1. [このプロジェクトのネットワーク] をクリックします。セッションを実行する VPC サブネットワークは、Dataproc Serverless for Spark のネットワーク構成に記載されている要件を満たしている必要があります。
      2. プロジェクト内のネットワークとサブネットワークをリストから選択します。選択したネットワーク内の、限定公開の Google アクセスが有効になっているサブネットワークがリストに表示されます。
    5. [Submit] をクリックしてセッションを開始します。アクティビティ ログには、セッションの初期化の進行状況が表示されます。
      Google Cloud コンソールの Dataproc [セッション] ページからセッションのステータスをモニタリングすることもできます。
  7. セッションの初期化が完了すると、JupyterLab で [Untitled.ipynb] ノートブック タブが開きます。次の 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))
    
  8. [Untitled.ipynb] ノートブック タブを閉じます。JupyterLab でノートブックを閉じると、Dataproc Serverless はセッションの検出と終了を試みます。