前言
本教程介绍如何将您的本地计算机上运行的 PyCharm Professional Python IDE 连接到开发终端节点,以便您交互运行、调试和测试 AWS Glue ETL(提取、转换和加载)脚本,然后再进行部署。本教程中的说明和屏幕截图基于 PyCharm Professional 版本 2019.3。
本教程使用 Amazon S3 作为数据源。如果要改用 JDBC 数据源,则必须在 Virtual Private Cloud (VPC) 中运行开发终端节点。要使用 SSH 连接到 VPC 中的开发终端节点,则必须创建 SSH 隧道。
将 PyCharm Professional 连接到开发终端节点
- 在 PyCharm 中创建新的纯 Python 项目,将其命名为
legislators
。 - 在项目中创建一个名为
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()
- 请执行以下操作之一:
- 对于 AWS Glue 版本 0.9,将 AWS Glue Python 库文件
PyGlue.zip
从https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl/python/PyGlue.zip
下载到您的本地计算机上的方便位置。 - 对于 AWS Glue 版本 1.0 及更高版本,将 AWS Glue Python 库文件
PyGlue.zip
从https://s3.amazonaws.com/aws-glue-jes-prod-us-east-1-assets/etl-1.0/python/PyGlue.zip
下载到您的本地计算机上的方便位置。
- 对于 AWS Glue 版本 0.9,将 AWS Glue Python 库文件
- 在 PyCharm 中将
PyGlue.zip
添加为您项目的内容根:- 在 PyCharm 中,依次选择 File (文件)、Settings (设置),打开 Settings (设置) 对话框。(也可以按
Ctrl+Alt+S
。) - 展开
legislators
项目,然后选择 Project Structure (项目结构)。然后,在右侧窗格中,选择 + Add Content Root (+ 添加内容根)。 - 导航到您保存
PyGlue.zip
的位置,选择该位置,然后选择 Apply (应用)。
- 在 PyCharm 中,依次选择 File (文件)、Settings (设置),打开 Settings (设置) 对话框。(也可以按

- 选择 Apply (应用) 后,保持 Settings (设置) 对话框处于打开状态。
- 配置部署选项,使用 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 (设置) 屏幕上显示的内容应类似于:

- 同样,选择 Apply (应用) 后,保持 Settings (设置) 对话框处于打开状态。
- 将本地目录映射到远程目录进行部署:
- 在右侧窗格中,选择 Deployment (部署) 页面,选择顶部的中间选项卡,即标签为 Mappings (映射) 的选项卡。
- 在 Deployment Path (部署路径) 列中,输入
/home/glue/scripts/
下的路径,以部署您的项目路径。例如:/home/glue/scripts/legislators
。 - 选择 应用。

- 选择 OK (确定) 以关闭 Settings (设置) 对话框。
将脚本部署到您的开发终端节点
- 选择 Tools (工具)、Deployment (部署),然后选择要在其下设置开发终端节点的名称,如下图所示:

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

- 在菜单栏上,选择 Tools (工具)、Deployment (部署)、Automatic Upload (always) (自动上传(始终))。确保 Automatic Upload (always) (自动上传(始终)) 旁边显示了复选标记。启用此选项后,PyCharm 会自动将更改后的文件上传到开发终端节点。
配置远程解释器
将 PyCharm 配置为在开发终端节点上使用 Python 解释器。
- 从 File (文件) 菜单中,选择 Settings (设置)。
- 展开项目 legislators,然后选择 Project Interpreter (项目解释器)。
- 选择 Project Interpreter (项目解释器) 列表旁边的齿轮图标,然后选择 Add (添加)。
- 在 Add Python Interpreter (添加 Python 解释器) 对话框的左侧窗格中,选择 SSH Interpreter (SSH 解释器)。
- 选择 Existing server configuration (现有服务器配置),然后在 Deployment configuration (部署配置) 列表中,选择您的配置。您的屏幕上显示的内容应类似于以下图像。

- 选择 Move this server to IDE settings (将此服务器移至 IDE 设置),然后选择 Next (下一步)。
- 在 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
现在,您已设置为在开发终端节点上远程调试脚本。
暂无评论内容