当前位置: 首页 > news >正文

AWS中国云中的ETL之从aurora搬数据到s3(Glue版)

问题

需要将数据定时每天从Aurora搬数据到S3中。

步骤

准备数据库只读账号

这里用的Aurora实际上是Mysql,所以,这里创建一个Mysql账号,然后,在Secrets Manager
设置好自动轮转即可。具体如下:

# 登录跳板机后,使用mysql cli登录数据库集群
mysql -h dev.cluster-xxxx.rds.cn-north-1.amazonaws.com.cn -u admin --ssl -p
# 输入密码登录成功后,开始创建mysql只读用户
CREATE USER '{用户名}'@'%' IDENTIFIED BY '{密码}';
# 设置只读权限
GRANT SELECT, SHOW VIEW ON {数据库名}.* TO '{用户名}'@'%';
# 强制刷新权限
FLUSH PRIVILEGES;

在数据库段创建好只读用户后,再到Secrets Manager设置用户自动轮转:
设置Secrets Manager自动轮转密码
设置密钥名称:
设置密钥名称
设置自动轮转密钥,如下图:
设置轮转密钥
创建自动轮转密钥:
创建自动轮转密钥

创建Glue JDBC连接器

开始创建Glue的JDBC连接器,如下图:
开始创建Glue的JDBC连接器
选择Amazon Aurora数据库进行连接,如下图:
选择Aurora
配置连接如下图:
配置连接
设置连接器名称,如下图:
连接器名称
创建JDBC连接器,如下图:
JDBC连接器创建
创建完成后,手动编辑一下JDBC连接,添加如下JDBC参数:

jdbc:mysql://xxx-cn-north-1b.{数据库集群ID}.rds.cn-north-1.amazonaws.com.cn:3306/{数据库名}?sslMode=REQUIRED&characterEncoding=UTF-8&connectionTimeZone=GMT%2B8&forceConnectionTimeZoneToSession=true

这里强制启用SSL方式连接,并使用UTF-8编码,设置时区为东八区,并且强制设置使用这个时区设置。

创建Glue任务运行角色

创建一个角色名为AWSGlueServiceRole角色,注意这个角色名必须以AWSGlueServiceRoleDefault*开头,才能被AWS Glue任务选择到。这个角色配置如下3种权限策略:
角色权限策略

  • AWSGlueServiceRole:为AWS托管策略,这个策略许可定时任务操作包含aws-glue-路径的s3桶或s3目录;
  • AWSQuickSightS3Policy:是自定义对s3桶的设置,可以不用配置作用不是很大,这里忽略了;
  • GetSecretValue:是许可定时任务对secretsmanager密钥只读访问权限。

GetSecretValue策略

{"Version": "2012-10-17","Statement": [{"Sid": "VisualEditor0","Effect": "Allow","Action": ["secretsmanager:GetSecretValue","secretsmanager:DescribeSecret"],"Resource": "arn:aws-cn:secretsmanager:*:{账号ID}:secret:*"}]
}

创建Glue定时任务

找到Glue入口
找到Glue入口管理页面。开始创建Glue任务,如下图:
开始ETL任务创建

设置数据读取源——MySQL

设置数据源,因为我们使用的Aurora是Mysql,所以这里直接设置数据源为MySQL或者关系型数据也可以。如下图:
设置数据源类型
接下来,配置数据库连接,配置需要查询的表和任务执行的角色,如下图:
数据源设置
最后点击start session,看数据预查询效果,如果出现安全组错误,一定要找到之前配置JDBC连接时与数据库RDS共用的安全组,需要配置如下入站规则:

安全组入站规则
类型协议端口范围
All TCPTCP0-65535database-sg-id

注意这里的database-sg-id就是安全组自身的id。
安全组的出站规则保存默认即可,即放行所有流量出站。

设置SQL查询

完成上面数据源配置后,就可以下一步,查询需要的数据了。开始添加下一步,如下图:
开始添加下一步
下一步转化步骤,选择SQL查询,如下图:
SQL查询配置
配置SQL查询,如下图:
查询SQL
这里写好业务需要查询SQL即可,其他东西,根据情况,进行配置即可。这里有一个需要注意的地方,就是S3桶中的数据,需要按年月日进行分区保存,而且保存的数据格式是hadoop格式,这里需要根据某些字段来进行数据分区,一般是年月日。英文里面把这个过程叫——partition。数据分区后,在s3里面类似如下:
s3://my_bucket/logs/year=2018/month=01/day=23/
如果你的数据里面有年月日三个字段的话,可以直接在下一步里面设置分区key即可。如果没有,又需要按当前时间任务运行时间来推断的话,就需要在SELECT子句里面另外加字段即可。类似查询SQL如下:

