API 経由での Spark ジョブの送信
IBM Cloud Pak for Data では、 IBM Analytics Engine powered by Apache Spark の Spark ジョブ REST API を使用することで、 Watson Studio をインストールすることなく、 IBM Cloud Pak for Data クラスタ上で Spark アプリケーションを実行できます。
なお、『 IBM 』( Analytics Engine powered by Apache Spark )のドキュメントでは、 「Sparkアプリケーション 」と「 Sparkジョブ」 という用語は、同じ意味で使用されています。
サービス このサービスはデフォルトでは利用できません。 管理者は、 IBM Cloud Pak for Data プラットフォームにこのサービスをインストールする必要があります。 サービスがインストールされているかどうかを確認するには、サービスカタログを開き、そのサービスが有効になっているか確認してください。
Sparkジョブ用REST APIの新しい V4 バージョンが利用可能になりました。このバージョンでは、非同期ジョブ送信や新機能が追加され、 V3 のAPI機能が拡張されています。 旧バージョンの V3 APIは非推奨となっており、 V4 APIへのアップグレードをお勧めします。 現在も V3 APIをご利用の場合は、詳細については IBM Cloud Pak for Data 4.5 のドキュメントをご参照ください。
V3 リソースクォータAPIは非推奨となっており、近い将来に削除される予定です。
V2 のAPIバージョンも非推奨となっています。 V2 APIは引き続き利用可能ですが、アプリケーションでは V4 APIの使用を開始してください。 V2 API の詳細については、 IBM Cloud Pak for Data 3.5 のドキュメントを参照してください。
Sparkジョブの送信
SparkジョブREST APIを使用すれば、Spark SQLやデータ変換、データサイエンス、機械学習のジョブを実行するあらゆるSparkアプリケーションを送信できます。 送信された各ジョブは、専用のクラスタで実行されます。 jobs API を通じて渡された設定は、すべてデフォルトの設定を上書きします。
Sparkジョブを送信するには:
SparkジョブAPIのサービスエンドポイントを取得します:
ナビゲーションメニューから、 「サービス」>「インスタンス」 をクリックし、対象のインスタンスを見つけてクリックすると、インスタンスの詳細が表示されます。
- 「アクセス情報」の下にあるSparkジョブのエンドポイントをコピーして保存してください。
まだトークンを生成していない場合は、トークンを生成してください。 「API認証トークンの生成」 を参照してください。
生成したエンドポイントとアクセストークンを使用して、ジョブを送信してください。 実行したいジョブは、 IBM Cloud Pak for Data クラスタ上のファイルストレージシステム、または IBM Cloud Object Storage 内に配置できます。 「ストレージに関する注意事項」 を参照してください。
注: Sparkアプリケーションは、いかなる場合でも終了コードを返す必要があります。失敗や例外が発生した場合は0以外を、正常に実行された場合は0を返す必要があります。
以下の例は、Sparkインスタンスに単語数カウントアプリケーションをデプロイする方法を示しています。 Sp arkジョブの送信構文、使用可能なパラメータ、および返されるエラーコードについては、「SparkジョブAPIの構文」を参照してください。
最初の例には、必須の最小限のパラメータが含まれています:
curl -k -X POST <V4_JOBS_API_ENDPOINT> -H "Authorization: ZenApiKey ${TOKEN}" -d '{
"application_details": {
"application": "/opt/ibm/spark/examples/src/main/python/wordcount.py",
"arguments": ["/opt/ibm/spark/examples/src/main/resources/people.txt"]
}
}'
2つ目の例は1つ目の例を基にしており、クラスタのハードウェア構成をカスタマイズする方法について説明しています:
curl -k -X POST <V4_JOBS_API_ENDPOINT> -H "Authorization: ZenApiKey ${TOKEN}" -d '{
"application_details": {
"application": "/opt/ibm/spark/examples/jars/spark-examples*.jar",
"arguments": ["1"],
"class": "org.apache.spark.examples.SparkPi",
"conf": {
"spark.driver.memory": "4G",
"spark.driver.cores": 1,
"spark.executor.memory": "4G",
"spark.executor.cores": 1,
"ae.spark.executor.count": 1
}
}
}'
Sparkジョブのステータス
Sparkジョブを送信した後、ジョブの実行状況を含むジョブの詳細を確認できます。
想定される実行状態は以下の通りです:
| 状態 | 説明 |
|---|---|
| ACCEPTED | Sparkジョブの検証が正常に完了し、アプリケーションの送信プロセスが開始されました |
| 待機中 | Sparkジョブの検証は正常に完了しましたが、リソースクォータまたはクラスタリソースが不足しているため、Sparkジョブはキューに入れられています |
| 開始中 | Sparkジョブは正常に送信され、Sparkアプリケーションの起動を待機中です |
| WAITING | Sparkジョブは正常に送信され、リソースの割り当てを待機しています(通常、各ジョブには即座に専用リソースが割り当てられるため、RUNNING状態に移行するまで数分の1秒しかかかりません) |
| 実行しています | Sparkジョブは正常に送信され、現在実行中です |
| 失敗 | Sparkジョブは正常に送信されましたが、Sparkアプリケーションの実行に失敗したか、0以外の終了コードが返されました |
| 終了 | Sparkジョブは正常に送信され、Sparkアプリケーションは終了コード0で正常に実行されました |
| 停止済み | Sparkジョブは正常に送信され、ユーザーは実行中のジョブをキャンセルするためにDELETE API呼び出しを開始しました。 |
| 不明 | Sparkジョブの送信は成功しましたが、アプリケーションの状態を取得中にエラーが発生しました |
ステータスを確認できます:
Spark Jobs API を使用することで:
現在募集中の求人をすべて表示:
curl -k -X GET <V4_JOBS_API_ENDPOINT>?state=RUNNING -H "Authorization: ZenApiKey ${TOKEN}"なお、ステートにある
FINISHEDジョブは削除され、すべてのジョブのリストには表示されません。ジョブのステータスを取得する:
curl -k -X GET <V4_JOBS_API_ENDPOINT>/<job_id> -H "Authorization: ZenApiKey ${TOKEN}"回答例:
{ "application_id": "28ce7f71-a357-4583-9de8-6607047ca783", "state": "RUNNING", "start_time": "Monday' 07 June 2021 '14:46:23.237+0000", "spark_application_id": "app-20210607144623-0000" }すべての求人を表示:
curl -k -X GET <V4_JOBS_API_ENDPOINT> -H "Authorization: ZenApiKey ${TOKEN}"特定の州を含むすべての求人を一覧表示する:
次の例は、状態が「RUNNING」または「FAILED」のすべてのジョブを一覧表示します。 APIを通じて照会できるジョブのステータスについては、このセクションの冒頭にある表に一覧が記載されています。
curl -k -X GET <V4_JOBS_API_ENDPOINT>?state=WAITING,RUNNING,FAILED,UNKNOWN,STOPPED
ジョブ UI で、Spark の高度な機能が有効になっている場合。 「高度な機能の使用 」を参照してください:
ナビゲーションメニューから、 「サービス」>「インスタンス」 をクリックし、対象のインスタンスを見つけてクリックすると、インスタンスの詳細が表示されます。
インスタンス詳細ページの右側にあるをクリック
し、 「Deployment Space」 を選択すると、「Jobs」タブにデプロイメントスペースが開き、Sparkジョブを確認できます。ジョブをクリックすると、ジョブの実行状況を確認できます。
UIから、SparkのアプリケーションID、ジョブID、およびジョブのステータスと実行時間を確認してください。
ジョブの実行をクリックすると、実行の詳細とログの末尾を確認できます。 「ログをダウンロード」 をクリックすると、その実行の完全なログをダウンロードできます。
なお、このインスタンスに送信されたすべてのジョブが一覧表示されます。 ジョブが停止すると、すべてのクラスタリソースが解放されます。
Spark History ServerのUIでは:
Spark History ServerのUIで、完了したジョブのパフォーマンス指標、パーティション、および実行プランを確認し、Sparkジョブのパフォーマンスを分析します。 「Spark 履歴サーバーへのアクセス」 を参照してください。
Cloud Pak for Data のWebクライアントから:
そのインスタンスに提出されたすべてのSparkアプリケーションの一覧を確認できます。 [アプリケーション ] タブには、アプリケーションのステータス、アプリケーションの実行に使用されたSparkのバージョン、提出日、およびインスタンスに関する追加情報などの詳細も表示されます。 詳細を確認するには、以下の手順に従ってください:
- Cloud Pak for Data にログインしてください。
ナビゲーションメニューから 「サービス 」>「インスタンス」を選択し、 Analytics Engine powered by Apache Spark インスタンスを選択します。
- [アプリケーション] タブをクリックします。 そのインスタンスに送信されたすべてのSparkアプリケーションの一覧と、以下の詳細情報を確認できます:
表2. [アプリケーション] タブ フィールド 説明 アプリケーション ID 送信された申請の固有ID。 Sparkバージョン アプリケーションの実行に使用される Apache Spark のバージョン。 状況 申請の現在の状況。 作成日 申請が提出された日付。 開始日 システムが申請の処理を開始する日付。 終了日 システムが申請処理を完了する日付。 また、 Apache Spark のユーザーインターフェースからアプリケーションの詳細を確認することもできます。 アプリ名を選択し、オーバーフローメニューをクリックして、 「 Spark UI を開く 」を選択します。
Sparkジョブにおけるキューイング V4 API
- 前提条件
- 「 Cloud Pak for Data 」スケジューラがインストールされており、「 Analytics Engine 」カスタムリソースで有効になっている必要があります。
- Analytics Engine で「 Cloud Pak for Data 」スケジューラを有効にするには、プロジェクト管理者がサービスレベルのカスタムリソースの設定を
spec-serviceConfig.schedulerForQuotaAndQueuing指定する必要があります。 詳細については、 「 Analytics Engine powered by Apache Spark の追加設定の指定」 を参照してください。
Sparkアプリケーションが送信されると、ステータス応答が 「ACCEPTED」 に変わります。 V4-based のリソースクォータを使用してSparkアプリケーションを作成する場合、以下の条件に基づき、アプリケーションの状態は自動的に「 QUEUED 」に変更されます
- このジョブは、CPUおよびメモリのインスタンスレベルの上限を超えています
- クラスタには、Sparkジョブを実行するのに十分なCPUやメモリがありません
これらの条件が満たされると、Sparkジョブは直ちにスケジューリングされ、アプリケーションの状態は 「RUNNING」 に変わります。
キューに複数のSparkジョブがある場合、それらのジョブは優先順に従ってスケジューリングされます。 優先度が高いように設定されたSparkジョブは、条件に基づいて最初にスケジューリングされます。 ae.spark.application.priorityデフォルトでは、すべてのSparkジョブの優先度は.です。 この優先順位は、ジョブAPIのペイロードにSparkの設定を指定することで設定できます。 詳細については、 「Sparkのデフォルト設定パラメータと環境変数」 を参照してください。
Sparkジョブの停止
Sparkジョブを停止するには:
Spark Jobs API を使用することで:
curl -k -X DELETE <V4_JOBS_API_ENDPOINT>/<job-id> -H "Authorization: ZenApiKey ${TOKEN}"ジョブが正常に削除された場合、を返します
204 No Content。注。実行中のジョブが停止された場合、そのSparkアプリケーションはSpark履歴サーバーの「 未完了のアプリケーション 」タブに表示されます。
ジョブ UI で、Spark の高度な機能が有効になっている場合。 「高度な機能の使用 」を参照してください:
ナビゲーションメニューから、 「サービス」>「インスタンス」 をクリックし、対象のインスタンスを見つけてクリックすると、インスタンスの詳細が表示されます。
- インスタンス詳細ページの右側にあるをクリック
し、 「Deployment Space」 を選択すると、「Jobs」タブでデプロイメントスペースが開き、Sparkジョブを確認できます。 - 該当するジョブを見つけ、それをクリックして詳細ページを開き、ジョブの実行をキャンセルしてください。
Cloud Pak for Data のユーザーインターフェースを使用して:
ナビゲーションメニューから 「サービス 」>「インスタンス」をクリックし、「 Analytics Engine powered by Apache Spark 」インスタンスを見つけてクリックします。 「 サービスインスタンス 」ページが開きます。
- [アプリケーション] タブをクリックします。 Sparkアプリケーションの一覧が表示されます。
- アプリケーション一覧テーブルで、停止したいアプリケーション(ジョブ)を選択します。 オーバーフローメニューをクリックし、 「アプリケーションを停止」 をクリックします。 「 停止」ボタンは、現在実行中のアプリケーションに対してのみ利用可能です。