大美柚与MaxCompute数据同步架构说明
2017/8/10 九戒
本文涉及到的重要概念:
- MaxCompute:简单可以理解为开源的hadoop集群,可提供我们常用的MapReduce和SQL计算模型和数据存储.
- 数加:基于MaxCompute之上封装的便于我们使用和管理MaxCompute的一个壳
- ECS:阿里的云服务器
- tunnelServer:用于和MaxCompute上传下载的数据通道
- Datax:是一个异构数据源离线同步工具,Datax的odps插件底层基于tunnel SDK实现.
- 默认资源:数加提供的用于运行Datax的服务器资源(常用于和MaxCompute之间的数据同步),目前只有在华东2区(上海)有机器
- 自定义资源:我们提供的用于运行Datax的服务器资源,目前我们只有华北2区(北京)2台ECS
- 专线:目前北京机房和北京ECS(华北2区)通专线,简单理解就是北京机房和北京ECS同属一个局域网,让两个机房间的通讯更稳定,快速.
- 端口转发:简单的理解,一个网络端口,转发到另一个网络端口上(我们常用的是:从外网的某个端口转发到内网的某台机器的某个端口,这里是指从ECS的外网端口,转发到北京机房的某台机器的某个端口).
- MaxCompute上传收费:上传不收费
-
MaxCompute下载收费:通过公网下载收费,是指MaxCompute到datax这个过程,我们在使用自定义资源的时候需在odps那端(reader)要使用
"tunnelServer": "http://dt-ext.nu16.odps.aliyun-inc.com",
这个配置才能走MaxCompute专线,且不收费,默认是走公网需要收费,这点大家要特别注意一下
敲黑板
在使用自定义资源与MaxCompute做数据同步任务,务必在odps端加上"tunnelServer": "http://dt-ext.nu16.odps.aliyun-inc.com",
配置.免费且能提升同步速度
网络拓扑图
既然数加提供了默认资源为什么我们还要使用自定义资源?
目前默认资源只在华东2区有,而我们大部分的数据和机器在北京,只能通过公网进行数据同步,网络延迟比较大(33ms),且不稳定,经常出现time out情况.且默认资源会限速,而我们需要上传的日志量比较大,数据延迟会比较大,不能很好的满足业务需求.
为什么自定义资源放在华北2区?
因为我们北京机房和华北2区有专线连接,方便与北京机房的机器做数据同步
使用自定义资源给我们带来了什么好处?
- 华北2区的自定义资源可以通过MaxCompute专线(需要在任务里配置tunnelServer)连接MaxCompute服务,比通过公网连接更稳定,更快.
- 另一端,自定义资源和北京机房或北京ECS是通过专线或内网连接,网络也比公网更有保障.
总结一下怎么选择资源组
- 如果MaxCompute和华东区的ECS的数据同步,请选用默认资源
-
如果MaxCompute和(华北ECS或者北京机房)的数据同步有两种方式:
- 通过自定义资源(如果操作见下文)
- 通过华北ECS做端口转发:只需将北京机房对应机器的端口(一般是22端口),转发到ECS出口的某个端口(例如21222),然后使用默认资源,使用ECS的外网ip和端口就可以了.
什么时候用自定义资源?什么时候用端口转发?
- 对网络延迟比较敏感的用自定义资源(例如数据要写到北京ECS或机房上mysql,如果使用默认资源,容易报错,连接超时)
- 对网络延迟不那么敏感,且数据量不是很大的,可通过端口转发的方式进行数据同步,通过端口转发方式能满足需求的尽量使用这种方式,以免自定义资源负载过高.
怎么使用自定义资源?
- 项目配置自定义资源组:一个项目只需要配置一次,而且只有项目owner才有权限(这个不需要大家操作)
- 配置数据源:由项目管理员配置(一般来说一台服务器只需要配置一次),需要配置数据源服务器的内网地址,因此datax通过内网地址读写,更快速,稳定; 此时不需要测试连接,因为测试连接是通过默认资源发起的测试,所以网络不通.
- 编写数据同步任务:参看文档,只是数据源需要用第2步配置的数据源
- 修改任务的资源组:见下图步骤
- 运行: 这里只对新生成的实例生效,例如测试运行或补数据;而之前生成的实例,还是会用默认资源,会导致失败.
最后的废话
其实使用默认资源也是以上的这些步骤,只是有些步骤是默认值,不需要更改,例如:
- 项目配置资源组(数加项目生成的时候,就已经有了默认资源组,不需要我们额外配置)
- 配置数据源(默认有odps_first,指该odps项目),我们自己的数据源同样需要配置
- 编写数据同步任务(一样)
- 修改任务的资源组(默认值是默认资源组,无需修改)
- 运行数据同步任务(一样)
在实际使用过程中,出现失败的话,多思考一下:
数据同步基于datax , 是通过datax到reader数据源抽取数据,在通过writer数据源写数据,
多思考一下网络方面的原因:例如防火墙,mysql的白名单,账号是否有权限等等.