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

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

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

在本教程中,您将Jupyter笔记本连接到 JupyterLab 在本地机器上运行至开发端点。这样做是为了可以交互运行、调试和测试 AWS Glue 提取、转换和加载(ETL)脚本,然后再部署它们。本教程使用SecureShell(SSH)端口转发将本地机器连接到 AWS Glue 开发终点。有关更多信息,请参阅 端口转发 Wikipedia的

本教程假设您已经采取了 教程的先决条件.

第1步: 安装 JupyterLab 和 Sparkmagic

您可以安装 JupyterLab 通过使用 condapipconda 是一个开源包管理系统和环境管理系统,在Windows上运行, macOS、和Linux。pip 是Python的包安装程序。

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

  1. 安装 JupyterLab, Sparkmagic和相关分机。

    $ 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,并安装Scala和的内核 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浏览器将自动打开,并且URL http://localhost:8888/lab/workspaces/{workspace_name} 显示。

$ jupyter lab

第3步: 启动SSH端口转发以连接至您的开发端点

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

  1. 打开一个单独的终端窗口,允许您访问SSH。在MicrosoftWindows中,您可以使用提供的BASHshell GitforWindows(Windows的Git),或者您可以安装 赛格温.

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

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

    • 如果您转发的港口不同于 8998,更换 8998 使用本地实际使用的端口号。地址 169.254.76.1:8998 是远程端口,您不会更改。

    • dev-endpoint-public-dns 替换为您的开发终端节点的公有 DNS 地址。要查找此地址,请在 AWS 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)?

    输入 yes 并让终端窗口保持打开状态, JupyterLab.

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

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

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

现在,您的笔记本 JupyterLab 应该与您的开发端点配合使用。将以下脚本片段输入到您的笔记本中,然后运行它。

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

    spark.sql("select 1").show()
  2. 检查 AWS Glue 数据目录 整合工作正常。以下命令列出了 Data Catalog.

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

    以下脚本使用 persons_json 中的表元数据 AWS Glue 数据目录 以创建一个 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 网站。

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