サーバーレス バッチとインタラクティブ ノートブックのセッションに Dataproc JupyterLab プラグインを使用する

Dataproc Serverless の制限と考慮事項

  • Spark ジョブは、送信ユーザーの ID ではなく、サービス アカウント ID で実行されます。

準備

  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 JupyterLab プラグインをインストールする

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

プラグインをインストールする手順は次のとおりです。

  1. マシンに Python 3.8+ がインストールされていることを確認します。Python は python.org/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. ブラウザで JupyterLab の [Launcher] ページが開きます。これには、[Dataproc Jobs and Sessions] セクションが含まれています。また、次のものが含まれる場合もあります:プロジェクトでJupyter のオプション コンポーネントを実行している Dataproc サーバーレス ノートブックまたは Dataproc クラスタにアクセスできる場合は、Dataproc サーバーレス ノートブックおよび Dataproc クラスタ ノートブックのセクションを含めることもできます。

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

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

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

JupyterLab

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

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

  3. [表示名] と [説明] を指定し、他の設定を入力または確認します。

    注:

    • ネットワーク構成: サブネットワーク限定公開の Google アクセスを有効にし、すべてのポートでサブネットの通信を許可する必要があります(Dataproc Serverless for Spark のネットワーク構成を参照してください)。

      始める前にgcloud init を実行したときに構成したリージョンの default ネットワークのサブネットが、限定公開の Google アクセスに対して有効になっていない場合:

      • 限定公開の Google アクセスに対して有効にするか、
      • 限定公開の Google アクセスが有効になっているリージョン サブネットワークを持つ別のネットワークを選択します。Dataproc Serverless が使用するリージョンは、JupyterLab の [設定] > [Dataproc 設定] ページで変更できます。
    • Metastore: セッションで Dataproc Metastore サービスを使用するには、メタストアのプロジェクト ID、リージョン、サービスを選択します。

    • 最大アイドル時間: セッションが終了するまでのノートブックの最大アイドル時間。指定できる範囲: 10 分~336 時間(14 日)。

    • 最大セッション時間: セッションが終了するまでのセッションの最大存続時間。指定できる範囲: 10 分~336 時間(14 日)。

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

    • Spark プロパティ: サーバーレス Spark セッションに設定するプロパティごとに [プロパティを追加] をクリックします。Spark ランタイム、リソース、自動スケーリングのプロパティなど、サポートされている Spark プロパティとサポートされていない Spark プロパティのリストについては、Spark プロパティをご覧ください。

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

  4. [設定 > Dataproc の設定] ページでランタイム テンプレートを表示します。

    • テンプレートを削除するには、テンプレートの [操作] メニューを使用します。
  5. [保存] をクリックします。

  6. 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

    environmentConfig:
      executionConfig:
        serviceAccount: sa1
        # Choose either networkUri or subnetworkUri
        networkUri: default
        subnetworkUri: subnet
        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: "1.1"
      containerImage: gcr.io/my-project-id/my-image:1.0.1
      properties:
        "p1": "v1"
    description: Team A Development Environment
    

    始める前にgcloud init を実行したときに構成したリージョンの default ネットワークのサブネットが、限定公開の Google アクセスに対して有効になっていない場合:

    • 限定公開の Google アクセスに対して有効にするか、
    • 限定公開の Google アクセスが有効になっているリージョン サブネットワークを持つ別のネットワークを選択します。Dataproc Serverless が使用するリージョンは、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
    

ノートブックを起動して管理する

Dataproc JupyterLab プラグインをインストールした後、JupyterLab の [ランチャー] ページでテンプレート カードをクリックして、次の操作を行うことができます。

Dataproc Serverless で Jupyter ノートブックを起動する

JupyterLab ランチャー ページの [Dataproc Serverless Notebooks] セクションには、Dataproc Serverless ランタイム テンプレートにマッピングされるノートブック テンプレート カードが表示されます(Dataproc Serverless ランタイム テンプレートを作成するを参照してください)。

  1. カードをクリックして Dataproc Serverless セッションを作成し、ノートブックを起動します。セッションの作成が完了し、ノートブック カーネルが使用可能になると、カーネルのステータスは Unknown から Idle に変わります。

  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 時間です。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