select *,YEAR(CURDATE() - INTERVAL 1 DAY) AS year,MONTH(CURDATE() - INTERVAL 1 DAY) AS month,DAY(CURDATE() - INTERVAL 1 DAY) AS day
from xxxx;

注意,这里不要直接写SELECT *,实际情况是要写出现表所有字段的,这里推断出昨天的年月日数据,记住这里的3个字段,在下一步S3分区配置中还需要使用。

这里还需要,手动添加年月日字段,如下图
手动加入年月如
开始手动添加字段,如下图:
手动添加字段
添加完成3个字段后,如下图:
手动添加3个字段
最后点击Apply即可。

设置数据写入目标——S3

选中转化步骤,添加下一步目标S3桶步骤,如下图:
开始配置S3桶
开始配置目标S3位置和分区key,如下图:
配置年月日分区key
这里最关键的就是hadoop分区key设置。这里保存的就是hadoop的压缩格式Parquet,而且,按年月日进行数据分区。最后点击保存后。在Schedules标签也配置定时任务触发器即可。注意定时任务触发器是用零时区的。

测试效果

S3文件效果如下:
S3保存的文件

总结

这里的AWS Glue任务,其实就是Spark+Hadoop完成了从MySQL到HDFS的数据写入。Spark在大数据的生态是真的强。这里比较难以理解的就是在Hadoop中的partition设计,具体数据分区远离,我借用了AWS文档里面图了,如下图:
partition分区
这种按年月日,在这个领域,还是比较常见的。到这里就是AWS ETL的简单搬运任务了。

参考

  • A Guide to Store Data from Amazon Aurora RDS on an Incremental Basis using AWS Glue
  • Setting up Amazon VPC for JDBC connections to Amazon RDS data stores from AWS Glue
  • Step 2: Create an IAM role for AWS Glue
  • 东八区
  • 时差换算器
  • AWS Tutorials - Partition Data in S3 using AWS Glue Job
  • Managing partitions for ETL output in AWS Glue
  • Using crawlers to populate the Data Catalog
http://www.dtcms.com/a/406004.html

相关文章:

  • 忘记云服务器密码怎么办?阿里云/腾讯云/AWS密码重置官方指南
  • DevOps实战(9) - 使用Arbess+GitPuk+sourcefare+PostIn搭建Java自动化部署
  • 嘉兴优化网站价格怎么做网站xml地图
  • C语言指针深度解析:从硬件架构到现代安全编程
  • Vue 自定义指令详解
  • uniapp 支付宝小程序 扩展组件 component 节点的class不生效
  • 盈利的网站网站开发还找到工作吗
  • 智能体:小白零基础入门第三期,使用 Coze 搭建一款智能语音听写助手(附喂饭级教程)
  • Vue3 + TypeScript + Ant Design Vue 实现左侧菜单动态配置与路由跳转(支持路由选中项同步 + 自动展开父菜单)
  • uniapp项目使用字体图标
  • 前端拖拽,看似简单,其实处处是坑
  • 【数据结构】队列(Queue)全面详解
  • 网站做短信接口具体方法哪个网站做ppt
  • Android compose屏幕适配终极解决方案
  • 无人机飞行高度模块技术解析
  • 会议安排问题之贪心算法
  • H3C smart-link实验
  • IMX6ULL--EPIT,GPT
  • 前端经验:完美的圆角
  • Vue3组件通信的方法有哪些?
  • 学习嵌入式的第四十一天——ARM——时钟与定时器
  • 淮安网站建设优化北京h5网站建设报价
  • Qt 网络编程
  • ORBSLAM3-优化函数整理
  • 计算机视觉:安防智能体的实现与应用基于YOLOv8的实时无人机检测与跟踪
  • 【apifox】安装要点
  • 网站图片一般的像素企业网站需要多大空间
  • 做网站需要给设计提供专业的商城网站开发
  • 《Spring MVC奇幻漂流记:当Java遇上Web的奇妙冒险》
  • 前端性能优化,给录音播放的列表加个播放按键,点击之后再播放录音。减少页面的渲染录音文件数量过多导致加载缓慢