下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

MaxCompute 是一种统一的大数据计算平台

作者:课课家教育     来源: http://www.kokojia.com点击数:2456发布时间: 2017-11-25 15:00:02

标签: Hadoop计算服务大数据

  欢迎各位阅读本篇,美国统计学家赫尔曼·霍尔瑞斯为了统计1890年的人口普查数据发明了一台电动器来读取卡片上的洞数,该设备让美国用一年时间就完成了原本耗时8年的人口普查活动,由此在全球范围内引发了数据处理的新纪元。

MaxCompute 是一种统一的大数据计算平台_Hadoop_计算服务_大数据_课课家教育

  MaxCompute

  大数据计算服务 (MaxCompute) 是一种快速、完全托管的 PB/EB 级数据仓库服务。具备万台服务器扩展能力和跨地域容灾能力,是阿里巴巴内部核心大数据计算平台,支撑每日百万级作业规模。

  MaxCompute 是一种统一的大数据计算平台, MaxCompute 向用户提供了完善的数据导入方案以及多种经典的分布式计算模型,比如 SQL 、图计算、流计算和机器学习等,能够更快速的解决用户海量数据计算问题,有效降低企业成本,并保障数据安全。

MaxCompute 是一种统一的大数据计算平台

  MaxCompute 底层是由阿里自主开发的盘古分布式存储系统和伏羲分布式调度系统组成,在此基础上,我们也开发了 MaxCompute 执行引擎, MaxCompute 是统一的大数据计算平台,既能支持传统经典的批处理,也支持流计算、图计算、内存计算以及机器学习等,从这个角度来看,MaxCompute 与 spark 定位非常相似;在此之上, MaxCompute 支持灵活的语言,为了让用户能够无缝接入 MaxCompute ,我们也支持开源系统好多的 API ,包括 spark API 和 Hive API 等。

  批处理计算

批处理计算

  目前,对于阿里巴巴甚至业界来说, SQL 类型的批处理是最经典最广泛的应用了, SQL 批处理的流程如下:

  用户提交一条类似 SQL 的脚本到 MaxCompute 后, MaxCompute 会对 SQL 脚本进行编译并优化,然后用 Runtime 运行。

  大数据计算服务

  MaxCompute 要做大数据计算的服务,并不像业界开源的 Hadoop 、 spark 提供一套解决方案,我们需要提供一个 365 (天) x24 (小时)的高可靠,高可用的共享大数据计算服务。

  那么,有什么好处呢?它可以:

  – 使用门槛大大降低,用户不用关心运维升级等

  – 共享细粒度使用资源,从而做到低成本,高效率

  大数据计算服务强调稳定性,与持续发展之间存在天然的矛盾。在一个稳定运行的大数据计算服务上改进和发布新功能就像“空中换车”,在高速飞行的飞机上替换引擎而同时要保持平稳飞行,其中的挑战难度可想而知。

  持续改进和发布中的挑战

  MaxCompute 每天都有百万级作业。如何能够平稳安全,用户无感知的发布新的功能?如何保证新版本的稳定性,没有 bug ,没有性能的回退?出现问题后如何能够快速止损等等?

  面对外部用户,在测试时如何保证数据安全可靠呢?

  针对以上挑战,我们提出在高可用服务下持续改进和发布了以下技术手段来克服:

  – MaxCompute Playback 工具

  – MaxCompute Flighting 工具

  – MaxCompute 灰度上线,细粒度回滚

  编译器Playback工具

  MaxCompute 目前主流的仍然是 SQL 类型应用,其中非常关键的模块就是编译优化器,我们需要快速提高我们编译器、优化器的表达能力,以及性能优化水平。

  那么,如何能够保证升级过程中没有大的 Regression ?

  每天有 100 万 + 个 job ,每天都在变化,如果人工分析的话,每个 script 仅需要 2 分钟,需要91 人年,这是不现实的,所以,我们开发了编译器 Playback 工具。

  Playback 工具用来解决编译器和优化器的测试验证功能,利用大数据计算平台的运算能力来自我验证新的编译优化器。

  具体原理如下:

具体原理如下:

  基于 MaxCompute 强大而灵活的编译扩展能力,编译器基于 AST 的编译器模型,使用了经典的 Visitor 模式。 SQL 脚本提交到系统后会将 SQL 脚本转化成抽象语法树,正常情况下的语法验证和分析等实现了标准的 visitor , visitor 对应于 AST 的验证等扩展性是非常好的,除了标准的 visitor 加入后,还可以加入一些有针对性的检查验证抽象语法树的新 visitor ,将这些 visitor 加到语法树上,就可以验证新的编译器和优化器生成出来的各种各样的产出是否 OK ,以此来验证新的编译器和优化器的能力。

  自我验证

