注: 以下の翻訳の正確性は検証されていません。AIPを利用して英語版の原文から機械的に翻訳されたものです。
ストリーミングパイプラインを作成していると、ストリーミングの失敗が発生することがあります。このページでは、失敗するストリームをデバッグするための推奨ワークフローと、ストリームが失敗した原因を把握するのに役立つ Foundry のツールについて説明します。
失敗は種類別に分類でき、それぞれの種類が異なる根本原因を示すことがあります。以下に、よくある失敗の種類と、それらが発生する理由を示します。
短時間で失敗するストリームでは、通常、ユーザーが作成したロジックに問題があります。たとえば、無効なキャスト、パース時の例外、またはストリーミングクラスターの正常な起動を妨げるその他の問題が失敗の原因となることがあります。
以前は正常に実行されていたストリームが失敗するようになった場合は、ロジックおよび上流のストリームへの変更を調べて、考えられる問題を特定します。
これらの問題の根本原因を特定するには、以下のストリーミングクラスターのログを確認するワークフローに記載されている手順に沿って進めてください。
以前は正常に実行されていたストリームが失敗しても、再起動後に再び実行される場合は、通常、ネットワーク障害に起因するインフラストラクチャの問題を示しています。障害は、Foundry インスタンスが稼働しているクラウドプロバイダーで発生することがよくあります(たとえば、AWS、Azure、GCP の障害)。ストリームにスケジュールを適用すると、Foundry がストリームを自動的に再実行し、中断したところから処理を継続します。
以前は正常に実行されていたストリームが、ロジックに変更がないにもかかわらず繰り返し失敗する場合、その原因の特定は通常最も困難です。ただし、一般的には次の2つの要因のいずれかが原因です。ストリームへの新しい入力データによって処理を進められなくなっている(たとえば、無効なデータ型、破損したデータなど)か、継続的なインフラストラクチャの問題(AWS の障害など)が発生しています。
エラーがパイプラインのロジックに起因するかを確認するには、以下のストリーミングクラスターのログを確認するワークフローに記載されている手順に沿って進めてください。
以下に、よくあるストリーミングの問題を解決するために使用できるワークフローの概要を示します。これらの確認は、特定の順序で行う必要はありません。
ストリームのログを取得するの手順に沿って進め、ログ内の例外、エラー、または「throwables」を検索します。通常、これらのログには、「ERROR」、「throwable」、「Exception」などのキーワードとともに、考えられる根本的な問題の説明が記載されています。
パイプラインのロジックを変更すると、ユーザーが作成したコードのバグによって動作しなくなることがよくあります。通常、前の手順で取得したログの例外は、問題の原因となっている特定のコードを示します。その場合は、変更を元に戻して、問題が解決するかを確認できます。
ストリーミングパイプラインのロジックは、予期しないデータに遭遇すると例外をスローすることがあります。たとえば、パイプラインが2つの列の間で除算を行って値を返す際に、除数が 0 または null の場合です。入力ストリームの末尾のレコードを確認し、ストリーミングパイプラインで問題を引き起こすようなデータの変更がないか調べます。変更されたデータが見つかった場合は、フィルターやロジックを追加してデータをクレンジングするか、削除することを検討します。
Foundry はストリームが失敗したときによくある例外を検出し、ストリームの詳細ページに表示します。詳細を確認して、エラーが表示されていないか調べます。
詳細ページよりもストリームのログにエラーの詳細情報が記載されている場合があります。ストリームの失敗に関する情報を得るために、両方を確認することを推奨します。
ストリームの実行中に失敗が発生し、原因を特定するためにビルドのログにアクセスする必要が生じることがあります。さまざまな種類のストリームの失敗について原因を特定するには、ビルドのログを確認するのが最適な場合が多くあります。
ストリーミングジョブのログを取得するには、まずデータセットプレビューでストリームの詳細ページに移動します。
次に、確認するジョブを見つけ、ログをダウンロードをクリックします。
ログをダウンロードする際に、最も古いログ行と最も新しいログ行のどちらを先にするかを選択します。
Caused by: com.palantir.logsafe.exceptions.SafeIllegalStateException: Start transaction rid is not part of the current view.
このエラーは通常、入力データセットの新しいスナップショットがストリーミングで実行されることによって発生します。
ストリーミングでは、レコードを受信するとすぐに下流へ送信するため、レコードを取り消すことはできません。新しいスナップショットが作成されると、ストリーミングジョブは以前のトランザクションを無視し、新しいトランザクションのみを使用します。古いレコードを破棄して新しいスナップショットを使用するには、手動でリプレイを実行します。
この問題は、パイプラインをデプロイウィザードでデプロイ時にリプレイオプションを選択し、ストリームをリプレイするパイプラインの新しいデプロイを実行することで解決します。
