Synapse Analytics でのエラー コードを解釈する

現在、Azure Synapse Analytics で Spark アプリケーションが失敗する理由には、さまざまな要因があります。 たとえば、システム エラーやユーザー関連のエラーが原因である可能性があります。 以前は、Synapse Analytics で失敗したジョブに対応するすべてのエラーが、"LIVY_JOB_STATE_DEAD" と表示される汎用エラー コードで出力されていました。 このエラー コードでは、ジョブが失敗した理由に関する詳細な分析情報が得られませんでした。 ドライバー、Executor、Spark イベント、Livy ログを掘り下げて根本原因を特定し、解決策を見つけることには、かなりの労力が必要です。

詳細なメッセージがない Apache Spark エラー コードのスクリーンショット。

以前の汎用メッセージを置き換えるエラー コードのより正確な一覧が導入されました。 新しいメッセージは、エラーの原因を説明します。 Azure Synapse Analytics でジョブが失敗するたびに、エラー処理機能によってバックエンドのログが解析および検査されて、根本原因が特定されます。 次に、問題を解決する手順とともに、監視ウィンドウにユーザーへのメッセージが表示されます。

詳細なメッセージがある Apache Spark エラー コードのスクリーンショット。

Synapse でエラー分類を有効にする

エラー分類機能を有効または無効にするには、ジョブまたはプール レベルで次の Spark 構成を true または false に設定します。

livy.rsc.synapse.error-classification.enabled

次のセクションでは、現在サポートされているエラーの種類をいくつか示します。 モデルを改善することで、これらのエラー コードを継続的に改良し、さらに追加していきます。

エラー コードのカテゴリ

各エラー コードは、次の 4 つのバケットのいずれかに分類されます。

  1. ユーザー - ユーザー エラーを示します
  2. システム - システム エラーを示します
  3. あいまい - ユーザーまたはシステム エラーのいずれかである可能性があります
  4. 不明 - おそらくモデルにエラーの種類が含まれていないため、あてはまる分類がまだありません

分類の種類ごとのエラー コードの例

Spark_User_TypeError_TypeNotIterable

Python では、メンバーシップ演算子 (in、not in) を使用して、リスト、タプル、ディクショナリなどの反復可能ではないオブジェクトの値のメンバーシップを検証すると、エラー TypeError: argument of type 'insert type' is not iterable が発生します。 これは通常、反復可能ではないオブジェクト内の値の検索が原因です。 考えられる解決策:

  • 反復可能オブジェクトに値が存在するかどうかを確認してください。
  • ある値を別の値と照らし合わせて検査する場合は、メンバーシップ演算子の代わりに論理演算子を使用します。
  • メンバーシップ演算子に "None" 値が含まれている場合、反復することはできず、null チェックまたは既定値の割り当てを実行する必要があります。
  • 使用される値の型が実際に検査可能で、型指定が正しいかどうかを確認します。

Spark_System_ABFS_OperationFailed

ADLS Gen2 を使用した操作が失敗しました。

これは、通常アクセス許可の問題が原因で発生します。

Spark ジョブで参照されるすべての ADLS Gen2 リソースに対して、ジョブの読み取りと書き込みが想定されるストレージ アカウントに対する "ストレージ BLOB データ共同作成者" RBAC ロールがあることを確認します。 この Spark アプリケーションのログを確認します。 Synapse Studio に移動し、左側のウィンドウから [モニター] タブを選択します。 [アクティビティ] セクションで、[Apache Spark アプリケーション] を選択し、一覧から Spark ジョブを見つけます。 この問題が発生している ADLS Gen2 ストレージ アカウント名については、このページの下部にある [ログ] タブで入手可能なログを調べます。

Spark_Ambiguous_ClassLoader_NoClassDefFound

スクリプトの実行時に、コードで必要なクラスが見つかりませんでした。

パッケージ管理のドキュメントについては、次のページを参照してください。

Notebook シナリオの場合: Apache Spark で対話型ジョブのパッケージを管理する

Spark バッチ シナリオの場合 (セクション 6 を参照): Apache Spark でバッチ ジョブのパッケージを管理する

すべてのコード依存関係が JAR の Synapse 実行に含まれていることを確認します。 独自のコードでサード パーティ製 JAR を含めないか、含めることができない場合は、コードを実行している Spark プールのワークスペース パッケージにすべての依存関係が含まれていること、または Spark バッチ送信の "参照ファイル" リストに含まれていることを確認してください。 詳細については、上記のドキュメントを参照してください。

Spark_Unknown_Unknown_java.lang.Exception

モデルで分類できない不明なエラーが発生しました。

問題を解決する方法に関するトラブルシューティング手順とともに、エラー コード (上記の一覧に含まれるものと含まれないもの) が Synapse Studio アプリケーションのエラー ウィンドウに表示されます (この機能が有効になっている場合)。

Note

LIVY_JOB_STATE_DEAD エラー コードをフィルター処理して失敗したジョブを検査する Synapse モニター ジョブに関するツールを構築した場合、アプリは機能しなくなります。 返されるエラー コードは前述のように異なるためです。 必要に応じてスクリプトを変更してこの機能を利用するか、不要な場合は機能を無効にします。