Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

阅读数:2 2020 年 3 月 19 日 21:40

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

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 控制页面,选择安全组,点击创建安全组

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

2 输入安全组名称,描述,选择默认 VPC,这里先不添加规则,直接创建

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

3 安全组创建好之后,选中该安全组,复制安全组 的 ID,点击编辑

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

4 端口范围选择所有 TCP 端口,来源把安全组 ID 粘贴上,这样写的意思是只要有相同 Security Group 的 AWS 资源就可以访问 5439 端,点击保存

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

注意:如果不选择所有端口,在测试连接的时候会报如下错误

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

准备条件二: 创建 VPC 的 S3 Endpoint – Glue 在创建连接的时候,需要有访问 S3 的 IAM 权限和网络条件,详情参看

https://docs.aws.amazon.com/zh_cn/glue/latest/dg/populate-add-connection.html

1 进入到 VPC 控制页面,选择终端节点,点击创建终端节点

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

2 选择 s3 endpoint 服务,选择默认 VPC,这里子网选择私有子网,私有子网定义请看 https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/working-with-vpcs.html,终端节点功能请看 https://docs.aws.amazon.com/zh_cn/vpc/latest/userguide/vpc-endpoints.html

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

3 请注意警告部分,出于安全目的,通常建议使用私有子网 +S3 Endpoint 来打通 VPC 和 S3 或其他托管服务,如果您正在使用公有子网连接 S3 或其他托管服务,请注意对自己程序的影响

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

4 点击创建终端节点

准备条件三: 准备一份 sample 数据

1 打开 https://mockaroo.com/

2 在 sample 数据生成中,添加一行日期

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

3 点击 Download Data,并上传到 s3, 这里我们上传到创建好的 s3://myglue-sample-data/rawdata/gluetoredshift/ 下

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

准备条件四: 创建测试用的 Redshift

1 进入 Redshift 控制页面,点击启动集群

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

2 输入集群标识,数据库名称,用户名密码,端口默认 5439,点击继续

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

3 由于是测试所以我们选择最小机型和单节点,在生产环境中则需要选择多节点,点击继续

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

4 依次选择,默认 VPC,子网 (选择设置好的私有子网),选择之前创建好的安全组,IAM 角色暂时不选,在生产环境中需要设置相应的 IAM 策略,具体参考 https://docs.aws.amazon.com/zh_cn/redshift/latest/mgmt/redshift-iam-authentication-access-control.html

点击继续

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

5 检查一下参数没问题后,点击启动集群

6 集群创建好之后,确认集群是可用状态,数据库也运行正常

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

准备条件五: 创建一个用于测试连接的 Role – 该 Role 必须有访问源数据 s3 的权限和 GlueServiceRole 的权限

1 进入 IAM 控制页面,点击创建角色

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

2 选择 Glue 作为使用此角色的服务,点击下一步权限

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

3 这里需要创建一个新的策略,点击创建策略

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

4 进入策略编辑页面,把以下 S3 的权限粘贴进去,这里的 S3 路径是源数据所在的路径,点击查看策略

SQL

复制代码
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Resource": [
"arn:aws:s3:::myglue-sample-data/rawdata/gluetoredshift/gluetoredshift*"
]
}
]
}

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

5 输入策略的名字 AWSGlueServiceRole-gluetoredshift,点击创建策略

注意:这里策略的名字一定要加 AWSGlueServiceRole- 的前缀,否则在添加策略的时候无法识别

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

6 回到第 3 步的页面,选择两个 Role ,AWSGlueServiceRole 和刚才创建的 AWSGlueServiceRole-gluetoredshift,点击下一步标签

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

7 输入标签,点击下一步

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

8 输入角色名称 AWSGlueServiceRole-gluetoredshift,点击创建角色

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

以上条件都准备好之后,开始进入 Glue 连接的设置

1. 进入 Glue 控制页面,点击添加连接

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

2. 输入连接名字,连接类型选择 Amazon Redshift,点击下一步

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

3. 选择刚刚创建好的 Redshift 集群,输入创建好的 Database 名字,用户名,密码

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

4. 可以看到系统会默认选择 Redshift 所在子网和安全组, 点击完成

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

5. 选中刚才创建的连接,点击测试连接 /p>

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

6. 选择之前创建好的 Role,点击测试连接

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

7. 连接成功

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

8. 重复第一章的操作先爬取源数据的数据结构,并写入到 mymetastore 里, 具体步骤省略,确认爬取后的数据表

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

9. 创建写入到 Redshift 的 ETL 任务,进入到 Glue 控制页面,选择添加作业

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

10. 输入作业名字, 选择刚才创建的角色,其他默认,点击下一步

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

11. 选择刚才爬取的数据源

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

12. 选择更改架构,点击下一步

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

13. 选择在数据目标中创建表,选择 JDBC,选择之前创建的 GlueToRedshift 连接,数据数据库的名字,点击下一步

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

14. 对字段进行重命名和对 date 字段类型转换,点击保持作业并编辑脚本

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

15. 进入作业编辑界面, 在写入 Redshift 的时候,指定 distkey 和 sortkey,详细参数。

修改如下代码

SQL

复制代码
datasink4 = glueContext.write_dynamic_frame.from_jdbc_conf(frame = dropnullfields3, catalog_connection = "GlueToRedshift", connection_options = {"dbtable": "redshift_table", "database": "fromglue","diststyle":"KEY","distkey":"redshift_id","sortkeyspec":"SORTKEY(redshift_date)"}, redshift_tmp_dir = args["TempDir"], transformation_ctx = "datasink4")

保存,并运行

16. 确认任务执行成功后,到 Redshift 里查询表

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

17. 点开 Query Editor 执行以下语句

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

查询新表字段情况

SQL

复制代码
SELECT
"column","type","distkey","sortkey"
FROM
PG_TABLE_DEF
WHERE
tablename = 'redshift_table';

Glue – “连接“功能介绍,Glue 通过连接对 Redshift 写入数据

可以看到,已经按照指定参数,并写入了 Redshift

在下一篇文章中,我们继续展示爬虫使用连接的 Demo2。

** 作者介绍:韩宇光,AWS 解决方案架构师,熟悉互联网的大数据业务场景,有丰富的基于 AWS 上大数据解决方案的经验,对开源 hadoop 组件有一定研究。在加入 AWS 之前,在猎豹移动任职大数据高级运维工程师,有 10 多年的运维经验,深入理解云架构设计,对云上的运维,Devops,大数据解决方案有丰富的实践经验。

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/glue-introduction-to-connection-feature-glue-writes-data-to-redshift-via-connection/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布