

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用笔记本控制 Amazon EMR Spark 实例
<a name="nbi-lifecycle-config-emr"></a>

**重要**  
允许 Amazon SageMaker Studio 或 Amazon SageMaker Studio Classic 创建亚马逊 SageMaker资源的自定义 IAM 策略还必须授予向这些资源添加标签的权限。之所以需要为资源添加标签的权限，是因为 Studio 和 Studio Classic 会自动为创建的任何资源添加标签。如果 IAM 策略允许 Studio 和 Studio Classic 创建资源但不允许标记，则在尝试创建资源时可能会出现 AccessDenied “” 错误。有关更多信息，请参阅 [提供标记 A SageMaker I 资源的权限](security_iam_id-based-policy-examples.md#grant-tagging-permissions)。  
[Amazon 亚马逊 A SageMaker I 的托管策略](security-iam-awsmanpol.md)授予创建 SageMaker 资源的权限已经包括在创建这些资源时添加标签的权限。

您可以使用使用自定义生命周期配置脚本创建的笔记本实例从您的笔记本访问 Amazon 服务。例如，您可以创建一个脚本，该脚本允许您使用带有 Sparkmagic 的笔记本来控制其他 Amazon 资源，例如 Amazon EMR 实例。然后，您可以使用 Amazon EMR 实例来处理数据，而不用在笔记本上运行数据分析。这样就可以创建一个较小的笔记本实例，因为您不会使用该实例来处理数据。当您有大型数据集，需要大型笔记本实例来处理数据时，这很有帮助。

该过程需要使用 Amazon A SageMaker I 控制台执行三个过程：
+ 创建 Amazon EMR Spark 实例
+ 创建 Jupyter 笔记本
+ 测试 notebook-to-Amazon EMR 连接

**创建可以使用 Sparkmagic 从笔记本控制的 Amazon EMR Spark 实例**

1. 打开 Amazon EMR 控制台（[https://console.aws.amazon.com/elasticmapreduce/](https://console.amazonaws.cn/elasticmapreduce/)）。

1. 在导航窗格中，选择**创建集群**。

1. 在**创建集群 - 快速选项**页面上，在**软件配置**下，选择 **Spark：Hadoop 2.8.5 YARN 上的 Spark 2.4.4，带有 Ganglia 3.7.2 和 Zeppelin 0.8.2**。

1. 在页面上设置其他参数，然后选择**创建集群**。

1. 在**集群**页面上，选择您创建的集群名称。记下**主公有 DNS**、**EMR 主设备的安全组**以及在其中创建 EMR 集群的 VPC 名称和子网 ID。在创建笔记本时，将使用这些值。

**创建使用 Sparkmagic 控制 Amazon EMR Spark 实例的笔记本**

1. 打开 Amazon A SageMaker I 控制台，网址为[https://console.aws.amazon.com/sagemaker/](https://console.amazonaws.cn/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. 选择**创建笔记本实例**。

创建笔记本实例时，状态为 **Pending**。实例创建完毕并且生命周期配置脚本成功运行后，状态为**InService**。

**注意**  
如果笔记本实例无法连接到 Amazon EMR 实例，则 SageMaker AI 无法创建笔记本实例。如果 Amazon EMR 实例和笔记本不在同一 VPC 和子网中，如果笔记本未使用 Amazon EMR 主安全组，如果脚本中的主公有 DNS 名称不正确，则连接可能会失败。

**测试 Amazon EMR 实例与笔记本之间的连接**

1.  当笔记本的状态为 “打开 Jupyter” 时 **InService**，选择 “**打开 Jupyter**” 以打开笔记本。

1. 选择 “**新建**”，然后选择 **Sparkmagic (PySpark)**。

1. 在代码单元格中，输入 **%%info** 并运行单元格。

   输出内容应该类似于以下内容

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