《双管齐下MaxCompute数据上云与生态》由会员分享,可在线阅读,更多相关《双管齐下MaxCompute数据上云与生态(8页珍藏版)》请在金锄头文库上搜索。
1、双管齐下,MaxCompute 数据上云与生态本文章来自于阿里云云栖社区摘要: 在票选最美云上大数据暨大数据技术峰会上,来自飞天一部的朋春从 MaxCompute 提供的离线、实时数据通道入手,延伸到 DTS、Logstash 、DataX 等官方/开源软件,向大家介绍如何从数据库、本地文件等多种存储向 MaxCompute 导入数据,分享最后还介绍了如何在 Python 和 R 语言中使用 MaxCompute。玩大数据的第一件事情是将数据上传到 MaxCompute,那么数据是通过哪些途径进入 MaxCompute 中的呢?如上图所示,MaxCompute/StreamCompute 是提
2、供给用户用来计算大数据的平台,一般来说,它们本身不直接产生实际的业务数据,业务数据是来自于数据库RDS、APP Logs 以及 IOT 等终端设备,两者之间需要桥梁进行连接。从上图中间可以看到:数据可以通过 Tunnel 组件进入 MaxCompute,Tunnel 是一个非常注意吞吐量同时又尽可能追求数据严格一致的输入输出接口;在这条通道上再往前延伸,还有开源软件 Sqoop、Kettle 以及阿里巴巴自研的开源软件DataX。事实上,在公司内部所有数据的传输、导入到 MaxCompute 或者说最后计算完的结果再回流到数据库中,这种对前台数据库冲击不大的情况都在使用 DataX。为了实时传
3、输数据,满足流计算的诉求,阿里云提供了 DatHub 组件,它是一个偏重于实时的增量数据通道,在此基础上,对于 ECS 上的文本日志支持了业界著名的 Logstash、Flume、Fluentd 三个开源软件。如何将数据库中的数据拖进 MaxCompute 中呢?首先能想到的方法是在数据库中执行 select 语句,将结果集通过 Tunnel 写入 MaxCompute,这是一个容易上手又方便容错的方式。但这种方式对于数据量较大并且需要长期运行的情况不一定非常合适。一方面在阿里的实践过程中发现执行 Select 语句会对数据库产生查询压力,当数据量非常庞大时,可能会导致前台业务因为数据库增大而
4、产生响应能力上的降低;其次执行 SQL 语句会碰到各种各样的情况,例如想用时间过滤前一天的增量,但是在时间字段上因为历史原因没有索引,这在专有云案例中经常发生。对于这种情况,我们尝试解析 MySQL 的 binlog,将其 binlog以一种流式的方式源源不断地、实时地传递到 DatHub 上,然后该数据再通过DatHub 再写入 MaxCompute,在 MaxCompute 上再进行数据的合并等操作,还原出前一天的增量数据。目前,在公共云,DatHub 和官方的数据传输产品 DTS 已经打通,能够无缝完成 RDS 上的数据库实时变更增量并写入 DatHub 中,进一步 Push 到MaxC
5、ompute 中;另一方面,所有进入 DatHub 的实时数据都可以被流计算无缝使用,做一些时效性更好的计算作业。数据上云核心问题 数据上云的核心问题包括四点:(1)数据要能上传,它主要面临两个痛点包:一是前台存储多样化,包括RDBMS、NoSQL 、Logs 等,每多一种类型,需要对应地识别其协议,解析Schema,甚至是无 Schema 的类型还需要按照业务逻辑转变成二维表的格式;二是传输需求多变,例如在传输的过程中需要将字符串转变成 ID,将图片变成URL 地址等,很难将其抽象成一个标准的模型。阿里云为应对该问题,提供了 Tunnel 和 DataHub 的官方 API 和 SDK 作为
6、兜底,保障了在阿里云生态工具跟不上的情况下,开发者依旧有方法将数据上传到云端。(2)数据的高效传输,数据传输中最典型的问题就是带宽,尤其是长途传输,长途带宽上的稍微波动都对传输效率起到很大的影响;第二个问题是数据库Dump 开销大,影响到核心业务的运转。传输问题对应的解决方案一是尽量规避长途传输、长途带宽对效率的影响,在 Tunnel 通道中,支持压缩协议,可以在客户端进行压缩,然后再大包提交,进而提升吞吐量;第二点采用 DTS 这类基于增量日志的实时上传方式,拉长传输时间,并且支持断点续传,降低某特定时刻对带宽的需求。(3)数据的正确性,首先 MaxCompute 是一个强 Schema 的
7、数据库,从 Oralce到 MaxCompute 传导数据时,在字段类型的映射上或浮点数的操作上一定会存在精度误差,那么精度误差如何处理?第二点是正确性无法避开的 Timeout 重传导致的数据重复。Tunnel 提供两阶段提交的功能,先 Write 后 Commit,提供了数据严格一致的可能性;相反地,DataHub 流式传输无法实现两阶段提交,这是由于要考虑效率和吞吐量导致。(4)安全是使用云计算必须面临的问题,数据存储是否可靠以及会不会第三方被嗅探。MaxCompute 采用 pangu 的三副本存储,本身提供了非常高的可靠性。另一方面,MaxCompute 默认不同用户之间的数据完全隔
8、离, 并且在传输过程中全部采用 HTTPS 协议,使得数据被第三方嗅探到的可能降到最低。下面来具体看一下 Tunnel 和 DataHub。批量、历史数据通道 TunnelTunnel 是针对历史数据的批量数据通道,它的典型特征是支持大包传输,Write&Commit 两阶段提交,最大可能性保证数据一致。用户可以使用ODPSCMD 命令对数据进行上传、下载等操作。Datax 是阿里开源的一款工具,可以适配常见的数据源,包括关系数据库、文本文件等,这是一款单机的软件,适用于中小数据量的传输。使用 Datax 传输数据到 ODPS 时,在 ECS 机器或一台物理机器上部署好 DataX,此机器要能
9、够同时连通数据源与 MaxCompute(原 ODPS)服务。Sqoop 可以并行起多个任务导出数据,相比 Datax 可以取得更好的性能。实时、增量数据通道 DataHubDataHub 是实时、增量数据通道,目的是为支持流计算和实时数据。在编程友好性上,DataHub 要优于 Tunnel,解决了 Tunnel 的小包效率问题,并且能够容忍少量的数据重复。DataHub 摒弃了两阶段提交的方式,使用时不停地写入数据即可,技术特征是面向高吞吐,因此在 DataHub 上并没有提供严格一致的语义支持;在阿里集团内部,DataHub 每天有数百 TB 数据压缩后写入, PB 级别的数据消费。消费
10、的数据之所以是写入数据的数倍是因为一份数据会被多方使用,例如一份数据进入 MaxCompute 进行离线加工,另一份甚至多份用于实时处理,给用户提供更实时的数据。在 DataHub 通道上,要尽可能保障数据低延迟,目前,理论上数据库中的用户订单可以做到毫秒级流入流计算或 MaxCompute 中;在阿里的实际生产经验中,为了平衡延时和吞吐,在绝大数情况下,前台订单流入后端计算平台的总时间在 1s-2s 左右,但这种时效性已经能够满足绝大多数业务需求。DataHub 和流计算产品紧密结合,可以在流计算中非常方便的重复使用多份数据;DataHub 是基于 Topic/Shard(s)模型,每个主题
11、 (Topic)的数据流吞吐能力可以动态扩展和减少,最高可达到每主题 256000 Records/s 的吞吐量。源头数据库到 DataHub 数据库之间可以通过 DTS、Oracle GoldenGate 连接;App Logs 到 DataHub 之间可以通过 Logstash、Fluentd 等开源软件连接。MaxCompute 生态思路上述提到的数据上传是整个 MacCompute 生态的一部分,MaxCompute 整体思路如上图所示:最底层是 MaxCompute Restful API(Tunnel&DataHub);在中间层(黄色部分)提供了 Java、RODPS 、PyODP
12、S、Ruby/PHP (社区贡献)等语言的 SDK,这两层是兜底方案,当上层提供的组件无法满足需求时,开发者依旧有方式将数据传到计算平台上;最上层是生态的思路,包括官方大数据DataIDE、IntelliJ IDEA Plugin (MaxCompute Studio)、Jupyter Notebook、导入导出模块等。RODPSRODPS 提供了一种桥接的方式,使得可以在 R 语言环境中无缝的使用MaxCompute(原 ODPS)里面的数据、计算资源,类似于开源社区的 RHive 和Rhadoop 的功能;R 语言开发者可以在 R 语言中直接执行 MaxCompute SQL,并将结果集转
13、换为 Rdata.frame,便于进一步研究。RODPS 很适合在MaxCompute 中预先完成计算,缩小结果集再进行单机分析的场景。未来 RODPS 将致力于将本地算法和数据处理运作在分布式系统上面,致力于让用户无缝迁移 R 社区的开源包,提供类似于 sparkR 那样的强大的能力。PyODPS PyODPS 是 ODPS 的 Python 版本的 SDK, 它提供了对 MaxCompute 对象的基本操作,在 Python 中运行 MaxCompute SQL 语句的需求促进了 PyODPS 的出现;与 RODPS 类似,在 Python 中也可以做 MaxCompute DataFrame,甚至MaxCompute 结果的 DataFrame 还可以和 Pandas DataFrame 进行 Join 操作;除此之外,通过 PyODPS 还为开发者提供了基于第三方软件(如 Jupyter Notebook)连接到 MaxCompute 中进行交互式数据分析的能力。