本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
教程:在 Amazon EC2 上设置 Apache Zeppelin Notebook 服务器
在本教程中,您将创建一个在 Amazon EC2 实例上托管的 Apache Zeppelin 笔记本服务器。笔记本连接到您的开发终端节点之一,以便您可以在部署 AWS Glue ETL(提取、转换和加载)脚本之前交互式地对其进行运行、调试和测试。
本教程假定您已执行中概述的步骤进行操作 教程的先决条件。
在 Amazon EC2 实例上创建 Apache Zeppelin 笔记本服务器
要在 Amazon EC2 上创建笔记本服务器,您必须有权在 AWS CloudFormation、Amazon EC2 和其他服务中创建资源。有关所需用户权限的更多信息,请参阅步骤 3: 将策略附加到访问 IAM 的 AWS Glue 用户。
-
在 AWS Glue 控制台中,选择 Dev endpoints (开发终端节点) 以转到开发终端节点列表。
-
通过选择终端节点旁边的框选择它。选择带有空 SSH 公有密钥的终端节点,因为该密钥是在 Amazon EC2 实例上的后续操作中生成的。然后选择 Actions,再选择 Create notebook server。
为托管笔记本服务器,会使用您的开发终端节点上的一个 AWS CloudFormation 堆栈启动 Amazon EC2 实例。如果您使用 SSL 证书创建 Zeppelin 服务器,则会在端口 443 上启动 Zeppelin HTTPS 服务器。
-
仅使用字母数字字符和连字符输入一个 AWS CloudFormation 堆栈服务器名称,例如
demo-cf
。 -
选择您已设置了与 Amazon EC2 具有信任关系的 IAM 角色,如步骤 5: 为笔记本服务器创建 IAM 角色中所述。
-
选择您在 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
来完成此操作。 在 Windows 上,打开控制台并输入private-key-file path
attrib -r
。private-key-file path
-
选择用户名以访问您的 Zeppelin 笔记本。
-
选择要在其中存储笔记本状态的 Amazon S3 路径。
-
选择创建。
您可以在 AWS CloudFormation 控制台 AWS CloudFormationEvents 选项卡 () 中查看 https://console.amazonaws.cn/cloudformation
创建笔记本服务器后,其状态将在 控制台中变为 CREATE_COMPLETEAmazon EC2。有关服务器的详细信息也会显示在开发终端节点详细信息页中。当创建完成后,您可以连接到新服务器上的 notebook。
要完成 Zeppelin 笔记本服务器的设置,您必须对 Amazon EC2 实例运行脚本。本教程要求您在 Amazon EC2 实例上创建 Zeppelin 服务器时上传 SSL 证书。但是还有一种 SSH 本地端口转发方法可以连接。有关其他设置说明,请参阅创建与开发终端节点相关联的笔记本服务器。当创建完成后,您可以使用 HTTPS 连接到新服务器上的笔记本。
对于您创建的任何与开发终端节点关联的 notebook 服务器,都可以对其进行管理。因此,如果您删除开发终端节点以删除笔记本服务器,您必须在 AWS CloudFormation 控制台上删除 AWS CloudFormation 堆栈。
连接到您在 Amazon EC2 上的笔记本服务器
-
在 AWS Glue 控制台中,选择 Dev endpoints(开发终端节点)以导航到开发终端节点列表。选择您为其创建 notebook 服务器的开发终端节点的名称。选择名称以打开其详细信息页面。
-
在 Endpoint details (终端节点详细信息) 页面上,为您的笔记本服务器复制标记为 HTTPS URL 的 URL。
-
打开 Web 浏览器,并将 notebook 服务器 URL 粘贴到其中。这样,您就可以使用端口 443 上的 HTTPS 访问服务器。您的浏览器可能无法识别服务器的证书,在这种情况下,您必须重写其保护并继续进行。
-
使用在创建 notebook 服务器时提供的用户名和密码登录到 Zeppelin。
在 Notebook 段落中运行简单脚本片段
-
选择 Create new note,并将其命名为 Legislators。确认
spark
为 Default Interpreter。 -
您可以通过键入语句
spark.version
并运行它,来验证您的 notebook 是否已正确设置。这将返回在 notebook 服务器上运行的 Apache Spark 版本。 -
在 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