教程:通过开发终端节点设置 PyCharm Professional - AWS Glue

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

教程:通过开发终端节点设置 PyCharm Professional

本教程介绍如何将您的本地计算机上运行的 PyCharm Professional Python IDE 连接到开发终端节点,以便您交互运行、调试和测试 AWS Glue ETL(提取、转换和加载)脚本,然后再进行部署。本教程中的说明和屏幕截图基于 PyCharm Professional 版本 2019.3。

要以交互方式连接到开发终端节点,您必须安装 PyCharm Professional。您不能使用免费版进行这项操作。

注意

本教程使用 Amazon S3 作为数据源。如果要改用 JDBC 数据源,则必须在 Virtual Private Cloud (VPC) 中运行开发终端节点。要使用 SSH 连接到 VPC 中的开发终端节点,则必须创建 SSH 隧道。本教程不包含有关创建 SSH 隧道的说明。有关使用 SSH 连接到 VPC 中的开发终端节点的信息,请参阅 AWS 安全博客中的 Securely Connect to Linux Instances Running in a Private Amazon VPC

将 PyCharm Professional 连接到开发终端节点

  1. 在 PyCharm 中创建新的纯 Python 项目,将其命名为 legislators

  2. 在项目中创建一个名为 get_person_schema.py 的文件,该文件包含以下内容:

    from pyspark.context import SparkContext from awsglue.context import GlueContext def main(): # 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() if __name__ == "__main__": main()
  3. 请执行以下操作之一:

    • 对于 AWS Glue 版本 0.9,将 AWS Glue Python 库文件 PyGlue.ziphttps://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip 下载到您的本地计算机上的方便位置。

    • 对于 AWS Glue 版本 1.0 及更高版本,将 AWS Glue Python 库文件 PyGlue.ziphttps://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip 下载到您的本地计算机上的方便位置。

  4. 在 PyCharm 中将 PyGlue.zip 添加为您项目的内容根:

    • 在 PyCharm 中,依次选择 File (文件)、Settings (设置),打开 Settings (设置) 对话框。(也可以按 Ctrl+Alt+S。)

    • 展开 legislators 项目,然后选择 Project Structure (项目结构)。然后,在右侧窗格中,选择 + Add Content Root (+ 添加内容根)。

    • 导航到您保存 PyGlue.zip 的位置,选择该位置,然后选择 Apply (应用)。

    Settings (设置) 屏幕上显示的内容应类似于:

    将 PyGlue.zip 作为内容根添加的 PyCharm“Settings”(设置)屏幕。

    选择 Apply (应用) 后,保持 Settings (设置) 对话框处于打开状态。

  5. 配置部署选项,使用 SFTP 将本地脚本上传到您的开发终端节点 (此功能仅在 PyCharm Professional 中可用):

    • Settings (设置) 对话框中,展开 Build, Execution, Deployment (构建、执行、部署) 部分。选择 Deployment (部署) 子部分。

    • 选择中间窗格顶部的 + 图标,添加新服务器。将其 Type (类型) 设置为 SFTP 并为其命名。

    • SFTP host (SFTP 主机) 设置为开发终端节点的 Public address (公有地址),如其详细信息页面上所示。(在 AWS Glue 控制台中选择开发终端节点的名称可显示详细信息页面)。对于正在 VPC 中运行的开发终端节点,请将 SFTP host (SFTP 主机) 设置为主机地址,并将 SSH 隧道的本地端口设置为开发终端节点。

    • User name (用户名) 设置为 glue

    • Auth type (验证类型) 设置为 Key pair (OpenSSH or Putty) (密钥对 (OpenSSH 或 Putty))。通过浏览到您的开发终端节点私有密钥文件所在的位置,设置 Private key file (私有密钥文件)。请注意,PyCharm 仅支持 DSA、RSA 和 ECDSA OpenSSH 密钥类型,不接受 Putty 的私有格式密钥。您可以使用最新版本的 ssh-keygen 生成 PyCharm 接受的密钥对类型,例如使用以下语法:

      ssh-keygen -t rsa -f <key_file_name> -C "<your_email_address>"
    • 选择 Test connection (测试连接),并允许测试连接。如果连接成功,选择 Apply (应用)。

    现在,Settings (设置) 屏幕上显示的内容应类似于:

    定义 SFTP 服务器的 PyCharm Settings(设置)屏幕。

    同样,选择 Apply (应用) 后,保持 Settings (设置) 对话框处于打开状态。

  6. 将本地目录映射到远程目录进行部署:

    • 在右侧窗格中,选择 Deployment (部署) 页面,选择顶部的中间选项卡,即标签为 Mappings (映射) 的选项卡。

    • Deployment Path (部署路径) 列中,输入 /home/glue/scripts/ 下的路径,以部署您的项目路径。例如:/home/glue/scripts/legislators

    • 选择 应用

    现在,Settings (设置) 屏幕上显示的内容应类似于:

    部署映射后的 PyCharm“Settings”(设置)屏幕。

    选择 OK (确定) 以关闭 Settings (设置) 对话框。

