Azure Data Factory でのパイプライン オーケストレーションおよびトリガーのトラブルシューティング
適用対象: Azure Data Factory Azure Synapse Analytics
ヒント
企業向けのオールインワン分析ソリューション、Microsoft Fabric の Data Factory をお試しください。 Microsoft Fabric は、データ移動からデータ サイエンス、リアルタイム分析、ビジネス インテリジェンス、レポートまで、あらゆるものをカバーしています。 無料で新たに試用を開始する方法については、こちらをご覧ください。
Azure Data Factory の "パイプライン実行" により、パイプラインの実行のインスタンスが定義されます。 たとえば、午前 8 時、午前 9 時、午前 10 時に実行するパイプラインがあるとします。 この場合、3 つの独立したパイプライン実行があることになります。 各パイプライン実行には、一意のパイプライン実行 ID があります。 実行 ID は、特定のパイプライン実行を定義するグローバル一意識別子 (GUID) です。
パイプライン実行は、通常、パイプラインで定義したパラメーターに引数を渡してインスタンス化されます。 パイプラインを実行するには、手動で行う方法とトリガーを使用する方法があります。 詳細については、「Azure Data Factory でのパイプラインの実行とトリガー」を参照してください。
一般的な問題、原因、解決策
Azure Functions アプリ パイプラインからプライベート エンドポイント接続のエラーがスローされる
データ ファクトリと Azure のプライベート エンドポイント上で実行中の関数アプリがあるとします。 関数アプリと連携するパイプラインを実行しようとしています。 3 つの異なるメソッドを試行しましたが、1 つのメソッドでエラー "Bad Request" が返され、他の 2 つのメソッドで "103 Error Forbidden" が返されました。
原因
Azure Data Factory は現状、関数アプリ用のプライベート エンドポイント コネクタをサポートしていません。 Azure Functions は、プライベート リンクからの接続のみを許可するように構成されているため、呼び出しは拒否されます。
解像度
PrivateLinkService エンドポイントを作成し、関数アプリの DNS を指定します。
パイプライン実行をキャンセルしたにもかかわらず、モニターに進行状況が表示される
原因
パイプラインの実行をキャンセルしても、多くの場合、パイプラインの監視で進行状況が表示されます。 これは、ブラウザーのキャッシュの問題が原因で発生します。 また、正しい監視フィルターがない可能性もあります。
解像度
ブラウザーを最新の状態に更新し、正しい監視フィルターを適用します。
パイプラインをコピーするときに "DelimitedTextMoreColumnsThanDefined" エラーが表示される
原因
コピーしているフォルダーに、不定の列数、異なる区切り文字、引用符文字の設定などの異なるスキーマ、または何らかのデータの問題が含まれている場合、パイプラインは次のエラーをスローする場合があります。
Operation on target Copy_sks failed: Failure happened on 'Sink' side. ErrorCode=DelimitedTextMoreColumnsThanDefined, 'Type=Microsoft.DataTransfer.Common.Shared.HybridDeliveryException, Message=Error found when processing 'Csv/Tsv Format Text' source '0_2020_11_09_11_43_32.avro' with row number 53: found more columns than expected column count 27., Source=Microsoft.DataTransfer.Common,'
解像度
Copy アクティビティの作成時に [バイナリ コピー] オプションを選択します。 これにより、データの一括コピーやデータ レイク間でのデータの移行の際に、Data Factory によってファイルが開かれてスキーマが読み取られることがなくなります。 代わりに、Azure Data Factory は各ファイルをバイナリとして扱い、それを別の場所にコピーします。
データ フローの統合ランタイムの容量の上限に達したときに、パイプライン実行が失敗する
問題点
エラー メッセージ
Type=Microsoft.DataTransfer.Execution.Core.ExecutionException,Message=There are substantial concurrent MappingDataflow executions which is causing failures due to throttling under Integration Runtime 'AutoResolveIntegrationRuntime'.
原因
統合ランタイムの容量の上限に達しました。 同じ統合ランタイムを同時に使用して、大量のデータ フローを実行している可能性があります。 詳細については、「Azure サブスクリプションとサービスの制限、クォータ、制約」を参照してください。
解像度
- 異なるトリガーのタイミングでパイプラインを実行します。
- 新しい統合ランタイムを作成し、パイプラインを複数の統合ランタイムで分割します。
Web アクティビティ内での REST API 呼び出し時のパイプライン実行エラー
問題点
エラー メッセージ
Operation on target Cancel failed: {“error”:{“code”:”AuthorizationFailed”,”message”:”The client ‘<client>’ with object id ‘<object>’ does not have authorization to perform action ‘Microsoft.DataFactory/factories/pipelineruns/cancel/action’ over scope ‘/subscriptions/<subscription>/resourceGroups/<resource group>/providers/Microsoft.DataFactory/factories/<data factory name>/pipelineruns/<pipeline run id>’ or the scope is invalid. If access was recently granted, please refresh your credentials.”}}
原因
パイプラインが Web アクティビティを使用して ADF REST API メソッドを呼び出すことができるのは、Azure Data Factory メンバーに共同作成者ロールが割り当てられている場合に限ります。 最初に構成を行い、共同作成者セキュリティ ロールに Azure Data Factory マネージド ID を追加する必要があります。
解像度
Web アクティビティの [設定] タブで Azure Data Factory の REST API を使用する前に、セキュリティを構成する必要があります。 Azure Data Factory パイプラインが Web アクティビティを使用して ADF REST API メソッドを呼び出すことができるのは、Azure Data Factory マネージド ID に "共同作成者" ロールが割り当てられている場合に限ります。 最初に、Azure portal を開き、左側のメニューの [すべてのリソース] リンクをクリックします。 [ロールの割り当てを追加する] ボックスの [追加] ボタンをクリックして、共同作成者ロールを持つ ADF マネージド ID を追加する Azure Data Factory を選択します。
パイプラインでアクティビティ レベルの成功と失敗を確認および分岐する方法
原因
Azure Data Factory オーケストレーションでは、条件付きロジックを使用することができ、ユーザーは前のアクティビティの結果に基づいて異なるパスを選択できます。 次の 4 つの条件付きパスを使用できます。成功時 (既定のパス)、失敗時、完了時、スキップ時。
Azure Data Factory では、すべてのリーフレベルのアクティビティの結果が評価されます。 すべてのリーフが成功した場合にのみ、パイプラインの結果は成功します。 リーフ アクティビティがスキップされた場合は、代わりにその親アクティビティを評価します。
解像度
- パイプラインの失敗とエラーの処理方法に関するページに従って、アクティビティレベルのチェックを実装します。
- Factory によるクエリに関するページに従って、Azure Logic Apps を使用して定期的な間隔でパイプラインを監視します。
- 視覚的にパイプラインを監視する
定期的な間隔でパイプライン エラーを監視する方法
原因
失敗した Azure Data Factory パイプラインは、5 分程度の時間間隔で監視する必要があるかもしれません。 エンドポイントを使用して、データ ファクトリからパイプライン実行にクエリを実行し、フィルター処理することができます。
解像度
- Factory によるクエリに関するページで説明されているように、失敗したすべてのパイプラインのクエリを 5 分ごとに実行するように Azure ロジック アプリを設定できます。 そうすると、インシデントをチケット システムに報告できるようになります。
- パイプラインとアクティビティは、こちらの説明に従って再実行できます。
- アクティビティをキャンセルしたか、失敗があった場合、「失敗したアクティビティから再実行する」の説明に従ってアクティビティを再実行できます。
- 視覚的にパイプラインを監視する
並列度を増やしてもスループットが向上しない
原因
ForEach における並列度は、並列度の最大値です。 特定の同時実行数が保証されているわけではなく、このパラメーターが保証しているのは、設定された値が超過されることがないということです。 これは、ソースとシンクへの同時アクセスを制御するときに適用される上限として捉えるべきです。
ForEach に関する既知の事実
- Foreach には、batch count(n) というプロパティがあります。既定値は 20 で、最大値は 50 です。
- バッチ カウント (n) は、作成するキューの個数を指定するために使用されます。
- 各キューは順番に実行されますが、複数のキューを並列に実行することもできます。
- キューは事前作成されます。 つまり、実行時にキューの再調整は行われません。
- 処理されるアイテムは、キューごとに常に 1 つだけです。 つまり、一度に処理される最大項目数は n 個となります。
- foreach の合計処理時間は、最も長いキューの処理時間と同じです。 つまり、foreach アクティビティのあり方は、キューの作成方法によって決まります。
解像度
- 並列で実行される For Each 内では、SetVariable アクティビティを使用しないでください。
- 利用者は、キューが構築されるしくみを考慮に入れて、各 foreach のアイテムの処理時間が同程度になるように複数の foreach を設定することで、foreach のパフォーマンスを向上させることができます。
- これにより、長時間の実行が順次ではなく、並列で処理されるようになります。
パイプラインが長時間キューに入っているか停止している状態である
原因
これは、同時実行の上限への到達、サービスの停止、ネットワーク エラーなど、さまざまな理由で発生する可能性があります。
解像度
同時実行の上限: パイプラインに同時実行ポリシーがある場合は、実行中の古いパイプラインの実行がないことを確認します。
監視の制限: 作成キャンバスにアクセスし、パイプラインを選択し、それにコンカレンシー プロパティが割り当てられているかどうかを確認します。 割り当てられている場合は、 [監視] ビューに移動し、過去 45 日間に進行中のものがないことを確認します。 進行中のものがある場合は、それをキャンセルすると、新しいパイプライン実行が開始するはずです。
一時的な問題: 実行は、一時的なネットワークの問題、資格情報に関する失敗、サービスの停止などの影響を受けた可能性があります。このような状況になった場合、Azure Data Factory には、すべての実行が監視され、問題が発生したことが検出された場合に開始される内部回復プロセスがあります。 パイプラインとアクティビティは、こちらの説明に従って再実行できます。 アクティビティをキャンセルしたか、失敗があった場合、「失敗したアクティビティから再実行する」の説明に従ってアクティビティを再実行できます。このプロセスは 1 時間ごとに発生するため、実行が 1 時間以上停止する場合は、サポート ケースを作成します。
ADF コピーとデータ フローのアクティビティの開始時間が長い
原因
これは、Data Flow または最適化された SHIR に対して Time to Live 機能を実装していない場合に発生する可能性があります。
解像度
- 各コピー アクティビティの開始に 2 分以上かかっており、問題が主に仮想ネットワークの結合で発生する場合 (Azure IR ではなく)、コピーのパフォーマンスの問題である可能性があります。 トラブルシューティングの手順を確認するには、コピー パフォーマンスの向上に関するページを参照してください。
- Time to Live 機能を使用すると、データ フロー アクティビティのクラスターの起動時間を短縮できます。 「Data Flow 統合ランタイム」を参照してください。
SHIR (セルフホステッド統合ランタイム) での容量の問題の発生
原因
これは、ワークロードに合わせて SHIR をスケールアップしていない場合に発生する可能性があります。
解像度
- SHIR で容量の問題が発生する場合は、VM をアップグレードしてノードを増やし、アクティビティのバランスを取ります。 長いキューが生成される可能性のある、セルフホステッド IR の一般的な障害またはエラー、セルフホステッド IR のアップグレード、またはセルフホステッド IR の接続の問題についてのエラー メッセージが表示される場合は、「セルフホステッド統合ランタイムのトラブルシューティング」を参照してください。
ADF コピーとデータ フローの長時間キューが原因のエラーメッセージ
原因
長時間キューに関連するエラー メッセージは、さまざまな理由で表示されることがあります。
解像度
- 長いキューが生成される可能性のある、コネクタを介した送信元または送信先からのエラー メッセージが表示される場合は、コネクタのトラブルシューティング ガイドに関するページを参照してください。
- 長いキューが生成される可能性のある、マッピング データ フローに関するエラー メッセージが表示される場合は、データ フローのトラブルシューティング ガイドに関するページを参照してください。
- 長いキューが生成される可能性のある、Databricks、カスタム アクティビティ、HDI などの他のアクティビティに関するエラー メッセージが表示される場合は、アクティビティのトラブルシューティング ガイドに関するページを参照してください。
- 長いキューが生成される可能性のある、SSIS パッケージの実行に関するエラー メッセージが表示される場合は、Azure-SSIS のパッケージ実行トラブルシューティング ガイドおよび Integration Runtime 管理トラブルシューティング ガイドに関するページで詳細を確認してください。
エラー メッセージ - "code":"BadRequest", "message":"Null"
原因
これは、management.azure.com にヒットする JSON ペイロードが破損していることが原因のユーザー エラーです。 ユーザー呼び出しが ADF サービス レイヤーに到達していないため、ログは保存されません。
解像度
Microsoft Edge/Chrome ブラウザーの開発者ツールを使用して、ADF ポータルからの API 呼び出しのネットワーク トレースを実行します。 問題のある JSON ペイロードが表示されます。これは、特殊文字 (例えば $
)、スペース、およびその他の種類のユーザー入力が原因である可能性があります。 文字列式を修正したら、ブラウザーで残りの ADF 使用呼び出しに進みます。
ForEach アクティビティが並列モードで実行されない
原因
ADF をデバッグ モードで実行しています。
解像度
トリガー モードでパイプラインを実行します。
アカウントがロックされているため発行できない
原因
コラボレーション ブランチに変更を加えてストレージ イベント トリガーを削除しました。 発行しようとして、Trigger deactivation error
メッセージが表示されています。
解像度
これは、イベント トリガーに使用されるストレージ アカウントがロックされていることが原因です。 アカウントのロックを解除してください。
式ビルダーの読み込みに失敗する
原因
Web ブラウザーでネットワークまたはキャッシュの問題が発生したために式ビルダーの読み込みが失敗することがあります。
解像度
サポートされている Web ブラウザーの最新バージョンにブラウザーをアップグレードし、サイトの Cookie をクリアし、ページを更新します。
"Code":"BadRequest","message":"ErrorCode=FlowRunSizeLimitExceeded
原因
多くのアクティビティが連結されています。
解像度
パイプラインをサブパイプラインに分割し、ExecutePipeline アクティビティでそれらを結合することができます。
実行中の内部サーバー エラー、同時実行エラーなどを回避するためにマッピング データ フローを使用してパイプラインを最適化する方法
原因
マッピング データ フローが最適化されていません。
解像度
- 大量のデータと変換を扱うときは、メモリ最適化コンピューティングを使用してください。
- For Each アクティビティの場合は、バッチ サイズを小さくする。
- ADF のパフォーマンスに合わせて、データベースとウェアハウスをスケールアップします。
- 並列実行するアクティビティには、個別の IR (統合ランタイム) を使用します。
- ソースとシンクでパーティションを適宜調整します。
- データ フローの最適化について確認します。
子パイプラインにパラメーターを渡すときにエラー コード: BadRequest (問題のある要求) が発生した
原因
失敗の種類は、ユーザー構成の問題です。 配列ではなく、パラメーターの文字列が子パイプラインに渡されます。
解像度
たとえば、パラメータ 'a' および 'b' を渡したい場合は、パイプライン パラメーターの execute pipeline アクティビティを @createArray('a','b') として入力します。 たとえば、数値を渡す場合は、@createArray(1,2,3) を使用します。 パラメーターを配列として強制的に渡すには、createArray 関数を使用します。
関連するコンテンツ
トラブルシューティングのその他のヘルプについては、次のリソースを参照してください。