

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Glue 開發端點如何搭配 SageMaker 筆記本使用
<a name="dev-endpoint-how-it-works"></a>

存取開發端點的常見方法之一是在 SageMaker 筆記本上使用 [Jupyter](https://jupyter.org/)。Jupyter 筆記本是一個開源 Web 應用程式，廣泛用於視覺化、分析、機器學習等。AWS Glue SageMaker 筆記本為您提供了一個搭配 AWS Glue 開發端點的 Jupyter 筆記本體驗。在 AWS Glue SageMaker 筆記本中，Jupyter 筆記本環境預先設定了 [SparkMagic](https://github.com/jupyter-incubator/sparkmagic)，這是一個開源的 Jupyter 外掛程式，可將 Spark 任務提交到遠端 Spark 叢集。[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 筆記本上執行在每個段落中編寫的 Spark 指令碼，Spark 程式碼就會透過 SparkMagic 提交到 Livy 伺服器，然後一個名為 "livy-session-N" 的 Spark 任務會在 Spark 叢集上執行。這個任務叫做 Livy 工作階段。Spark 任務將在筆記本工作階段處於活動狀態時執行。當您從筆記本關閉 Jupyter 核心或工作階段逾時時，Spark 任務將會終止。每個筆記本 (.ipynb) 檔案啟動一個 Spark 任務。

您可以使用單一 AWS Glue 開發端點來搭配多個 SageMaker 筆記本執行個體。您可以在每個 SageMaker 筆記本執行個體中建立多個筆記本檔案。當您開啟每個筆記本檔案並執行段落時，會透過 SparkMagic 在 Spark 叢集上每個筆記本檔案的 Livy 工作階段啟動。每個 Livy 工作階段對應於單個 Spark 任務。

## AWS Glue 開發端點和 SageMaker 筆記本的預設行為
<a name="dev-endpoint-default-behavior"></a>

Spark 任務是根據 [Spark 設定](https://spark.apache.org/docs/2.4.3/configuration.html)執行。有多種方法可以設定 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`，那麼您將有 9 個 Spark 執行器，並且整個叢集將有 90G 的執行器記憶體，因為每個執行器都有 10G 的記憶體。

無論指定的工作者類型為何，Spark 動態資源配置都會開啟。如果資料集足夠大，Spark 可以將所有執行器配置給單個 Livy 工作階段，因為預設未設定 `spark.dynamicAllocation.maxExecutors`。這代表同一個開發端點上的其他 Livy 工作階段將等待啟動新的執行器。如果資料集很小，Spark 將能夠同時將執行器配置給多個 Livy 工作階段。

**注意**  
如需有關如何在不同的使用案例中配置資源，以及如何設定組態來修改行為的詳細資訊，請參閱 [進階組態：在多個使用者之間共用開發端點](dev-endpoint-sharing.md)。