サーバーレス バッチとインタラクティブ ノートブックのセッションに 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. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  3. Dataproc API を有効にします。

    API を有効にする

  4. Google Cloud CLI をインストールします。
  5. gcloud CLI を初期化するには:

    gcloud init
  6. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

    プロジェクト セレクタに移動

  7. Dataproc API を有効にします。

    API を有効にする

  8. Google Cloud CLI をインストールします。
  9. gcloud CLI を初期化するには:

    gcloud init

Dataproc JupyterLab プラグインをインストールする

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

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

  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 の [ランチャー] ページがブラウザで開きます。Dataproc のジョブとセッションのセクションが含まれています。また、次のものが含まれる場合もあります:プロジェクトで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: 使用可能な永続 Spark 履歴サーバーを選択して、セッション中およびセッション後のセッションログにアクセスできます。

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

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

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

    • テンプレートの [操作] メニューからテンプレートを削除できます。
  5. [Save] をクリックします。

  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 メタストア(HMS)サービスです。

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

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

メタデータ エクスプローラでデータベース、テーブル、列を検索できます。データベース、テーブル、列名をクリックすると、関連するメタデータが表示されます。

コードをデプロイする

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. [サーバーレス] カードをクリックします。
  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 をクリックします。