Apache Spark バッチ ワークロードを送信する

必要に応じてリソースをスケールする Managed Service for Apache Spark コンピューティング インフラストラクチャでバッチ ワークロードを送信する方法を学習します。

始める前に

プロジェクトを設定し、必要に応じて Identity and Access Management のロールを付与します。

プロジェクトを設定する

必要に応じて、次の手順を 1 つ以上行います。

  1. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Roles required to select or create a project

    • Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
    • Create a project: To create a project, you need the Project Creator role (roles/resourcemanager.projectCreator), which contains the resourcemanager.projects.create permission. Learn how to grant roles.

    Go to project selector

  2. Verify that billing is enabled for your Google Cloud project.

  3. Enable the Dataproc API, if it is not already enabled.

    Roles required to enable APIs

    To enable APIs, you need the serviceusage.services.enable permission. If you created the project, then you likely already have this permission through the Owner role (roles/owner). Otherwise, you can get this permission through the Service Usage Admin role (roles/serviceusage.serviceUsageAdmin). Learn how to grant roles.

    Enable the API

必要に応じて IAM ロールを付与する

このページの例を実行するには、特定の IAM ロールが必要です。組織のポリシーによっては、これらのロールがすでに付与されている場合があります。ロールの付与を確認するには、ロールを付与する必要があるかどうかをご覧ください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

ユーザーロール

サーバーレス バッチ ワークロードを送信するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

サービス アカウント ロール

Compute Engine のデフォルトのサービス アカウントにサーバーレス バッチ ワークロードを送信するために必要な権限を付与するには、プロジェクトの Compute Engine のデフォルトのサービス アカウントに Dataproc ワーカー(roles/dataproc.worker)IAM ロールを付与するよう管理者に依頼してください。

Spark バッチ ワークロードの送信

Google Cloud コンソール、Google Cloud CLI、または REST API を使用して、Managed Service for Apache Spark バッチ ワークロードを作成して送信できます。

コンソール

  1. Google Cloud コンソールで、Managed Service for Apache Spark の [ジョブ] ページに移動します。

    [Managed Service for Apache Spark ジョブ] に移動

  2. [ジョブを送信] をクリックして、[ジョブを送信] ページを開きます。

  3. 次のフィールドを選択して入力し、pi の近似値を計算する Spark バッチ ワークロードを送信します。

    • ジョブのコンピュート タイプの選択: [サーバーレス Spark] を選択します。
    • サーバーレス ジョブの詳細:
      • ジョブ ID: バッチ ワークロードの ID を指定します(またはデフォルトの ID をそのまま使用します)。この値は 4 ~ 63 文字の英小文字で指定します。先頭と末尾は英小文字または数字にしてください。使用できるのは英小文字、数字、ハイフン(/[a-z0-9-]/)のみです。
      • ランタイム プロファイル: [リージョン] リストでリージョンを選択し、[ランタイム プロファイル] リストで [デフォルトのサービス構成](または保存済みのランタイム プロファイル)を選択します。
      • ランタイム プロファイルを構成する(省略可): [概要] カードで [構成] をクリック(または [ランタイム プロファイル] メニューで [新しいプロファイルを作成] をクリック)して、ランタイム プロファイル構成パネルを開きます。ここで、次の設定をカスタマイズして、[構成を使用](または [新しいプロファイルを保存])をクリックします。
        • ティアとエグゼキュータの構成: コンピューティング ティア(プレミアムまたはスタンダード)とエグゼキュータのシェイプを選択します。
        • 追加構成:
          • ランタイム構成: [編集] をクリックして、3.0 Spark ランタイム バージョンを確認または選択します。または、カスタム Spark イメージ、Cloud Storage ステージング バケット、Python パッケージ リポジトリを指定します。
          • メタストアの構成: [編集] をクリックして、レイクハウス カタログまたは外部のセルフマネージド Dataproc Metastore を使用するようにワークロードを構成します。
          • ネットワークとセキュリティ: [編集] をクリックして、[サービス アカウント] を選択します(デフォルトでは、ワークロードは Compute Engine のデフォルトのサービス アカウントを使用して実行されます。または、Dataproc ワーカーロールを持つカスタム サービス アカウントを指定することもできます)。ワークロード リージョンで [サブネットワーク] を選択します(Managed Service for Apache Spark は、指定されたサブネットでプライベート Google アクセス(PGA)を有効にします。Managed Service for Apache Spark のネットワーク構成をご覧ください)。
    • ファイルとアーティファクト:
      • サービスの種類: [Spark(Scala / Java)] を選択します。
      • ドライバの構成: [メインクラス] を選択します。
      • メインクラス:
        org.apache.spark.examples.SparkPi
      • 引数: 「1000」と入力して Enter を押します。
      • jar ファイル(このファイルは Managed Service for Apache Spark 実行環境にプリインストールされています)。
        file:///usr/lib/spark/examples/jars/spark-examples.jar
    • ジョブの実行とプロパティ:
      • Spark プロパティ: [プロパティを追加] をクリックして、Spark バッチ ワークロードに設定するサポートされている Spark プロパティのキー(プロパティ名)と値を入力します。注: Managed Service for Apache Spark のクラスタ プロパティとは異なり、Managed Service for Apache Spark のワークロード プロパティに spark: 接頭辞が含まれていません。
      • ラベル: 省略可: [ラベルを追加] をクリックして、キーと値のラベルペアをワークロードにアタッチします。
  4. [送信] をクリックして、Spark バッチ ワークロードを実行します。

