ライブラリのインストール エラーのトラブルシューティング
サード パーティまたはローカル環境でビルドされたコードをアプリケーションで使用できるようにするには、いずれかのサーバーレス Apache Spark プールにライブラリをインストールできます。 requirements.txt ファイルにリストされているパッケージは、プールの開始時に PyPi からダウンロードされます。 この要件ファイルは、その Spark プールから Spark インスタンスが作成されるたびに使用されます。 Spark プールにインストールされたライブラリは、同じプールを使用するすべてのセッションで使用できるようになります。
場合によっては、ライブラリが Apache Spark プールに表示されないことがあります。 このケースは、提供された requirements.txt または指定されたライブラリにエラーがある場合によく発生します。 ライブラリのインストール プロセスでエラーが発生すると、Apache Spark プールは、Synapse 基本ランタイムに指定されたライブラリに戻ります。
このドキュメントの目的は、一般的な問題について説明し、ライブラリのインストール エラーのデバッグに役立ててもらうことです。
Apache Spark プールを強制的に更新する
Apache Spark プールでライブラリを更新した場合、プールを再起動するとそれらの変更が取得されます。 アクティブなジョブがある場合、それらのジョブは引き続き Spark プールの元のバージョンで実行されます。
[Force new settings](新しい設定を強制) オプションを選択すると、強制的に変更を適用できます。 この設定により、選択した Spark プールの現在のセッションがすべて終了します。 セッションが終了したら、プールが再起動するまで待機する必要があります。
インストールの進行状況の追跡
システム予約 Spark ジョブは、新しい一連のライブラリを使用してプールが更新されるたびに開始されます。 この Spark ジョブは、ライブラリのインストールの状態を監視するために役立ちます。 ライブラリの競合またはその他の問題が原因でインストールが失敗した場合、Spark プールは以前の、または既定の状態に戻ります。
さらに、ユーザーはインストール ログを調査することで、依存関係の競合を特定したり、プールの更新中にインストールされたライブラリを確認したりすることもできます。
これらのログを表示するには:
- [監視] タブで、Spark アプリケーションの一覧に移動します。
- プールの更新に対応するシステム Spark アプリケーション ジョブを選択します。 これらのシステム ジョブは、SystemReservedJob-LibraryManagement というタイトルの下で実行されています。
- driver および stdout ログを表示するように切り替えます。
- この結果の中に、パッケージのインストールに関連するログが表示されます。
インストール エラーの追跡
場合によっては、Spark 履歴サーバーで使用できる完全なインストール ログを調べて、複雑な依存関係の競合を特定することもできます。 Spark UI で使用できるログは省略されている可能性があるため、Spark 履歴サーバーを介して完全なインストール ログにアクセスすることは、複雑なライブラリ インストール シナリオで役立ちます。
完全なインストール ログを表示するには、以下の手順を実行します。
- [監視] タブで、Spark アプリケーションの一覧に移動します。
- 失敗したプールの更新に対応するシステム Spark アプリケーション ジョブを選択します。 これらのシステム ジョブは、SystemReservedJob-LibraryManagement というタイトルの下で実行されています。
- 強調表示された Spark 履歴サーバー オプションを選択すると、新しいタブで Spark 履歴サーバーの詳細ページが表示されます。
- このページには、2 回の試行が表示されます。次に示すように、[試行 1] を選択します。
- Spark 履歴サーバー ページの上部のナビゲーション バーで、[実行者] タブに切り替えます。
- stdout ログ ファイルと stderr ログ ファイルをダウンロードして、ライブラリ管理の完全な出力とエラー ログにアクセスします。
アクセス許可を検証する
ライブラリをインストールおよび更新するには、Azure Synapse Analytics ワークスペースにリンクされているプライマリ Azure Data Lake Storage Gen2 ストレージ アカウントに対して、ストレージ BLOB データ共同作成者またはストレージ BLOB データ所有者のアクセス許可を持っている必要があります。
これらのアクセス許可があることを検証するには、次のコードを実行します。
from pyspark.sql.types import StructType,StructField, StringType, IntegerType
data2 = [("James","Smith","Joe","4355","M",3000),
("Michael","Rose","Edward","40288","F",4000)
]
schema = StructType([ \
StructField("firstname",StringType(),True), \
StructField("middlename",StringType(),True), \
StructField("lastname",StringType(),True), \
StructField("id", StringType(), True), \
StructField("gender", StringType(), True), \
StructField("salary", IntegerType(), True) \
])
df = spark.createDataFrame(data=data2,schema=schema)
df.write.csv("abfss://<<ENTER NAME OF FILE SYSTEM>>@<<ENTER NAME OF PRIMARY STORAGE ACCOUNT>>.dfs.core.windows.net/validate_permissions.csv")
エラーが表示された場合は、必要なアクセス許可が不足している可能性があります。 必要なアクセス許可を取得する方法については、次のドキュメントを参照してください: ストレージ BLOB データ共同作成者またはストレージ BLOB データ所有者のアクセス許可を割り当てる。
また、パイプラインを実行している場合は、ワークスペース MSI にもストレージ BLOB データ所有者またはストレージ BLOB データ共同作成者のアクセス許可が必要です。 ワークスペース ID にこのアクセス許可を付与する方法については、次を参照してください: ワークスペースのマネージド ID にアクセス許可を付与する。
環境構成ファイルの確認
環境構成ファイルを使用して、Conda 環境をアップグレードすることができます。 Python プール管理に使用できるこのファイル形式の一覧は、環境仕様として掲載されています。
次の制限事項に注意してください。
- 要件ファイルの内容には、余分な空白行または文字を含めないでください。
- Synapse ランタイムには、すべてのサーバーレス Apache Spark プールにプレインストールされているライブラリのセットが含まれています。 基本ランタイムにプレインストールされているパッケージを削除またはアンインストールすることはできません。
- PySpark、Python、Scala/Java、.NET、または Spark のバージョンの変更はサポートされていません。
- Python セッション スコープ ライブラリは、YML 拡張子を持つファイルのみを受け入れます。
Wheel ファイルを検証する
Synapse サーバーレス Apache Spark プールは、Linux ディストリビューションに基づいています。 PyPI から Wheel ファイルを直接ダウンロードしてインストールする場合は、必ず、Linux 上で構築されており、Spark プールと同じ Python バージョンで実行されるバージョンを選択するようにしてください。
重要
セッションとセッションの間に、カスタム パッケージを追加または変更できます。 ただし、更新されたパッケージを表示するには、プールとセッションが再起動するまで待つ必要があります。
依存関係の競合を確認する
一般に、Python の依存関係の解決は、管理が難しい場合があります。 依存関係の競合をローカルでデバッグできるように、Synapse ランタイムに基づいて独自の仮想環境を作成し、変更を検証できます。
環境を再作成し、更新を検証するには、次のようにします。
Synapse ランタイムをローカルに再作成するためのテンプレートをダウンロードします。 テンプレートと実際の Synapse 環境の間には若干の違いがある場合があります。
次の手順を使用して仮想環境を作成します。 この環境を使うと、指定したライブラリの一覧を使って、分離された Python インストールを作成できます。
conda myenv create -f environment.yml conda activate myenv
pip install -r <provide your req.txt file>
を使用して、指定したパッケージで仮想環境を更新します。 インストールでエラーが発生した場合は、Synapse 基本ランタイムにプレインストールされているものと、指定された要件ファイルに指定されているものとの間に競合が存在する可能性があります。 サーバーレス Apache Spark プール上に更新されたライブラリを取得するには、これらの依存関係の競合を解決する必要があります。
重要
pip と conda を一緒に使用すると、問題が発生するおそれがあります。 pip と conda を組み合わせる場合は、次の推奨されるベスト プラクティスに従うことをお勧めします。
次のステップ
- 既定のライブラリを確認します: Apache Spark バージョンのサポート