次の方法で共有


失敗した U-SQL ジョブのユーザー定義 C# コードをデバッグする

重要

Azure Data Lake Analytics は 2024 年 2 月 29 日に廃止されました。 このお知らせで詳細を学びましょう

データ分析の場合、組織は Azure Synapse Analytics または Microsoft Fabric を使用できます。

U-SQL は、C# を使用した拡張性モデルを提供します。 U-SQL スクリプトでは、C# 関数を呼び出して、SQL に似た宣言型言語でサポートされていない分析関数を簡単に実行できます。 U-SQL の拡張性の詳細については、 U-SQL プログラミング ガイドを参照してください。

実際には、任意のコードでデバッグが必要になる可能性がありますが、限られたログ ファイルを含むクラウド上のカスタム コードを使用して分散ジョブをデバッグするのは困難です。 Azure Data Lake Tools for Visual Studio には、 失敗した頂点デバッグと呼ばれる機能が用意されています。これは、カスタム コードで発生するエラーをより簡単にデバッグするのに役立ちます。 U-SQL ジョブが失敗した場合、サービスはエラー状態を維持し、ツールを使用すると、デバッグのためにクラウド障害環境をローカル コンピューターにダウンロードできます。 ローカル ダウンロードでは、入力データやユーザー コードなど、クラウド環境全体がキャプチャされます。

次のビデオでは、Azure Data Lake Tools for Visual Studio での失敗した頂点デバッグを示します。

重要

Visual Studio では、この機能を使用するために 、Microsoft Visual C++ 2015 再頒布可能更新プログラム 3ユニバーサル C ランタイム for Windows の 2 つの更新プログラムが必要です。

失敗した頂点をローカル コンピューターにダウンロードする

Azure Data Lake Tools for Visual Studio で失敗したジョブを開くと、エラー タブに詳細なエラー メッセージが表示された黄色のアラート バーが表示されます。

  1. [ ダウンロード ] を選択して、必要なすべてのリソースと入力ストリームをダウンロードします。 ダウンロードが完了しない場合は、[再試行] を選択 します

  2. ダウンロードの完了後に [開く ] を選択して、ローカル デバッグ環境を生成します。 新しいデバッグ ソリューションが開き、Visual Studio で既存のソリューションを開いている場合は、必ず保存して閉じてからデバッグしてください。

[ダウンロード] ボタンが強調表示されている USQL の Data Lake Analytics ジョブのスクリーンショット。

デバッグ環境を構成する

デバッグする前に、[例外設定] ウィンドウで共通 言語ランタイム例外 を確認してください (Ctrl + Alt + E)。

共通言語ランタイム例外が設定された例外設定を示す、ユーザー定義の C# ソース コードのスクリーンショット。

新しく起動された Visual Studio インスタンスでは、ユーザー定義の C# ソース コードが見つかる場合と見つからない場合があります。

  1. ソリューションでソース コードを見つけることができます

  2. ソリューションでソース コードが見つからない

ソース コードはデバッグ ソリューションに含まれています

C# ソース コードがキャプチャされるケースは 2 つあります。

  1. ユーザー コードは分離コード ファイルで定義されます (通常、U-SQL プロジェクトでは Script.usql.cs という名前)。

  2. ユーザー コードは U-SQL アプリケーションの C# クラス ライブラリ プロジェクトで定義され、 デバッグ情報を含むアセンブリとして登録されます。

ソース コードがソリューションにインポートされている場合は、Visual Studio デバッグ ツール (ウォッチ、変数など) を使用して問題のトラブルシューティングを行うことができます。

  1. F5 キーを押してデバッグを開始します。 コードは、例外によって停止されるまで実行されます。

  2. ソース コード ファイルを開き、ブレークポイントを設定し、 F5 キーを押してコードを段階的にデバッグします。

    強調表示された行に例外が表示されている、ブレークポイントが設定されたユーザー定義コードのスクリーンショット。

デバッグ ソリューションにソース コードが含まれていない

ユーザー コードが分離コード ファイルに含まれていない場合、または アセンブリをデバッグ情報に登録しなかった場合、ソース コードはデバッグ ソリューションに自動的に含まれません。 この場合は、ソース コードを追加するための追加の手順が必要です。

  1. ソリューション 'VertexDebug' >既存のプロジェクト>追加... を右クリックして、アセンブリのソース コードを検索し、デバッグ ソリューションにプロジェクトを追加します。

    Visual Studio のソリューション エクスプローラーのスクリーンショット。VertexDebug ソリューションが表示されています。

  2. FailedVertexDebugHost プロジェクトのプロジェクト フォルダー パスを取得します。

  3. Right-Click 追加したアセンブリ ソース コード プロジェクト> プロパティ を開き、左側にある [ビルド] タブを選択し、\bin\debug で終わるコピーしたパスを >出力パスとして貼り付けます。 最終的な出力パスは、 <DataLakeTemp path>\fd91dd21-776e-4729-a78b-81ad85a4fba6\loiu0t1y.mfo\FailedVertexDebug\FailedVertexDebugHost\bin\Debug\のようになります。

    Visual Studio Code の [ビルド] タブのスクリーンショット。出力の下の送信パスが強調表示されています。

これらの設定の後、 F5 とブレークポイントを使用してデバッグを開始します。 Visual Studio デバッグ ツール (ウォッチ、変数など) を使用して問題のトラブルシューティングを行うこともできます。

更新された .pdb ファイルを生成するようにコードを変更した後、毎回アセンブリ ソース コード プロジェクトをリビルドします。

ジョブを再送信してください

デバッグ後、プロジェクトが正常に完了すると、出力ウィンドウに次のメッセージが表示されます。

The Program 'LocalVertexHost.exe' has exited with code 0 (0x0).

出力ウィンドウのスクリーンショット。完了行が強調表示されています。

失敗したジョブを再送信するには:

  1. 分離コード ソリューションを使用するジョブの場合は、C# コードを分離コード ソース ファイル (通常は Script.usql.cs) にコピーします。

  2. アセンブリを含むジョブの場合は、デバッグ ソリューションでアセンブリ ソース コード プロジェクトを右クリックし、更新された .dll アセンブリを Azure Data Lake カタログに登録します。

  3. U-SQL ジョブを再送信します。

次のステップ