

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

# 使用筆記本來控制 Amazon EMR Spark 執行個體
<a name="nbi-lifecycle-config-emr"></a>

**重要**  
允許 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 建立 Amazon SageMaker 資源的自訂 IAM 政策也必須授與許可，才能將標籤新增至這些資源。需要將標籤新增至資源的許可，因為 Studio 和 Studio Classic 會自動標記它們建立的任何資源。如果 IAM 政策允許 Studio 和 Studio Classic 建立資源，但不允許標記，則在嘗試建立資源時可能會發生 "AccessDenied" 錯誤。如需詳細資訊，請參閱[提供標記 SageMaker AI 資源的許可](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
提供許可來建立 SageMaker 資源的 [AWS Amazon SageMaker AI 的 受管政策](security-iam-awsmanpol.md) 已包含建立這些資源時新增標籤的許可。

您可以使用使用自訂生命週期組態指令碼建立的筆記本執行個體，從筆記本存取 AWS 服務。例如，您可以建立指令碼以便能搭配使用筆記本與 Sparkmagic 來控制其他 AWS 資源，例如 Amazon EMR 執行個體。然後，您可以使用 Amazon EMR 執行個體來處理資料，而不是在筆記本上執行資料分析。這可讓您建立較小的筆記本執行個體，因為您不會使用執行個體來處理資料。當您擁有需要大型筆記本執行個體才能處理資料的大型資料集時，這會很有幫助。

此程序需要三個使用 Amazon SageMaker AI 主控台的程序：
+ 建立 Amazon EMR Spark 執行個體
+ 建立 Jupyter 筆記本
+ 測試筆記本與 Amazon EMR 的連線

**建立可從筆記本使用 Sparkmagic 進行控制的 Amazon EMR Spark 執行個體**

1. 請在 [https://console.aws.amazon.com/elasticmapreduce/](https://console.aws.amazon.com/elasticmapreduce/) 開啟 Amazon EMR 主控台。

1. 在導覽窗格中，選擇**建立叢集**。

1. 在**建立叢集 - 快速選項**頁面上的**軟體組態**底下，選擇 **Spark: Spark 2.4.4 on Hadoop 2.8.5 YARN with Ganglia 3.7.2 and Zeppelin 0.8.2**。

1. 設定該頁面上的其他參數，然後選擇**建立叢集**。

1. 在**叢集**頁面上，選擇您所建立的叢集名稱。請記下 EMR 叢集建立所在的**主要公有 DNS**、**EMR 主節點的安全群組**以及 VPC 名稱和子網路 ID。您會在建立筆記本時用到這些值。

**建立會使用 Sparkmagic 來控制 Amazon EMR Spark 執行個體的筆記本**

1. 開啟 Amazon SageMaker AI 主控台，網址為 [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)。

1. 在導覽窗格的**筆記本執行個體**底下，選擇**建立筆記本**。

1. 輸入筆記本執行個體名稱，並選擇執行個體類型。

1. 選擇**其他組態**，然後在**生命週期組態**底下，選擇**建立新的生命週期組態**。

1. 將下列程式碼新增至生命週期組態指令碼：

   ```
   # OVERVIEW
   # This script connects an Amazon EMR cluster to an Amazon SageMaker notebook instance that uses Sparkmagic.
   #
   # Note that this script will fail if the Amazon EMR cluster's master node IP address is not reachable.
   #   1. Ensure that the EMR master node IP is resolvable from the notebook instance.
   #      One way to accomplish this is to have the notebook instance and the Amazon EMR cluster in the same subnet.
   #   2. Ensure the EMR master node security group provides inbound access from the notebook instance security group.
   #       Type        - Protocol - Port - Source
   #       Custom TCP  - TCP      - 8998 - $NOTEBOOK_SECURITY_GROUP
   #   3. Ensure the notebook instance has internet connectivity to fetch the SparkMagic example config.
   #
   # https://aws.amazon.com/blogs/machine-learning/build-amazon-sagemaker-notebooks-backed-by-spark-in-amazon-emr/
   
   # PARAMETERS
   EMR_MASTER_IP=your.emr.master.ip
   
   
   cd /home/ec2-user/.sparkmagic
   
   echo "Fetching Sparkmagic example config from GitHub..."
   wget https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json
   
   echo "Replacing EMR master node IP in Sparkmagic config..."
   sed -i -- "s/localhost/$EMR_MASTER_IP/g" example_config.json
   mv example_config.json config.json
   
   echo "Sending a sample request to Livy.."
   curl "$EMR_MASTER_IP:8998/sessions"
   ```

1. 在指令碼的 `PARAMETERS` 區段中，將 `your.emr.master.ip` 取代為 Amazon EMR 執行個體的主要公有 DNS 名稱。

1. 選擇**建立組態**。

1. 在**建立筆記本**頁面上，選擇**網路 - 選項**。

1. 選擇 Amazon EMR 執行個體所在的 VPC 和子網路。

1. 選擇 Amazon EMR 主節點所使用的安全群組。

1. 選擇**建立筆記本執行個體**。

在系統建立筆記本執行個體時，其狀態會是**待定**。在執行個體建立完成且生命週期組態指令碼成功執行後，其狀態則會變為 **InService**。

**注意**  
如果筆記本執行個體無法連線到 Amazon EMR 執行個體，SageMaker AI 就無法建立筆記本執行個體。如果 Amazon EMR 執行個體和筆記本不在相同的 VPC 和子網路中、筆記本未使用 Amazon EMR 的主安全群組，或指令碼中的主要公有 DNS 名稱不正確，連線便可能失敗。

**測試 Amazon EMR 執行個體與筆記本之間的連線**

1.  當筆記本的狀態為 **InService** 時，請選擇**開啟 Jupyter**以開啟筆記本。

1. 選擇**新增**，然後選擇 **Sparkmagic (PySpark)**。

1. 在程式碼儲存格中輸入 **%%info**，然後執行儲存格。

   其輸出應該會類似以下內容

   ```
   Current session configs: {'driverMemory': '1000M', 'executorCores': 2, 'kind': 'pyspark'}
                       No active sessions.
   ```