千家信息网

基于DataLakeAnalytics如何做跨地域的数据分析

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,本篇文章为大家展示了基于DataLakeAnalytics如何做跨地域的数据分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在阿里云上,很多客户的应用都是多
千家信息网最后更新 2025年01月23日基于DataLakeAnalytics如何做跨地域的数据分析

本篇文章为大家展示了基于DataLakeAnalytics如何做跨地域的数据分析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

在阿里云上,很多客户的应用都是多地域部署的, 比如在北京(cn-beijing)的地域部署一个应用让北方的客户访问快一点,同时在杭州(cn-hangzhou)地域部署一份让南方的客户访问快一点。多地域部署之后,业务数据被拆成了多份,而各个地域的数据库都是独立的,网络又不通,给总体业务数据的分析造成了困难。今天我给大家介绍一套基于 DataLakeAnalytics, OSS, DataX 等几个阿里云产品的跨地域数据分析的解决方案。

其实云产品本身(比如我们 DataLakeAnalytics 自己)也有跨地域数据分析的需求,这个方案也同样适用。这个方案本来就是为了分析 DataLakeAnalytics 自己的业务数据而探索出来的。

方案概览

我们知道各个地域的RDS是不通的,除非你开公网访问权限(有很大的安全风险,不推荐), 而且即使你开公网,要对多个数据库里面的数据进行联合分析也不是一件容易的事情;而且这种数据分析的需求我们不希望它占用太多的预算。

我们的方案是把各个地域的数据都同步到同一个地域的OSS上面去,然后用 DataLakeAnalytics 进行联合分析。这个方案的优点在于 OSS 存储收费非常便宜, DataLakeAnalytics 也是按查询量收费的,你平时不查询的时候一分钱都不用花。总体方案如下图:

汇聚各个地域的数据

我们方案的第一步是把各个地域的RDS数据同步到同一个地域的OSS里面去。阿里巴巴集团开源了一个很棒的数据搬运的工具: DataX, 可以把数据在各种不同的数据源之间进行搬运,它支持的数据源类型非常丰富: 从关系型的 MySQL, SQLServer, 到各种文件系统如 HDFS, OSS等等,其中我们需要的是从 MySQL 读数据的 mysqlreader 插件以及往 OSS 写数据的 osswriter 插件。

假定我们有下面这么一个记录人员信息的表 person 需要同步:

create table person (      id int primary key auto_increment,      name varchar(1023),      age int);

我们写一个类似下面这样的DataX任务描述文件 person.json :

{ "job": {   "setting": {     "speed": {       "channel": 1,       "byte": 104857600     },     "errorLimit": {       "record": 10     }   },   "content": [     {       "reader": {         "name": "mysqlreader",         "parameter": {           "username": "your-user-name",           "password": "your-password",           "column": [             "id",             "name",             "age",           ],           "connection": [             {               "table": [                 "person"               ],               "jdbcUrl": [                 "jdbc:mysql://your-rds.mysql.rds.aliyuncs.com:3306/dbname"               ]             }           ]         }       },       "writer": {         "name": "osswriter",         "parameter": {           "endpoint": "http://oss.aliyuncs.com",           "accessId": "your-access-id",           "accessKey": "your-access-secret",           "bucket": "mydb-bucket",           "object": "mydb/person/region=cn-hangzhou/person.csv",           "encoding": "UTF-8",           "fieldDelimiter": "|",           "writeMode": "truncate"         }       }     }   ] }}

这里 MySQL 相关的信息填你的业务库的信息,而 OSS 相关的信息选择一个我们同步到的OSS的地址。注意 OSS 配置部分的 object 字段,mydb 保存你所有的数据, person 这个目录保存你的 person 表的数据,region=cn-hangzhou 这个目录就有意思了,它保存的是你的应用在 cn-hangzhou 这个region里面的数据,同样的,你可能还会有 cn-beijing, cn-shangahi 的数据等等。

然后执行如下命令:

// 执行前确保你已经下载并正确配置好 DataX 了。python datax/bin/datax.py person.json

正确执行的话你会看到下面的输出:

.....省略N行......2018-09-06 19:53:19.900 [job-0] INFO  JobContainer - PerfTrace not enable!2018-09-06 19:53:19.901 [job-0] INFO  StandAloneJobContainerCommunicator - Total 251 records, 54067 bytes | Speed 5.28KB/s, 25 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.001s | All Task WaitReaderTime 0.026s | Percentage 100.00%2018-09-06 19:53:19.902 [job-0] INFO  JobContainer -任务启动时刻                    : 2018-09-06 19:53:09任务结束时刻                    : 2018-09-06 19:53:19任务总计耗时                    : 10s任务平均流量                    : 5.28KB/s记录写入速度                    : 25rec/s读出记录总数                    : 251读写失败总数                    : 0

这样数据就自动同步到 OSS 上去了,你可以下载一个 oss-browser 去查看oss上面的数据:

示例数据

文件里面数据大概是这样的:

9|ethan|1010|julian|2011|train|3012|wally|40