将脚本部署到您的开发终端节点

  1. 选择 Tools (工具)Deployment (部署),然后选择要在其下设置开发终端节点的名称,如下图所示:

    用于部署脚本的菜单项。

    部署脚本后,屏幕底部显示的内容应类似于:

    成功部署后 PyCharm 屏幕的底部。
  2. 在菜单栏上,选择 Tools (工具)Deployment (部署)Automatic Upload (always) (自动上传(始终))。确保 Automatic Upload (always) (自动上传(始终)) 旁边显示了复选标记。

    启用此选项后,PyCharm 会自动将更改后的文件上传到开发终端节点。

配置远程解释器

将 PyCharm 配置为在开发终端节点上使用 Python 解释器。

  1. File (文件) 菜单中,选择 Settings (设置)

  2. 展开项目 legislators,然后选择 Project Interpreter (项目解释器)

  3. 选择 Project Interpreter (项目解释器) 列表旁边的齿轮图标,然后选择 Add (添加)

  4. Add Python Interpreter (添加 Python 解释器) 对话框的左侧窗格中,选择 SSH Interpreter (SSH 解释器)

  5. 选择 Existing server configuration (现有服务器配置),然后在 Deployment configuration (部署配置) 列表中,选择您的配置。

    您的屏幕上显示的内容应类似于以下图像。

    在左侧窗格中,已选定“SSH Interpreter (SSH 解释器)”,在右窗格中,已选定“Existing server configuration (现有服务器配置)”单选按钮。“Deployment configuration (部署配置)”字段包含配置名称和消息“Remote SDK is saved in IDE settings, so it needs the deployment server to be saved there too。Which do you prefer? (由于远程开发工具包保存在 IDE 设置中,因此它需要也在该设置中保存部署服务器。您更喜欢哪一个?)” 以下是该消息下的选项“Create copy of this deployment server in IDE settings (在 IDE 设置中创建此部署服务器的副本)”和“Move this server to IDE settings (将此服务器移至 IDE 设置)”。
  6. 选择 Move this server to IDE settings (将此服务器移至 IDE 设置),然后选择 Next (下一步)

  7. Interpreter (解释器) 字段中,将路径更改为 /usr/bin/gluepython(如果您使用的是 Python 2)或 /usr/bin/gluepython3(如果您使用的是 Python 3)。然后选择完成

在开发终端节点上运行您的脚本

要运行脚本,请执行以下操作:

  • 在左侧窗格中,右键单击文件名,然后选择 Run '<filename>' (运行“<filename>”)

    在一系列消息之后,最终输出应显示计数和架构。

    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 | | |-- lang: string | | |-- note: string | | |-- name: 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 Process finished with exit code 0

现在,您已设置为在开发终端节点上远程调试脚本。