亚马逊AWS官方博客
Glue – “连接“功能介绍& Glue 通过连接对 Redshift 写入数据
在上一篇文章中,我们简单讲述了Glue的组件功能和使用Glue快速构建ETL的 过程。本篇文章里我们简单讲述一下Glue里连接的作用,以及展示两个Demo,强烈建议您看完第一篇文章后,再来看这篇文章。https://thinkwithwp.com/cn/blogs/china/glue-function-introduction-build-serverless-etl-quickly/
Glue连接的作用:AWS Glue 中的爬网程序和作业使用连接来访问某些类型的数据存储。
何时使用连接?
如果数据存储需要一个连接,则在网络爬取数据存储以在 AWS Glue 数据目录 中对其元数据进行编目时,将使用该连接。任何使用数据存储作为源或目标的作业也将使用该连接。
AWS Glue 可以使用 JDBC 协议连接到以下数据存储:
Amazon Redshift
Amazon Relational Database Service
- Amazon Aurora
- MariaDB
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
可公开访问的数据库
- Amazon Aurora
- MariaDB
- Microsoft SQL Server
- MySQL
- Oracle
- PostgreSQL
Demo1 – Glue如何与Redshift连接,将ETL后的数据直接写入到Redshift里,并自己定义Distribute Key和SortKey
准备条件一 : 创建Glue连接Redshift的VPC安全组 – Glue在连接VPC内的服务时,是通过创建一个新的ENI,并使用私网地址连接,所以需要有能够访问VPC服务的Security Group
1 进入VPC或EC2控制页面,选择安全组,点击创建安全组
2 输入安全组名称,描述,选择默认VPC,这里先不添加规则,直接创建
3 安全组创建好之后,选中该安全组,复制安全组 的ID,点击编辑
4 端口范围选择所有TCP端口,来源把安全组ID粘贴上,这样写的意思是只要有相同Security Group的AWS资源就可以访问5439端,点击保存
注意:如果不选择所有端口,在测试连接的时候会报如下错误
准备条件二: 创建VPC的S3 Endpoint – Glue在创建连接的时候,需要有访问S3的IAM权限和网络条件,详情参看
https://docs.thinkwithwp.com/zh_cn/glue/latest/dg/populate-add-connection.html
1 进入到VPC控制页面,选择终端节点,点击创建终端节点
2 选择s3 endpoint服务,选择默认VPC,这里子网选择私有子网,私有子网定义请看https://docs.thinkwithwp.com/zh_cn/vpc/latest/userguide/working-with-vpcs.html,终端节点功能请看https://docs.thinkwithwp.com/zh_cn/vpc/latest/userguide/vpc-endpoints.html
3 请注意警告部分,出于安全目的,通常建议使用私有子网+S3 Endpoint来打通VPC和S3或其他托管服务,如果您正在使用公有子网连接S3或其他托管服务,请注意对自己程序的影响
4 点击创建终端节点
准备条件三: 准备一份sample数据
2 在sample数据生成中,添加一行日期
3 点击Download Data,并上传到s3,这里我们上传到创建好的s3://myglue-sample-data/rawdata/gluetoredshift/ 下
准备条件四: 创建测试用的Redshift
1 进入Redshift控制页面,点击启动集群
2 输入集群标识,数据库名称,用户名密码,端口默认5439,点击继续
3 由于是测试所以我们选择最小机型和单节点,在生产环境中则需要选择多节点,点击继续
4 依次选择,默认VPC,子网(选择设置好的私有子网),选择之前创建好的安全组,IAM角色暂时不选,在生产环境中需要设置相应的IAM策略,具体参考https://docs.thinkwithwp.com/zh_cn/redshift/latest/mgmt/redshift-iam-authentication-access-control.html
点击继续
5 检查一下参数没问题后,点击启动集群
6 集群创建好之后,确认集群是可用状态,数据库也运行正常
准备条件五: 创建一个用于测试连接的Role – 该Role必须有访问源数据s3的权限和GlueServiceRole的权限
1 进入IAM控制页面,点击创建角色
2 选择Glue作为使用此角色的服务,点击下一步权限
3 这里需要创建一个新的策略,点击创建策略
4 进入策略编辑页面,把以下S3的权限粘贴进去,这里的S3路径是源数据所在的路径,点击查看策略
5 输入策略的名字AWSGlueServiceRole-gluetoredshift,点击创建策略
注意:这里策略的名字一定要加AWSGlueServiceRole- 的前缀,否则在添加策略的时候无法识别
6 回到第3步的页面,选择两个Role ,AWSGlueServiceRole和刚才创建的AWSGlueServiceRole-gluetoredshift,点击下一步标签
7 输入标签,点击下一步
8 输入角色名称AWSGlueServiceRole-gluetoredshift,点击创建角色
以上条件都准备好之后,开始进入Glue连接的设置
1.进入Glue控制页面,点击添加连接
2.输入连接名字,连接类型选择Amazon Redshift,点击下一步
3.选择刚刚创建好的Redshift集群,输入创建好的Database名字,用户名,密码
4.可以看到系统会默认选择Redshift所在子网和安全组,点击完成
5.选中刚才创建的连接,点击测试连接/p>
6.选择之前创建好的Role,点击测试连接
7.连接成功
8.重复第一章的操作先爬取源数据的数据结构,并写入到mymetastore里,具体步骤省略,确认爬取后的数据表
9.创建写入到Redshift的ETL任务,进入到Glue控制页面,选择添加作业
10.输入作业名字,选择刚才创建的角色,其他默认,点击下一步
11.选择刚才爬取的数据源
12.选择更改架构,点击下一步
13.选择在数据目标中创建表,选择JDBC,选择之前创建的GlueToRedshift连接,数据数据库的名字,点击下一步
14.对字段进行重命名和对date字段类型转换,点击保持作业并编辑脚本
15.进入作业编辑界面,在写入Redshift的时候,指定distkey和sortkey,详细参数见 https://github.com/databricks/spark-redshift
修改如下代码
保存,并运行
16.确认任务执行成功后,到Redshift里查询表
17.点开Query Editor执行以下语句
查询新表字段情况
可以看到,已经按照指定参数,并写入了Redshift
在下一篇文章中,我们继续展示爬虫使用连接的Demo2。