完成了一个地域的数据搬运之后,其它地域都可以照葫芦画瓢,唯一需要注意的地方是,虽然 MySQL 数据是各个 地域 的数据,但是 OSS 要用同一个根目录 person ,因为我们要做数据汇集嘛,把几个地域的数据汇集完成之后,person 目录的结构大概是这样的:

使用 DataLakeAnalytics 分析汇聚后的OSS数据

下面的分析就可以交给 DataLakeAnalytics 了,分析OSS上的数据是 DataLakeAnalytics 的拿手好戏,在开始之前我们要有一个 DataLakeAnalytics 的账号,目前 DataLakeAnalytics 正在公测,直接申请试用就好了。试用审批成功之后,你会获得一个用户名和密码, 然后在控制台登录就可以使用:

DLA控制台

或者如果你是极客,更偏爱命令行,你也可以使用普通的 MySQL 客户端就可以连接 DLA 了:

mysql -hservice.cn-shanghai.datalakeanalytics.aliyuncs.com     -P10000     -u     -p

在这篇文章里面,我会使用 MySQL 命令行给大家演示 DLA 的功能。

首先我们来建一个 DataLakeAnalytics 的数据库:

CREATE DATABASE `mydb` WITH DBPROPERTIES (    catalog = oss,    location = 'oss://your-bucket/mydb/');

这里的 oss://mydb-bucket/mydb/ 就是前面我们数据汇聚的 person 目录的父目录。

建好库之后,我们再建一个表:

CREATE EXTERNAL TABLE IF NOT EXISTS `person` ( `id` bigint, `name` varchar(128), `age` int)PARTITIONED BY (region varchar(63))ROW FORMAT DELIMITED FIELDS TERMINATED BY '|'STORED AS TEXTFILELOCATION 'oss://mydb-bucket/mydb/person';

注意这是一个分区表,分区的key是我们的region,这样的好处一是各个地域在同步数据的时候比较简单,不用担心把别的地域的数据冲掉了;另外利用地域分区也使得我们在分析单个地域的时候扫描数据量会比较小,查询速度更快。

建好表之后,我们运行如下命令让 DataLakeAnalytics 去对OSS上的文件列表进行扫描以找到所有的 region 分区:

mysql> msck repair table person;+-----------------------------------------------------------------------------------------------------------+| Result                                                                                                    |+-----------------------------------------------------------------------------------------------------------+| Partitions not in metastore: person:region=cn-beijing person:region=cn-hangzhou person:region=cn-shanghai || Repair: Added partition to metastore mydb.person:region=cn-beijing                                        || Repair: Added partition to metastore mydb.person:region=cn-hangzhou                                       || Repair: Added partition to metastore mydb.person:region=cn-shanghai                                       |+-----------------------------------------------------------------------------------------------------------+

现在我们就可以开心的对所有地域的数据进行联合查询了 :)

mysql> select * from person limit 5;+------+-------+------+-------------+| id   | name  | age  | region      |+------+-------+------+-------------+|    1 | james |   10 | cn-beijing  ||    2 | bond  |   20 | cn-beijing  ||    3 | lucy  |   30 | cn-beijing  ||    4 | lily  |   40 | cn-beijing  ||    5 | trump |   10 | cn-hangzhou |+------+-------+------+-------------+5 rows in set (0.43 sec)mysql> select region, count(*) cnt from person group by region;+-------------+------+| region      | cnt  |+-------------+------+| cn-beijing  |    4 || cn-hangzhou |    4 || cn-shanghai |    4 |+-------------+------+3 rows in set (0.18 sec)

在这篇文章里面,我们介绍了一种通过 DataLakeAnalytics, OSS, DataX 进行跨地域数据分析的方法。限于篇幅的原因方案的很多细节没有进一步优化,比如我们其实可以对数据进行进一步按天分区,这样每天同步的数据可以更少,效率更高;再比如我们没有介绍如何周期性的进行数据同步,用crontab? 还是什么调度系统?这些就留给读者自己去探索了。

上述内容就是基于DataLakeAnalytics如何做跨地域的数据分析,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

数据 地域 分析 方案 同步 数据分析 任务 目录 业务 命令 客户 文件 面的 查询 信息 就是 时候 篇文章 阿里 应用 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重庆泰域网络技术 数据库用什么代码写比较好 新华三塔式服务器型号 青矩互联网科技 中国互联网科技有限公司彭波 软件开发公司收到的技术服务费 黄石机器人rpa软件开发 服务器 远程管理端口未过滤 秒换ip服务器 需求分析不管数据库设计吗 超宇宙服务器 长春股票软件开发 一念逍遥一天几个服务器 江阴华硕服务器维修中心热线 小程序显示服务器错误无法抢购 信息网络安全月刊 微信提示微信数据库有损坏 wan口dns服务器怎么更改 数据库开发技术的研究与运用 网络安全法知识竞赛 华亭网络安全倡议书 厦门晶途逸网络技术有限公司 第六届网络安全周活动 服务器国产化后软件需要重构么 数据库的系统结构是什么 方舟服务器管理员怎么用 方舟手机版进服务器的教程 互联网科技创新创业基金 闻泰科技软件开发c方向二面 pro所有数据库模型
0