大咖专栏 破解谷堆悖论:轻松搞定RDS MySQL到Redshift的数据同步

 

本文介绍一种使用开源的Apache Sqoop工具,帮助我们轻松实现将企业核心数据以及后续的增量数据导入Redshift中。...

大咖专栏


大咖专栏主要刊登亚马逊AWS诸位大咖亲自撰写的Blog,内容涉猎广泛,话题讨论前沿,且与实战紧密相连。我们非常欢迎小伙伴们在评论区留言,与大咖互动交流!

今天为大家撰文的大咖,是我们的AWS解决方案架构师——余骏老师。



余骏

AWS解决方案架构师

余骏负责基于AWS的云计算方案架构的咨询和设计,同时致力于AWS云服务在国内的应用和推广。在加入AWS之前,他在思科中国担任系统工程师,负责方案咨询和架构设计,在企业私有云和基础网络方面有丰富经验。
希腊有一个著名的谷堆悖论:


“如果1粒谷子落地不能形成谷堆,2粒谷子落地不能形成谷堆,3粒谷子落地也不能形成谷堆,依此类推,无论多少粒谷子落地都不能形成谷堆。但是,事实并非如此。”
这个悖论说的,就是告诉我们量变产生质变,需要一个明显的分割线。如果说,量是一个量化的数据,质是一个结论的话,那么,数据分析做的,就是要分析量,从而引向“定性”、”定质”。定量的了解历史的规律(“质”),从而预测未来。

近几年,大数据风靡全球,越来越多的企业利用MapReduce、Hive、Spark等计算框架和工具来为自身的业务提供帮助。在AWS上,我们也提供了诸多的服务,帮助用户能够快速地构建起适合自身需求的大数据分析架构。其中,Amazon Redshift是性能优异并且完全托管的PB级别数据仓库服务,提供了标准SQL数据库访问接口,并且可以十分方便地与现有的主流商业智能数据分析工具整合,构建企业级数据仓库。

然而,大部分企业的核心数据都存储在关系型数据库中,如何能够有效地将这部分存量数据以及后续的增量数据导入Redshift中呢?本文介绍一种使用开源的Apache Sqoop工具,帮助我们轻松实现这一过程。配置步骤如下:
第一步 准备工作
1.1 修改MySQL中的表结构


为了能够实现增量同步,需要在MySQL表中增加一列时间戳,该列能够自动记录行被插入更新的时间。

为了能够实现同步删除操作,需要在MySQL表中增加一列删除记号列,应用对数据库的删除通过标记该列完成,而不是通过传统的delete语句,因为通常对于曾经存在过的数据,也有分析的意义。

本例需要同步的表为country,orders,user,其中country表为Mycat中的全局表,在两台RDS mysql1和mysql2中都有全部信息,orders和user表为Mycat中的分片表,信息分布在RDS mysql1和mysql2中。

mycat_sequence表是用于记录其他表自增字段信息的功能表,无需同步到Redshift中分析。
执行如下语句添加两列

alter table country add ifdelete boolean NOT NULL default 0;
alter table country add lastmodified TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMEST AMP;
1.2 创建EMR集群


注意勾选上Hive和Sqoop,同时目前AWS EMR最新的版本为5.4.0,其中对一些组件的版本进行了更新,不过Hive和Sqoop的版本与本文一致。
注意选择相应的VPC和子网,子网需要有internet的路由方便之后ssh登入。
选择登入的密钥对,Master安全组使用默认的ElasticMapReduce-master,不用修改。
启动EMR集群后,修改Master节点的安全组,添加允许公网ssh访问。
在EMR界面获取master节点ssh登入的信息。
1.3 创建Redshift数据仓库


首先创建Redshift使用的安全组,放行所有源访问5439端口的权限。
分别在cn-north-1a和cn-north-1b两个可用区中创建两个子网给Redshift使 用,由于之后会通过公网连接Redshift,这两个子网需要有到Internet的路由。


在Redshift中创建子网组,选上之前创建的两个子网组。


创建Redshift参数组。
创建Redshift集群实例。


选择之前创建的参数组,VPC,子网组和安全组,开启公网访问。
获取连接Redshift的JDBC驱动及连接的URL信息。
驱动如果无法下载,也可以从如下连接下载:
https://s3.cn-north-1.amazonaws.com.cn/junyublog/RedshiftJDBC41-1.1.17.1017.jar
在接下来的内容里,我们会介绍:

1.4 创建并保存access key和secret access key

1.5 创建S3的bucket桶

第二步 创建Hive表

第三步 安装MySQL JDBC驱动(可选)

第四步 修改java权限,否则执行Sqoop job会有warning和error

第五步 配置Sqoop

第六步 将Hive表中的数据同步到Redshift中

第七步 执行增量同步

……

请感兴趣的小伙伴点击“阅读原文

或扫描/长按识别下方的二维码

阅读完整版文章


    关注 AWS


微信扫一扫关注公众号

0 个评论

要回复文章请先登录注册