PySpark と Python のコード開発

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

SQL のコード開発

JupyterLab の [ランチャー] ページの [Dataproc Serverless ノートブック] セクションまたは [Dataproc クラスタ ノートブック] セクションの PySpark カードをクリックして、PySpark ノートブックを開き SQL コードを記述し、実行します。

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

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

Dataproc Serverless 2.1 ランタイムには、BigQuery Spark コネクタが含まれています。Dataproc Serverless 2.0 以前のランタイムを使用して、Dataproc Serverless ノートブックを起動する場合は、次の Spark プロパティをDataproc Serverless ランタイム テンプレートに追加して Spark BigQuery コネクタをインストールできます。

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

Scala のコード開発

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

  • JupyterLab の [ランチャー] ページの [Dataproc クラスタ ノートブック] セクションの Apache Toree カードをクリックして、Scala コード開発用のノートブックを開きます。

メタデータ エクスプローラ

Dataproc Metastore(DPMS)インスタンスがDataproc Serverless ランタイム テンプレートまたは、Compute Engine クラスタの Dataproc に接続されている場合、ノートブックを開くと、DPMS インスタンス スキーマが JupyterLab メタデータ エクスプローラに表示されます。DPMS は、Google Cloud 上のフルマネージドで水平方向にスケーラブルな Hive Metastore(HMS)サービスです。

メタデータ エクスプローラで HMS メタデータを表示するには、以下の手順に従ってください。

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

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

コードをデプロイする

Dataproc JupyterLab プラグインをインストールした後、JupyterLab を使用して次のことができます。

  • Dataproc Serverless インフラストラクチャでノートブック コードを実行する

  • Dataproc Serverless インフラストラクチャまたは Dataproc on Compute Engine クラスタにバッチジョブを送信します。

Dataproc Serverless でノートブック コードを実行する

  • 実行アイコンをクリックするか、Shift-Return キーを押して、ノートブック セルでコードを実行します。

  • [実行] メニューを使用して、1 つ以上のノートブック セルでコードを実行します。

Dataproc Serverless にバッチジョブを送信する

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

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

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

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

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

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

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

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

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

Dataproc JupyterLab プラグインをインストールしたら、JupyterLab の [ランチャー] ページの [Dataproc のジョブとセッション] セクションで Dataproc Serverless と Dataproc on Compute Engine を表示して管理できます。

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

Dataproc Serverless セッションを表示して管理するには:

  1. [Serverless] カードをクリックします。
  2. [セッション] タブをクリックしてから、セッション ID をクリックして [セッションの詳細] ページを開き、セッション プロパティを表示し、ログ エクスプローラで Google Cloud のログを表示して、セッションを終了します。注: 各 Dataproc Serverless ノートブックを起動するための一意の Dataproc Serverless セッションが作成されます。

Dataproc Serverless バッチを表示して管理するには:

  1. [バッチ] タブをクリックすると、現在のプロジェクトとリージョンの Dataproc Serverless バッチのリストが表示されます。バッチ ID をクリックして、バッチの詳細を表示します。

Dataproc on Compute Engine クラスタを表示して管理するには:

  1. [クラスタ] カードをクリックします。[クラスタ] タブが選択され、現在のプロジェクトとリージョン内のアクティブな Dataproc on Compute Engine クラスタが一覧表示されます。[アクション] 列のアイコンをクリックして、クラスタを起動、停止、再起動できます。クラスタ名をクリックして、クラスタの詳細を表示します。[アクション] 列のアイコンをクリックして、ジョブのクローン作成、停止、削除を行えます。

Dataproc on Compute Engine ジョブを表示して管理するには:

  1. [ジョブ] カードをクリックして、現在のプロジェクトに存在するジョブのリストを表示します。ジョブの詳細を表示するには、ジョブ ID をクリックします。