gcloud

Spark バッチ ワークロードを送信して pi の近似値を計算するには、次の gcloud CLI の gcloud dataproc batches submit spark コマンドをターミナル ウィンドウまたは Cloud Shell でローカルに実行します。

gcloud dataproc batches submit spark \
    --region=REGION \
    --version=3.0 \
    --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
    --class=org.apache.spark.examples.SparkPi \
    -- 1000

次のように置き換えます。

  • REGION: ワークロードが実行されるリージョンを指定します。
  • その他のオプション: gcloud dataproc batches submit spark フラグを追加して、他のワークロード オプションと Spark プロパティを指定できます。
    • --jars: サンプル JAR ファイルが Spark 実行環境にプリインストールされています。SparkPi ワークロードに渡される 1000 コマンド引数は、円周率の見積もりロジックを 1,000 回繰り返し指定します。(ワークロード入力引数は「--」の後に含まれます)
    • --subnet: このフラグを追加して、セッション リージョンのサブネットの名前を指定できます。サブネットを指定しない場合、Managed Service for Apache Spark はセッション リージョンの default サブネットを選択します。Managed Service for Apache Spark は、サブネットでプライベート Google アクセス(PGA)を有効にします。ネットワーク接続の要件については、Managed Service for Apache Spark のネットワーク構成をご覧ください。
    • --tags: このフラグを追加して、トラフィック制御のネットワーク タグを指定できます。ネットワーク タグを使用して接続を制限します。本番環境では、Spark ワークロードによって使用される IP アドレスにファイアウォール ルールを制限することをおすすめします。
    • --properties: このフラグを追加して、Spark バッチ ワークロードで使用するサポートされている Spark プロパティを入力できます。
    • --deps-bucket: このフラグを追加して、Managed Service for Apache Spark がワークロードの依存関係をアップロードする Cloud Storage バケットを指定できます。バケットの gs:// URI 接頭辞は必要ありません。バケットのパスまたはバケット名を指定できます。Managed Service for Apache Spark は、バッチ ワークロードを実行する前に、ローカル ファイルをバケット内の /dependencies フォルダにアップロードします。注: バッチ ワークロードがローカルマシン上の参照ファイルを参照する場合、このフラグは必須です。
    • --ttl: --ttl フラグを追加して、バッチの有効期間の長さを指定できます。ワークロードがこの期間を超えると、進行中の作業の終了を待たずに無条件に終了します。期間は、s、m、h、d(秒、分、時間、日)の接尾辞を使用して指定します。最小値は 10 分(10m)、最大値は 14 日(14d)です。
      • 1.1 または 2.0 ランタイム バッチ: 1.1 または 2.0 ランタイム バッチ ワークロードで --ttl が指定されていない場合、ワークロードは自然に終了するまで実行されます(終了しない場合、永続的に実行されます)。
      • 2.1 以降のランタイム バッチ: 2.1 以降のランタイム バッチ ワークロードで --ttl が指定されていない場合、デフォルトは 4h です。
    • --service-account: ワークロードの実行に使用するサービス アカウントを指定できます。サービス アカウントを指定しない場合、ワークロードは Compute Engine のデフォルトのサービス アカウントで実行されます。サービス アカウントには Dataproc ワーカーのロールが必要です。
    • Hive メタストア: 次のコマンドは、標準の Spark 構成を使用する外部のセルフマネージド Hive メタストアを使用するようにバッチ ワークロードを構成します。
      gcloud dataproc batches submit spark\
          --properties=spark.sql.catalogImplementation=hive,spark.hive.metastore.uris=METASTORE_URI,spark.hive.metastore.warehouse.dir=WAREHOUSE_DIR> \
          other args ...
              
    • 永続的履歴サーバー:
      1. 次のコマンドは、単一ノードの Managed Service for Apache Spark クラスタに PHS を作成します。PHS は、バッチ ワークロードを実行するリージョンに配置する必要があり、Cloud Storage bucket-name が存在している必要があります。
        gcloud dataproc clusters create PHS_CLUSTER_NAME \
            --region=REGION \
            --single-node \
            --enable-component-gateway \
            --properties=spark:spark.history.fs.logDirectory=gs://bucket-name/phs/*/spark-job-history
                     
      2. 実行中の永続履歴サーバーを指定してバッチ ワークロードを送信します。
        gcloud dataproc batches submit spark \
            --region=REGION \
            --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
            --class=org.apache.spark.examples.SparkPi \
            --history-server-cluster=projects/project-id/regions/region/clusters/PHS-cluster-name \
            -- 1000
                      
    • ランタイム バージョン: --version フラグを使用して、ワークロードの Managed Service for Apache Spark ランタイム バージョンを指定します。
      gcloud dataproc batches submit spark \
          --region=REGION \
          --jars=file:///usr/lib/spark/examples/jars/spark-examples.jar \
          --class=org.apache.spark.examples.SparkPi \
          --version=VERSION
          -- 1000
                  

