教程:在 JupyterLab 中设置 Jupyter 笔记本来测试和调试 ETL 脚本 - Amazon连接词
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

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

教程:在 JupyterLab 中设置 Jupyter 笔记本来测试和调试 ETL 脚本

在本教程中,您将运行在本地计算机上的 JupyterLab 中的 Jupyter 笔记本连接到开发端点。执行此操作是为了以交互方式运行、调试和测试Amazon Glue提取、转换和加载 (ETL) 脚本。本教程使用安全命令行管理程序 (SSH) 端口转发将本地计算机连接到Amazon Glue开发终端节点。有关更多信息,请参阅 。端口转发在维基百科上。

本教程假定您已执行教程的先决条件

第 1 步:安装 JupyterLab 和闪光魔术

您可以通过以下方式安装 JupyterLab:conda或者pipconda是一个开源程序包管理系统和环境管理系统,在 Windows、macOS 和 Linux 上运行。pip是 Python 的软件包安装程序。

如果您在 macOS 上安装,则必须先安装 Xcode,然后才能安装 Sparkmagic。

  1. 安装 JupyterLab、闪光技术和相关的扩展程序。

    $ conda install -c conda-forge jupyterlab $ pip install sparkmagic $ jupyter nbextension enable --py --sys-prefix widgetsnbextension $ jupyter labextension install @jupyter-widgets/jupyterlab-manager
  2. 检查sparkmagic目录来自Location

    $ pip show sparkmagic | grep Location Location: /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages
  3. 将您的目录更改为Location,然后安装适用于斯卡拉和 PySpark 的内核。

    $ cd /Users/username/.pyenv/versions/anaconda3-5.3.1/lib/python3.7/site-packages $ jupyter-kernelspec install sparkmagic/kernels/sparkkernel $ jupyter-kernelspec install sparkmagic/kernels/pysparkkernel
  4. 下载示例config文件。

    $ curl -o ~/.sparkmagic/config.json https://raw.githubusercontent.com/jupyter-incubator/sparkmagic/master/sparkmagic/example_config.json

    在此配置文件中,您可以配置与 SPARK 相关的参数,如driverMemoryexecutorCores

第 2 步:启动 JupyterLab

启动 JupyterLab 时,默认的 Web 浏览器会自动打开,URLhttp://localhost:8888/lab/workspaces/{workspace_name}将显示。

$ jupyter lab

第 3 步:启动 SSH 端口转发以 Connect 到您的开发终端节点

接下来,使用 SSH 本地端口转发将本地端口 (此处为8998)到远程目标,该目标由Amazon Glue(169.254.76.1:8998)。

  1. 打开一个能让您访问 SSH 访问的单独终端窗口。在微软 Windows 中,您可以使用由适用于 Windows 的 Git,或者您可以安装凯格温

  2. 运行以下 SSH 命令,按如下所示进行修改:

    • private-key-file-path 替换为包含与您用于创建开发终端节点的公有密钥对应的私有密钥的 .pem 文件的路径。

    • 如果您转发的端口不同于8998、将8998与您实际在本地使用的端口号一起使用。地址169.254.76.1:8998是远程端口,您无法更改。

    • dev-endpoint-public-dns 替换为您的开发终端节点的公有 DNS 地址。要查找此地址,请导航到Amazon Glue控制台,请选择名称,然后复制公有地址上列出的端点详细信息页.

    ssh -i private-key-file-path -NTL 8998:169.254.76.1:8998 glue@dev-endpoint-public-dns

    您可能会看到类似如下的警告消息:

    The authenticity of host 'ec2-xx-xxx-xxx-xx.us-west-2.compute.amazonaws.com (xx.xxx.xxx.xx)' can't be established. ECDSA key fingerprint is SHA256:4e97875Brt+1wKzRko+JflSnp21X7aTP3BcFnHYLEts. Are you sure you want to continue connecting (yes/no)?

    Enteryes,在使用 JupyterLab 时保持终端窗口打开。

  3. 检查 SSH 端口转发是否正确使用开发端点。

    $ curl localhost:8998/sessions {"from":0,"total":0,"sessions":[]}

第 4 步:在笔记本段落中运行简单脚本片段

现在,JupyterLab 中的笔记本应该与您的开发端点一起工作。在笔记本中输入以下脚本片段并运行它。

  1. 检查 Spark 是否成功运行。以下命令指示 Spark 计算1,然后打印该值。

    spark.sql("select 1").show()
  2. 检查是否Amazon Glue Data Catalog集成正在工作。以下命令列出数据目录中的表。

    spark.sql("show tables").show()
  3. 检查一个简单的脚本片段使用Amazon Glue库的工作原理。

    下面的脚本使用persons_json表元数据Amazon Glue Data Catalog创建DynamicFrame从您的示例数据。然后,它会打印出该数据的项目计数和架构。

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext # 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

Troubleshooting

  • 在 JupyterLab 安装过程中,如果您的计算机位于公司代理或防火墙后面,您可能会遇到由公司 IT 部门管理的自定义安全配置文件造成的 HTTP 和 SSL 错误。

    以下是一个典型错误的示例,当conda无法连接到其自己的存储库:

    CondaHTTPError: HTTP 000 CONNECTION FAILED for url <https://repo.anaconda.com/pkgs/main/win-64/current_repodata.json>

    发生这种情况可能是因为您的公司可以阻止与 Python 和 JavaScript 社区中广泛使用的存储库的连接。有关更多信息,请参阅 。安装问题JupyterLab。

  • 如果遇到连接被拒绝尝试连接到开发终端节点时出错,则您可能正在使用过期的开发终端节点。尝试创建新的开发终端节点并重新连接。