

# AWS Glue 開発エンドポイントで SageMaker ノートブックを使用する方法
<a name="dev-endpoint-how-it-works"></a>

開発エンドポイントにアクセスする一般的な方法の 1 つは、SageMaker ノートブックの [Jupyter](https://jupyter.org/) を使用することです。Jupyter Notebook は、可視化、分析、機械学習などで広く使用されているオープンソースのウェブアプリケーションです。AWS Glue SageMaker ノートブックにより、AWS Glue 開発エンドポイントを使用した Jupyter Notebook を使用できます。AWS Glue SageMaker ノートブックでは、Jupyter Notebook 環境は [SparkMagic](https://github.com/jupyter-incubator/sparkmagic) (リモートの Spark クラスターに Spark ジョブを送信するオープンソースの Jupyter プラグイン) で事前設定されています。[Apache Livy](https://livy.apache.org)は、REST API を介してリモート Spark クラスターとのやり取りを可能にするサービスです。AWS Glue SageMaker ノートブックでは、SparkMagic は、AWS Glue 開発エンドポイントで実行されている Livy サーバーに対して REST API を呼び出すように設定されています。

各コンポーネントの動作について、次のテキストフローで説明します。

 *AWS Glue SageMaker ノートブック: (Jupyter → SparkMagic) → (ネットワーク) →  AWS Glue 開発エンドポイント: (Apache Livy → Apache Spark)* 

Jupyter Notebook 上の各段落に記述された Spark スクリプトを実行すると、Spark コードが SparkMagic 経由で Livy サーバーに送信され、「livy-session-N」という名前の Spark ジョブが Spark クラスター上で実行されます。このジョブは、Livy セッションと呼ばれます。ノートブックセッションが存続している間、Spark ジョブは実行されます。Spark ジョブは、ノートブックから Jupyter カーネルをシャットダウンしたとき、またはセッションがタイムアウトしたときに終了します。ノートブック (.ipynb) ファイルごとに 1 つの Spark ジョブが起動します。

単一の AWS Glue 開発エンドポイントで複数の SageMaker ノートブックインスタンスを使用でき ます。SageMaker ノートブックインスタンスごとに、複数のノートブックファイルを作成できます。各ノートブックファイルを開いて段落を実行すると、SparkMagic 経由で Spark クラスター上のノートブックファイルごとに Livy セッションが起動します。各 Livy セッションは、単一の Spark ジョブに対応します。

## AWS Glue 開発エンドポイントと SageMaker ノートブックのデフォルトの動作
<a name="dev-endpoint-default-behavior"></a>

Spark ジョブは、[[Spark configuration](https://spark.apache.org/docs/2.4.3/configuration.html)] (Spark の設定) に基づいて実行されます。Spark の設定には複数の方法があります (Spark クラスター設定、SparkMagic の設定など)。

デフォルトでは、Spark は Spark クラスター設定に基づいて Livy セッションにクラスターリソースを割り当てます。AWS Glue 開発エンドポイントでは、クラスター設定はワーカーのタイプによって異なります。ワーカータイプごとの共通設定について説明した表を次に示します。


****  

|  | 標準 | G.1X | G.2X | 
| --- | --- | --- | --- | 
|  spark.driver.memory  | 5G | 10G | 20G | 
|  spark.executor.memory  | 5G | 10G | 20G | 
|  spark.executor.cores  | 4 | 8 | 16 | 
|  spark.dynamicAllocation.enabled  | TRUE | TRUE | TRUE | 

Sparkエグゼキュターの最大数は、DPU (または `NumberOfWorkers`) とワーカータイプの組み合わせによって自動的に計算されます。


****  

|  | 標準 | G.1X | G.2X | 
| --- | --- | --- | --- | 
| Spark エグゼキュターの最大数 |  (DPU - 1) \$1 2 - 1  |  (NumberOfWorkers - 1)   |  (NumberOfWorkers - 1)   | 

例えば、開発エンドポイントに 10 ワーカーあり、ワーカータイプが ` G.1X` の場合、Spark エグゼキュターは 9 つになり、各エグゼキュターは 10G のメモリを持つため、クラスター全体のエグゼキュターメモリは 90G になります。

指定されたワーカータイプに関係なく、Spark 動的リソース割り当てが有効になります。データセットが十分に大きい場合、`spark.dynamicAllocation.maxExecutors` はデフォルトで設定されていないため、Spark はすべてのエグゼキュターを単一の Livy セッションに割り当てることができます。つまり、同じ開発エンドポイント上の他の Livy セッションは、新しいエグゼキュターの起動を待つことになります。データセットが小さい場合、Spark は同時に複数の Livy セッションにエグゼキュターを割り当てることができます。

**注記**  
さまざまなユースケースでリソースがどのように割り当てられるか、および動作を変更するための設定方法の詳細については、「[高度な設定: 複数のユーザー間で開発エンドポイントを共有する](dev-endpoint-sharing.md)」を参照してください。