API

このセクションでは、Managed Service for Apache Spark の batches.create を使用して、pi の近似値を計算するバッチ ワークロードを作成する方法について説明します。

リクエストのデータを使用する前に、次のように置き換えます。

  • project-id: Google Cloud プロジェクト ID。
  • region: Managed Service for Apache Spark がワークロードを実行する Compute Engine リージョン。
  • 注:

    • PROJECT_ID: 実際の Google Cloud プロジェクト ID。 プロジェクト ID は、 Google Cloud コンソールのダッシュボードの [プロジェクト情報] セクションに表示されます。
    • REGION: セッション リージョン。

HTTP メソッドと URL:

POST https://dataproc.googleapis.com/v1/projects/project-id/locations/region/batches

リクエストの本文(JSON):

{
  "sparkBatch":{
    "args":[
      "1000"
    ],
    "runtimeConfig": {
      "version": "2.3",
    },
    "jarFileUris":[
      "file:///usr/lib/spark/examples/jars/spark-examples.jar"
    ],
    "mainClass":"org.apache.spark.examples.SparkPi"
  }
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
"name":"projects/project-id/locations/region/batches/batch-id",
  "uuid":",uuid",
  "createTime":"2021-07-22T17:03:46.393957Z",
  "sparkBatch":{
    "mainClass":"org.apache.spark.examples.SparkPi",
    "args":[
      "1000"
    ],
    "jarFileUris":[
      "file:///usr/lib/spark/examples/jars/spark-examples.jar"
    ]
  },
  "runtimeInfo":{
    "outputUri":"gs://dataproc-.../driveroutput"
  },
  "state":"SUCCEEDED",
  "stateTime":"2021-07-22T17:06:30.301789Z",
  "creator":"account-email-address",
  "runtimeConfig":{
    "version":"2.3",
    "properties":{
      "spark:spark.executor.instances":"2",
      "spark:spark.driver.cores":"2",
      "spark:spark.executor.cores":"2",
      "spark:spark.app.name":"projects/project-id/locations/region/batches/batch-id"
    }
  },
  "environmentConfig":{
    "peripheralsConfig":{
      "sparkHistoryServerConfig":{
      }
    }
  },
  "operation":"projects/project-id/regions/region/operation-id"
}

ワークロードの費用を見積もる

Managed Service for Apache Spark ワークロードは、データ コンピューティング ユニット(DCU)とシャッフル ストレージ リソースを消費します。Managed Service for Apache Spark の UsageMetrics を出力してワークロード リソースの消費とコストを見積もる例については、Managed Service for Apache Spark の料金をご覧ください。

次のステップ

以下の内容について学習します。