Azure Machine Learning での Apache Spark
Azure Machine Learning と Azure Synapse Analytics を統合すると、Apache Spark フレームワーク経由で分散コンピューティング リソースに簡単にアクセスできます。 この統合により、次の Apache Spark コンピューティング エクスペリエンスが提供されます。
- サーバーレス Spark コンピューティング
- アタッチされた Synapse Spark プール
サーバーレス Spark コンピューティング
Apache Spark フレームワークを使用した Azure Machine Learning サーバーレス Spark コンピューティングは、Azure Machine Learning 環境で分散コンピューティング タスクを実行する最も簡単な方法です。 Azure Machine Learning は、フル マネージドかつサーバーレスのオンデマンド Apache Spark コンピューティング クラスターを提供します。 ユーザーは、Azure Synapse ワークスペースと Synapse Spark プールの両方を作成する必要がなくなります。
ユーザーは、インスタンスの種類や Apache Spark ランタイム バージョンなど、リソースを定義できます。 これらのリソースを使用して、Azure Machine Learning ノートブック内のサーバーレス Spark コンピューティングにアクセスし、以下を行うことができます:
考慮すべき点
サーバーレス Spark コンピューティングは、Apache Spark を使用して分散コンピューティング リソースにすばやくアクセスする必要があるほとんどのユーザー シナリオに適しています。 ただし、情報に基づいた意思決定を行うには、ユーザーはこのアプローチの長所と短所を考慮する必要があります。
長所:
- Apache Spark 用の他の Azure リソースの作成に依存しません (Azure Synapse インフラストラクチャは内部で動作します)。
- Azure Synapse 関連のリソースを作成するためのサブスクリプション アクセス許可は不要です。
- SQL プール クォータは不要です。
短所:
- 永続的な Hive メタストアはありません。 サーバーレス Spark コンピューティングでサポートされるのは、インメモリ Spark SQL のみです。
- 使用可能なテーブルまたはデータベースはありません。
- Azure Purview 統合はありません。
- 利用可能なリンク サービスはありません。
- データ ソースとコネクタの数は少ないです。
- プールレベルの構成はありません。
- プールレベルのライブラリ管理はありません。
mssparkutils
の部分的なサポートのみです。
ネットワークの構成
Azure Machine Learning とサーバーレス Spark コンピューティングでネットワーク分離を使用するには、マネージド仮想ネットワークを使用します。
非アクティブ期間と破棄メカニズム
初回起動時、サーバーレス Spark コンピューティング ("コールド スタート") リソースの Spark セッションが開始するまでに 3 分から 5 分必要な場合があります。 Azure Synapse によってサポートされる自動サーバーレス Spark コンピューティング リソースのプロビジョニングがこの遅延を引き起こします。 サーバーレス Spark コンピューティングがプロビジョニングされ、Apache Spark セッションが開始されると、後続のコード実行 ("ウォーム スタート") にはこの遅延が発生しません。
Spark セッション構成には、セッション タイムアウト (分単位) を定義するオプションが用意されています。 非アクティブ期間がユーザー定義のタイムアウトを超えると、Spark セッションは終了します。 次の 10 分間に別の Spark セッションが開始されない場合、サーバーレス Spark コンピューティング用にプロビジョニングされたリソースは破棄されます。
サーバーレス Spark コンピューティング リソースの破棄が行われると、次のジョブの送信には "コールド スタート" が必要になります。 次の視覚化は、セッションの非アクティブ期間とクラスターの破棄シナリオを示しています。
セッションレベル Conda パッケージ
Conda 依存関係 YAML ファイルでは、セッション構成で多くのセッション レベルの Conda パッケージを定義できます。 YAML ファイル内に定義されている Conda パッケージをインストールするのに 15 分以上かかる場合、セッションはタイムアウトします。 まず、Azure Synapse 基本イメージに必要なパッケージが既に使用可能かどうかをチェックすることが重要になります。 これを行うために、ユーザーは以下のリソースにアクセスして使用中の Apache Spark バージョンの "基本イメージで利用可能なパッケージ" を特定する必要があります。
重要
Azure Synapse Runtime for Apache Spark: お知らせ
- Azure Synapse Runtime for Apache Spark 3.2:
- EOLA のお知らせ日: 2023 年 7 月 8 日
- サポート終了日: 2024 年 7 月 8 日。 この日付を過ぎると、ランタイムは無効になります。
- 継続的なサポートと最適なパフォーマンスを得るために、Apache Spark 3.4 への移行をお勧めします
Note
セッションレベルの Conda パッケージの場合:
- コールド スタート には約 10 分から 15 分かかります。
- 同じ Conda パッケージを使用した ''ウォーム スタート'' には、約 1 分必要です。
- 別の Conda パッケージでの ''ウォーム スタート'' も約 10 分から 15 分必要です。
- 大きなパッケージや長いインストール時間を必要とするパッケージをインストールする場合、Spark インスタンスの起動時間に影響が出る可能性があります。
- PySpark、Python、Scala/Java、.NET、または Spark のバージョンの変更はサポートされていません。
- Docker イメージはサポートされていません。
セッション レベルの Conda パッケージを使用する際のセッションのコールド スタート時間の短縮
spark.hadoop.aml.enable_cache
構成変数を true
に設定することで、Spark セッションの "コールド スタート" 時間を短縮できます。 セッション レベルの Conda パッケージでは、セッションが最初に起動する際のセッションの "コールド スタート" には通常、10 から 15 分の時間がかかります。 しかし、その後のセッション ''コールド スタート'' にかかる時間は 3 分から 5 分です。 [セッションの構成] ユーザー インターフェイスの [構成設定] で、構成変数を定義します。
アタッチされた Synapse Spark プール
Azure Synapse ワークスペースに作成された Spark プールは、アタッチされた Synapse Spark プールを使用して Azure Machine Learning ワークスペースで使用できるようになります。 このオプションは、既存の Synapse Spark プールを再利用するユーザーに適している可能性があります。
Synapse Spark プールを Azure Machine Learning ワークスペースにアタッチする際、Azure Machine Learning でプールを以下の目的で使用できるようにするには追加の手順が必要になります。
アタッチされた Synapse Spark プールを使用すると、ネイティブの Azure Synapse 機能にアクセスできます。 Synapse Spark プールのプロビジョニング、アタッチ、構成、管理は、ユーザーの責任です。
アタッチされた Synapse Spark プールの Spark セッション構成にも、セッション タイムアウト (分単位) を定義するオプションが用意されています。 セッション タイムアウトの動作は、前のセクションの説明と似ていますが、関連付けられたリソースはセッション タイムアウト後に破棄されません。
Spark クラスターのサイズの定義
Azure Machine Learning Spark ジョブでは、次の 3 つのパラメーター値を使用して Spark クラスターのサイズを定義できます。
- Executor の数
- Executor コア
- Executor メモリ
Azure Machine Learning Apache Spark Executor は、Azure Spark ワーカー ノードと同等と見なす必要があります。 これらのパラメーターは、1 つの例を使って説明可能です。 Executor の数を 6 (ワーカー ノード 6 個に相当)、Executor コアの数を 4、Executor メモリを 28 GB として定義したとします。 その後、Spark ジョブでは、合計 24 個のコアと、168 GB のメモリを持つクラスターにアクセスできます。
Spark ジョブのリソース アクセスを確認する
データやその他のリソースにアクセスするために、Spark ジョブでマネージド ID またはユーザー ID パススルーを使用できます。 次の表は、Spark ジョブでリソースにアクセスするために使用されるメカニズムをまとめたものです。
Spark プール | サポートされている ID | 既定の ID |
---|---|---|
サーバーレス Spark コンピューティング | ユーザー ID、ワークスペースにアタッチされたユーザー割り当てマネージド ID | ユーザー ID |
アタッチされた Synapse Spark プール | ユーザー ID、アタッチされた Synapse Spark プールにアタッチされたユーザー割り当てマネージド ID、アタッチされた Synapse Spark プールのシステム割り当てマネージド ID | アタッチされた Synapse Spark プールのシステム割り当てマネージド ID |
この記事では、Spark ジョブのリソース アクセスについて説明しています。 ノートブック セッションにおいて、サーバーレス Spark コンピューティングとアタッチされた Synapse Spark プールは両方とも、対話型データ ラングリング時のデータ アクセスのためにユーザー ID パススルーを利用します。
Note
- Spark ジョブが正常に実行されるようにするため、(データの入出力に使用される Azure ストレージ アカウントでの) 共同作成者およびストレージ BLOB データ共同作成者ロールを、Spark ジョブの送信に使用する ID に割り当てます。
- アタッチされた Synapse Spark プールが Azure Synapse ワークスペース内の Synapse Spark プールを指しており、そのワークスペースにマネージド仮想ネットワークが関連付けられている場合、ストレージ アカウントへのマネージド プライベート エンドポイントを構成します。 この構成は、データ アクセスを確保するのに役立ちます。