本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用笔记本控制 Amazon EMR Spark 实例
您可以使用通过自定义生命周期配置脚本创建的笔记本实例从笔记本访问 AWS 服务。例如,您可以创建一个脚本来让您通过 Sparkmagic 使用笔记本以控制其他 AWS 资源,例如 Amazon EMR 实例。然后,您可以使用 Amazon EMR 实例处理您的数据,而不是在笔记本上运行数据分析。这允许您创建一个较小的笔记本实例,因为您不会使用该实例来处理数据。当您的大型数据集需要大型笔记本实例来处理数据时,此功能非常有用。
该过程需要使用 Amazon SageMaker 控制台执行三个步骤:
-
创建 Amazon EMR Spark 实例
-
创建 Jupyter 笔记本
-
测试笔记本到Amazon EMR 的连接
创建可以使用 Sparkmagic 从笔记本控制的 Amazon EMR Spark 实例
-
从 https://console.amazonaws.cn/elasticmapreduce/
打开 Amazon EMR 控制台。 -
在导航窗格中,选择 Create cluster (创建集群).
-
在 Create Cluster - Quick Options (创建集群 - 快速选项) 页面上,在 Software configuration (软件配置) 下,选择 Spark: Spark 2.4.4 on Hadoop 2.8.5 YARN with Ganglia 3.7.2 and Zeppelin 0.8.2 (Spark:Hadoop 2.8.5 YARN 上的 Spark 2.4.4,带有 Ganglia 3.7.2 和 Zeppelin 0.8.2).
-
在页面上设置其他参数,然后选择 Create cluster (创建集群).
-
在 Cluster (集群) 页面上,选择您创建的集群名称。记下主节点公有 DNS、EMR 主节点的安全组以及在其中创建 EMR 集群的 VPC 名称和子网 ID。在创建笔记本时,将使用这些值。
创建使用 Sparkmagic 控制 Amazon EMR Spark 实例的笔记本
-
通过以下网址打开 Amazon SageMaker 控制台:https://console.amazonaws.cn/sagemaker/
。 -
在导航窗格中的 Notebook instances (笔记本实例) 下,选择 Create notebook (创建笔记本).
-
输入笔记本实例名称并选择实例类型。
-
选择 Additional configuration (其他配置),然后在 Lifecycle configuration (生命周期配置) 下选择 Create a new lifecycle configuration (创建新的生命周期配置).
-
将以下代码添加到生命周期配置脚本中:
# 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"
-
在脚本的
PARAMETERS
部分中,将your.emr.master.ip
替换为 Amazon EMR 实例的主公有 DNS 名称。 -
选择 Create configuration (创建配置).
-
在 Create notebook (创建笔记本) 页面上,选择 Network - optional (网络 - 可选).
-
选择 Amazon EMR 实例所在的 VPC 和子网。
-
选择 Amazon EMR 主节点使用的安全组。
-
选择创建笔记本实例.
创建笔记本实例时,状态为 Pending (待处理). 在创建实例并成功运行生命周期配置脚本后,状态为 InService 。
如果笔记本实例无法连接到 Amazon EMR 实例,则 SageMaker 无法创建笔记本实例。如果 Amazon EMR 实例和笔记本不在同一 VPC 和子网中,如果笔记本未使用 Amazon EMR 主安全组,或者如果脚本中的主公有 DNS 名称不正确,则连接可能会失败。
测试 Amazon EMR 实例与笔记本之间的连接
-
当笔记本的状态为 InService 时,选择 Open Jupyter (打开 Jupyter) 以打开笔记本。
-
选择 New (新建),然后选择 Sparkmagic (PySpark).
-
在代码单元格中,输入
%%info
并运行单元格。该输出值应该类似于以下内容
Current session configs: {'driverMemory': '1000M', 'executorCores': 2, 'kind': 'pyspark'} No active sessions.