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 コンピューティング リソースの破棄が行われると、次のジョブの送信には "コールド スタート" が必要になります。 次の視覚化は、セッションの非アクティブ期間とクラスターの破棄シナリオを示しています。

Apache 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 日。 この日付を過ぎると、ランタイムは無効になります。
  • 継続的なサポートと最適なパフォーマンスを得るために、移行することをお勧めします

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 分です。 [セッションの構成] ユーザー インターフェイスの [構成設定] で、構成変数を定義します。

キャッシュを有効にする Spark セッション構成タグを示す展開可能な図。

アタッチされた 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

次のステップ