教程:在 Amazon EC2 中设置 Apache Zeppelin 笔记本服务器 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

教程:在 Amazon EC2 中设置 Apache Zeppelin 笔记本服务器

在本教程中,您将创建一个在 Amazon EC2 实例上托管的 Apache Zeppelin 笔记本服务器。笔记本连接到您的开发终端节点之一,以便您可以在部署 AWS Glue ETL(提取、转换和加载)脚本之前交互式地对其进行运行、调试和测试。

本教程假定您已执行中概述的步骤进行操作 教程的先决条件

在 Amazon EC2 实例上创建 Apache Zeppelin 笔记本服务器

要在 Amazon EC2 上创建笔记本服务器,您必须有权在 AWS CloudFormation、Amazon EC2 和其他服务中创建资源。有关所需用户权限的更多信息,请参阅步骤 3:将策略附加到访问 AWS Glue 的 IAM 用户

  1. 在 AWS Glue 控制台中,选择 Dev endpoints (开发终端节点) 以转到开发终端节点列表。

  2. 通过选择终端节点旁边的框选择它。使用空的 SSH 公有密钥选择终端节点,因为该密钥是在 Amazon EC2 实例上的后续操作中生成的。然后选择 Actions,再选择 Create notebook server

    为托管笔记本服务器,会使用您的开发终端节点上的一个 AWS CloudFormation 堆栈启动 Amazon EC2 实例。如果您使用 SSL 证书创建 Zeppelin 服务器,则会在端口 443 上启动 Zeppelin HTTPS 服务器。

  3. 仅使用字母数字字符和连字符输入一个 AWS CloudFormation 堆栈服务器名称,例如 demo-cf

  4. 选择您已设置了与 Amazon EC2 具有信任关系的 IAM 角色,如步骤 5:创建用于笔记本服务器的 IAM 角色中所述。

  5. 选择您在 Amazon EC2 控制台 (https://console.amazonaws.cn/ec2/) 上生成的 Amazon EC2 密钥对,或者选择 Create EC2 key pair (创建 EC2 密钥对) 生成新的密钥对。请记住下载并保存密钥对的私有密钥部分的位置。此密钥对与创建开发终端节点时使用的 SSH 密钥不同(Amazon EC2 使用的密钥是 2048 位 SSH-2 RSA 密钥)。有关 Amazon EC2 密钥的更多信息,请参阅 Amazon EC2 密钥对

    通常,最好的做法是确保私有密钥文件是写保护的,以免被意外修改。在 macOS 和 Linux 系统上,通过打开一个终端并输入 chmod 400 private-key-file path来完成此操作。在 Windows 上,打开控制台并输入 attrib -r private-key-file path

  6. 选择用户名以访问您的 Zeppelin 笔记本。

  7. 选择要在其中存储笔记本状态的 Amazon S3 路径。

  8. 选择 Create

您可以在 AWS CloudFormation 控制台 Events (事件) 选项卡 (https://console.amazonaws.cn/cloudformation) 中查看 AWS CloudFormation 堆栈的状态。您可以在 Amazon EC2 控制台 (https://console.amazonaws.cn/ec2/) 中查看 AWS CloudFormation 创建的 Amazon EC2 实例。搜索用密钥名称 aws-glue-dev-endpoint 和开发终端节点名称的值标记的实例。

创建笔记本服务器后,其状态将在 Amazon EC2 控制台中变为 CREATE_COMPLETE。有关服务器的详细信息也会显示在开发终端节点详细信息页中。当创建完成后,您可以连接到新服务器上的 notebook。

要完成 Zeppelin 笔记本服务器的设置,您必须对 Amazon EC2 实例运行脚本。本教程要求您在 Amazon EC2 实例上创建 Zeppelin 服务器时上传 SSL 证书。但是还有一种 SSH 本地端口转发方法可以连接。有关其他设置说明,请参阅创建与开发终端节点相关联的笔记本服务器。当创建完成后,您可以使用 HTTPS 连接到新服务器上的笔记本。

注意

对于您创建的任何与开发终端节点关联的 notebook 服务器,都可以对其进行管理。因此,如果您删除开发终端节点以删除笔记本服务器,您必须在 AWS CloudFormation 控制台上删除 AWS CloudFormation 堆栈。

连接到您在 Amazon EC2 上的笔记本服务器

  1. 在 AWS Glue 控制台中,选择 Dev endpoints(开发终端节点)以导航到开发终端节点列表。选择您为其创建 notebook 服务器的开发终端节点的名称。选择名称以打开其详细信息页面。

  2. Endpoint details (终端节点详细信息) 页面上,为您的笔记本服务器复制标记为 HTTPS URL 的 URL。

  3. 打开 Web 浏览器,并将 notebook 服务器 URL 粘贴到其中。这样,您就可以使用端口 443 上的 HTTPS 访问服务器。您的浏览器可能无法识别服务器的证书,在这种情况下,您必须重写其保护并继续进行。

  4. 使用在创建 notebook 服务器时提供的用户名和密码登录到 Zeppelin。

在 Notebook 段落中运行简单脚本片段

  1. 选择 Create new note,并将其命名为 Legislators。确认 sparkDefault Interpreter

  2. 您可以通过键入语句 spark.version 并运行它,来验证您的 notebook 是否已正确设置。这将返回在 notebook 服务器上运行的 Apache Spark 版本。

  3. 在 notebook 中的下一个段落内键入以下脚本并运行它。此脚本从您的爬网程序创建的 persons_json 表中读取元数据,根据底层数据创建一个 DynamicFrame,并显示记录数和数据的架构。

    %pyspark import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.transforms import * from awsglue.utils import getResolvedOptions # Create a Glue context glueContext = GlueContext(SparkContext.getOrCreate()) # Create a DynamicFrame using the 'persons_json' table persons_DyF = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons_json") # Print out information about this data print "Count: ", persons_DyF.count() persons_DyF.printSchema()

    该脚本的输出应为:

    Count: 1961 root |-- family_name: string |-- name: string |-- links: array | |-- element: struct | | |-- note: string | | |-- url: string |-- gender: string |-- image: string |-- identifiers: array | |-- element: struct | | |-- scheme: string | | |-- identifier: string |-- other_names: array | |-- element: struct | | |-- note: string | | |-- name: string | | |-- lang: string |-- sort_name: string |-- images: array | |-- element: struct | | |-- url: string |-- given_name: string |-- birth_date: string |-- id: string |-- contact_details: array | |-- element: struct | | |-- type: string | | |-- value: string |-- death_date: string