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

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 再頒布可能パッケージ Update 3Windows ユニバーサル C ランタイムの 2 つの更新プログラムが必要です。

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

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

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

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

Azure Data Lake Analytics U-SQL debug visual studio download vertex

デバッグ環境を構成する

Note

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

Azure Data Lake Analytics U-SQL debug visual studio setting

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

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

  2. ソリューションでソース コードを見つけることができない

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

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

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

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

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

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

  2. ソース コード ファイルを開いて、ブレークポイントを設定してから、F5 キーを押して、ステップ バイ ステップでコードをデバッグします。

    Azure Data Lake Analytics U-SQL debug exception

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

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

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

    Azure Data Lake Analytics U-SQL debug add project

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

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

    Azure Data Lake Analytics U-SQL debug set pdb path

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

Note

コードを変更して更新された PDB ファイルを生成するたびに、アセンブリのソース コード プロジェクトをリビルドします。

ジョブを再送信する

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

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

Azure Data Lake Analytics U-SQL debug succeed

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

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

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

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

次のステップ