Sparkアプリケーション投稿用のパラメータをカスタマイズする

適用範囲スパークエンジン グルテン加速スパークエンジン

このトピックでは、Sparkアプリケーションのペイロードにidempotencyキーを含めるように設定する方法と、 watsonx.data でSparkアプリケーションをサブミットする際の最大実行時制御を設定する方法について説明します。

watsonx.data で Spark アプリケーションを提出する際、アプリケーションのペイロードをカスタマイズして以下の機能を含めることができます:

アイデンポテンシー・キー:これは、クライアントとサーバーの通信に障害が発生した場合でも、アプリケーションの送信が正確に一度だけ処理されることを保証します。 例えば、スパークのアプリケーションを提出する場合を考えてみよう。 クライアントとサーバー間の一時的なネットワークの問題により、リクエストがタイムアウトし、確認を受け取ることができません。 ジョブが正常に送信されたかどうか確信が持てず、送信を何度もやり直す。 再試行のたびに新しいアプリケーションIDが作成されるため、同じジョブの複数のインスタンスが実行され、不必要なリソースを消費する可能性がある。 これを避けるために、アプリケーションのペイロードにIdempotencyキーを含めることができます。 このキーは、ジョブ提出の一意識別子として機能する。 同じIDempotencyキーで同じ申請を再提出した場合、同じIDempotencyキーを持つ複数の申請は1つの申請として扱われます。

最大実行時間の制御:Sparkアプリケーションの最大実行時間を定義できます。 タイムアウトが指定されていない場合、ジョブが完了するまで、その時間に関係なく実行され続ける。

ペイロードにアイドルポテンシー・キーを設定する

Sparkアプリケーションのペイロードでidempotency_keyパラメータを使用して、ジョブの重複投入を回避する。 これにより、同じキーで繰り返されるリクエストは一つのリクエストとして扱われる。 idempotency_keyの長さは64文字を超えることはできない。

以下はペイロードのサンプルである。 申請時に<userdefined_key>フィールドにidempotency_keyパラメータ値を指定する。 猫 idempotency_test.json

{
  "application_details": {
    "application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
    "arguments": [
      "/opt/ibm/spark/examples/src/main/resources/people.txt"
    ],
    "conf": {
      "spark.app.name": "PySpark Application",
      "spark.eventLog.enabled": "true"
    }
  },
  "idempotency_key": "<userdefined_key>"
}

ペイロードの最大実行時間の設定

ペイロードのtimeout_in_secondsパラメータを使用して、アプリケーション送信中の最大実行時間を指定する。

以下は、アプリケーションの送信中に timeout_in_seconds を設定する方法を示すサンプル・ペイロードです。 ここで、最大実行時間は10秒である。 タイムアウトが指定されていない場合、ジョブはその所要時間にかかわらず、完了するまで実行され続ける。

{
    "application_details": {
                "application":"cos://uma-cos-1.mycos/longrunning_with_sleep.py",
    "conf": {
      "spark.app.name": "cosApp",
      "spark.hadoop.fs.cos.mycos.endpoint": "s3.us-south.cloud-object-storage.appdomain.cloud",
      "spark.hadoop.fs.cos.mycos.secret.key": "fbf6bcc31eb2bf85ebd02949edf26cf893a9256bcfa91ebe",
      "spark.hadoop.fs.cos.mycos.access.key": "73976d45c75e4d548381e4da0e98f816"
    }
        },
    "timeout_in_seconds":"60"
}'