自我验证

  整个验证过程如下:

  1. 当用户提交一条 SQL 脚本发给 MaxCompute ,利用 MaxCompute 本身灵活数据处理语言来构造分析任务;

  2. 利用 MaxCompute 本身超大规模计算能力来并行分析海量用户任务,将一段时间用户作业抽出;

  3. 利用 MaxCompute 灵活的 UDF 支持且良好的隔离方案,在 UDF 中拉起待测的编译器进行编译,之后再进行详细的结果分析。

  整个过程都在 MaxCompute 完善的安全体系保护下,保障用户的知识产权。

  Playback 工具还有其它很丰富的作用,比如:

  进行新版本的验证

  精确制导找到触发新的优化规则的 query ,验证其查询优化是否符合预期

  在语义层面对于 query 进行整体数据分析

  – 对相应的用户发 warning 推动用户下线过时的语法

  – 对 query 整体进行分析来确定下一步开发的重点

  – 评估新版本在查询优化在执行计划上的提高程度

  Flighting 工具

  除了编译器和优化器外,另外有一个关键模块就是执行器。那么,如何保证 MaxCompute 运行器是正确执行的?避免在快速迭代中的正确性问题,从而避免重大的事故?同时,如何保证数据的安全性呢?

  传统方式验证运行器,最经典的是用测试集群来验证,该方式验证的缺点如下:

  – 调度或者 scalability 等方面的改进往往需要建立一个相同规模的测试集群

  没有相应的任务负载,无法构造对应场景

  数据安全问题,使得我们需要脱敏的方式从生产集群拖数据

  – 容易人为疏忽,造成数据泄露风险

  – 脱敏数据可能造成用户程序 crash ,并且往往不能反映用户运行场景

  – 整个测试过程冗长,不能达到测试的目的

– 整个测试过程冗长,不能达到测试的目的

  所以我们引入了 flighting 工具来做测试和验证,将 99% 机器资源使用线上版本运行生产作业,1% 机器资源用来为程序员上载的测试版本进行验证。

  资源隔离

  那么,怎么保证测试验证的作业不去影响线上生产的作业呢?这就需要我们完善资源隔离,具体包括:

  CPU/Memory: 增强 cgroup ,任务优先级

  Disk :统一的存储管理,存储的优先级

  Network : Scalable Traffic Control

  Quota 管理

  所以我们能够在保障线上核心业务需求情况下进行 flighting 的测试。

  数据安全

  从数据安全角度来说,我们的测试不需要人工干预进行数据脱敏; Flighting 的任务的结果不落盘,而是直接对接分析任务产生测试报告:

  – 结果正确性: MD5 计算,浮点等不确定性类型的处理

  – 执行性能的分析: straggler , data-skew , schedule quality

  灰度上线

灰度上线

  SQL 的关键模块如编译优化和执行都可以得到有效测试和验证,接下来就可以上线了,上线时也会有很大风险,因此,我们实行灰度上线。按照任务的重要性进行分级,支持细粒度发布,并且支持瞬时回滚,控制风险到最小。

按照任务的重要性进行分级,支持细粒度发布,并且支持瞬时回滚,控制风险到最小。

  开发新功能后做回归,回归后发布,开始时往往有新功能后,就进行验证,如果新功能是针对编译器、优化器,就用 playback 验证,针对 Runtime 就用 flighting 验证,所有测试验证结束后,就到灰度发布阶段,直到所有任务百分百发布上线后,我们就认为这一次开发迭代是成功的,以此类推,不停的向前演进,既能保证服务可靠稳定运行的同时,将我们的性能提升,以满足用户的各种需求。

   知识分享:大数据

  Hadoop

  Hadoop旨在通过一个高度可扩展的分布式批量处理系统,对大型数据集进行扫描,以产生其结果。Hadoop项目包括三部分,分别是Hadoop Distributed File System(HDFS)、HadoopMapReduce编程模型,以及Hadoop Common。

  Hadoop平台对于操作非常大型的数据集而言可以说是一个强大的工具。为了抽象Hadoop编程模型的一些复杂性,已经出现了多个在Hadoop之上运行的应用开发语言。Pig、Hive和Jaql是其中的代表。而除了java外,您还能够以其他语言编写map和reduce函数,并使用称为Hadoop Streaming(简写为Streaming)的API调用它们。

  流定义

  从技术角度而言,流是通过边缘连接的节点图。图中的每个节点都是“运算符”或“适配器”,均能够在某种程度上处理流内的数据。节点可以不包含输入和输出,也可以包含多个输入和输出。一个节点的输出与另外一个或多个节点的输入相互连接。图形的边缘将这些节点紧密联系在一起,表示在运算符之间移动的数据流。

  右图一个简单的流图,它可以从文件中读取数据,将数据发送到名为Functor的运算符(此运算符能够以某种编程方式转换所传入的数据),然后将这些数据传入另一个运算符。在此图片中,流数据被传送至Split运算符,而后又将数据传入文件接收器或数据库(具体情况视Split运算符的内部状况而定)。

  利用Apache Hadoop等开源项目,通过传感器、RFID、社交媒体、呼叫中心记录和其他来源提供的新型数据创造价值。

  Streams

  大数据应用领域即,IBM InfoSphere Streams。在IBMInfoSphere Streams(简称Streams)中,数据将会流过有能力操控数据流(每秒钟可能包含数百万个事件)的运算符,然后对这些数据执行动态分析。这项分析可触发大量事件,使企业利用即时的智能实时采取行动,最终改善业务成果。

赞(10)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程