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

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

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

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

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

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

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

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

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

    为托管笔记本服务器,会使用Amazon CloudFormation堆栈。如果您使用 SSL 证书创建 Zeppelin 服务器,则会在端口 443 上启动 Zeppelin HTTPS 服务器。

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

  4. 选择您已设置了与 Amazon EC2 信任关系的 IAM 角色,如第 5 步:为笔记本服务器创建 IAM 角色

  5. 选择您在 Amazon EC2 控制台上生成的 Amazon EC2 key pair (https://console.aws.amazon.com/ec2/),或选择创建 EC2 key pair生成新的。请记住下载并保存密钥对的私有密钥部分的位置。此 key pair 与创建开发终端节点时使用的 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. 选择创建

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

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

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

注意

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

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

  1. 在 Amazon 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