【ATF】林伟:大数据计算平台的研究与实践

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 第七届阿里巴巴技术论坛上,阿里云资深专家林伟(花名:伟林)带来了以《大数据计算平台的研究与实践》为主题的深度分享。

 

2016 ATF阿里技术论坛于4月15日在清华大学举办,主旨是阐述阿里对世界创新做出的贡献。阿里巴巴集团技术委员会主席王坚,阿里巴巴集团首席技术官(CTO)张建锋(花名:行癫),阿里巴巴集团首席风险官(CRO)刘振飞(花名:振飞),蚂蚁金服首席技术官(CTO)程立(花名:鲁肃)以及来自阿里巴巴集团各部门多位技术大咖齐聚一堂,与莘莘学子分享阿里的技术梦想。

 

在下午的云计算与大数据论坛上,阿里云资深专家林伟(花名:伟林)带来了以《大数据计算平台的研究与实践》为主题的深度分享。林伟目前负责阿里云MaxCompute平台的架构设计,在加入阿里云之前,就职于微软总部Bing Infrastructure团队,从事大数据平台Cosmos/Scope的研发。在大数据领域研究多年的他,演讲内容非常务实,引发学生们的多次互动。

 

他的分享主题聚焦目前阿里云在大数据计算平台建设过程中的一些思考,以及在面对数据存储、资源调度等挑战时的解决思路和实践经验,同时对大数据计算平台建设的最新进展进行了简明的介绍。本文内容根据其演讲内容整理。

 

分布式文件系统


图1 数据的增长速度曲线

 

相关研究数据表明,我们正面临的是一个数据指数爆炸的时代,数据无时无刻不在产生,而90%的数据产生于近2年,产生的速度是非常惊人的。2011年有预测表明,2015年时数据即可达到800万PB,而阿里云的愿景是打造数据分享第一平台,帮助用户挖掘数据价值,在面对如此海量的数据、想要通过大数据平台分析其背后的巨大价值之前,首先就需要能够将数据保存下来,并且是要廉价的保留下来。这就要求一定要使用基于大规模工业流水线上生产的普通PC和SATA磁盘,打造廉价的存储系统用于存储数据。但是,由于是大规模流水线生产出来的普通硬件,一定会有相对的次品率,一块硬盘平均每年会有百分之几的出错概率。在这种情况下,如何在这个出错概率上去保证数据服务的高可用性,我们就需要依赖多副本来提高我们的容错能力。 从而能够做到我们10个九的可靠性的数据服务。

多副本


图2 一个多副本slide的过程


这张图描述了一个多副本的过程,我们有多台chunk server分布式的来保存文件,在这个例子中有灰,绿和橙色三个文件,为了简化描述,假设每个文件有2个副本(在真实系统里面副本的个数是可以控制的,根据数据的重要性、副本可以扩展到3个或多个不等)分布在不同的chunk server中。然后我们把关于副本位置的元数据保存在元数据服务器Master中,假设这个时候Chunk Server C机器坏了,但是因为每个文件至少还是有个副本在服务,所以对服务是没有影响的。不过为了保持系统的容错水平,我们及时把绿和橙色文件从ServerA和ServerB复制到D和E上从而恢复2副本的水平。但是这里还有一个问题,如果Master的机器坏了怎么办?这就相当于丢失了副本的位置信息,用户就没有办法知道各副本的分布位置,就是副本是还是安全可靠的,但是整个服务还是会停滞了。为了解决这个问题,Hadoop的方案是采用加一个stand-by的机器,当Master出错的时候,stand-by的机器将接管元数据的服务。但这个解决方案需要依赖于有个高可用的共享存储来保存元数据本身。但是我们本来就是想搭建一个高可用的存储服务,不能去依赖另外一个服务来作为保证,所以我们采用了Paxos的协议来搭建我们的元数据服务。

 

Paxos 高可用方案(盘古)

Paxos协议,是2013年图灵奖获得主Lamport在1989年发表的一篇论文,该论文解决了分布式系统下一致性问题。如果大家感兴趣可以去读一下论文。

图3 Leslie Lamport

(Leslie Lamport,微软研究院科学家,2013年图灵奖得主,1989发表Paxos解决了分布系统下的一致性问题)

 

这个协议的推演是个复杂的过程,其主要思路就是在2N+1的群体中通过协议交换信息,通过少数服从多数的方式达到整个数据的一致性。这样一来,元数据可以大家分别各自存储,不存在需要额外的高可用的共享存储。并且只要存在多数者,我们就能提供准确一致的元数据服务。


图4 场景示意


在上图中,Acceptor相当于一个仲裁者,我们可以看到Acceptor 3因为某种原因不能和Acceptor1、2联系,但是只要1、2看到是一致的元数据,服务就可以继续下去,所以不会存在单点Failure,整个系统的容错等级也是可以配置的,根据机器的环境、出错的概率、恢复的速度进行调整,最多可以容忍N台机器出错(2N+1机器组成的Paxos),并且该协议中各个请求不需要同步,都是纯异步的方式,使得整个协议不会因为某些机器的延时而造成性能的下降,在分布式系统中,这个临时性能波动是非常常见的。这个方案没有任何额外需要高可用的共享存储,就可以通过普通PC的机器环境里面来达到高可用性。


盘古分布式文件系统


 

图5 场景示意


刚刚讲到阿里的分布式文件系统盘古就是由保存数据多副本的大量的Chunk Server加上一个提供高可用的元数据服务的Paxos群来提供高可靠的数据服务。此外,我们还在高可靠,多租户,高性能,大规模等方面做了大量的研究和工作。比如多租户访问权限控制,流控,公平性,离线在线混布;高性能方向,比如混合存储,我们知道SSD盘存储量高、读写性能好但是贵,我们如何结合SSD的高性能,高吞吐和SATA的低沉本高密度做到一个性能上贴近SSD,但是成本贴近SATA等等。

 资源调度的挑战

刚刚说了存储,数据存下来了,但是如果仅仅是存,而不是分析,那数据只是躺在系统里的垃圾。所以,数据一定要动起来。在存储的基础上去搭建一个计算平台去分析数据背后的价值,而首要解决的的就是调度的问题,如何任务能够高效调度到我们集群中的资源上去运行。其实就是把你的需求和你的资源做个Match。这么说起来很简单的问题,但是一旦规模大了、需求各异了,就会变得很难。因为我们的规模,机器负载时时刻刻都在变化,需求上也是要求各异,比如CPU/磁盘/网络等等, 运行时间,实时性要求,需求直接的关系也是各自不同的。如何在有限的时间中快速的进行bin-pack的算法,达到资源的充分使用,并同时保证实时性,公平性等等不同需求的平衡是非常挑战的。


图6 待调度实例数

 

调动的多维目标


图7 调动的多维目标


这里主要展示了在调度中多个维度的目标,这些目标是相互牵扯的。比如高效率就希望尽量把机器装满,有空就塞一个任务进去,但是这样就会影响公平性,如果总是以这种方式,那么小任务、比较灵活的任务容易被执行,总能够得到机会调度,那些比较有更多要求,约束条件的任务就会被饿死,所以高可用性和公平性是有矛盾的。再举个例子,实时性就是希望预留资源从而不会出现打满的情况,但这样势必带来资源的浪费,影响使用效率。阿里云在各个维度上均做了大量的工作,比如高使用效率上,我们做了负载平衡,离线在线混布,就近执行优化,资源复用。多租户方面资源配额的管理,优先级。实时性方向,资源如何隔离等等。而要在这些看似矛盾的调度目标上做到最好一个调度系统,其本身需要基于非常详尽的运行统计和预测数据,比如资源要求的推算,机器负载的实时统计数据等等,并在这些数据帮助下及时的做出好的决策。

 

举一个资源复用的例子说明一下提高机器的使用效率同时保证实时性不被破坏,我们套用航空中的例子来解释。我们把用户分成几种group.:有非常重要的job,对于实时性,完成时间要求很高的用户,他们就是金卡会员,他来了我们优先让他登机,访问我们机器的资源;剩下是普通用户,需用排队享用云服务;最后一部分用户他们对完成时间没有什么要求,如果碰巧金卡会员没有来,或者使用的资源没有占满,他们就可以提前坐当前航班,但是如果来了金卡会员,他们就只能做下一班航班了。通过这种方式我们来达到资源使用和实时性要求的一种平衡。听起来似乎很简单,但是如何设计各个舱位的比例,什么时候能够允许抢占,谁抢占,抢占谁。还有每个任务的运行时间,开始时间的不同,如何分配他们到不同的航班,每个都是可以好好研究的问题,这个事情需要真正和业务、和后面的服务进行一种可适配的调整来去达到性能最好的平衡。

 

伏羲作业编程模型:DAG

图8 DAG


讲完调度问题,在讲计算平台之前大概简单介绍一下我们作业的编程模型。有别于Map-Reduce把运算分为Map和reduce两个阶段,我们作业可以被描述为一个的DAG图。每个节点可以有多路的输入和输出。例如左图。

 

MaxCompute(原ODPS)分布式海量数据计算引擎

有了存储,有了资源调度。让用户来裸写DAG图来进行计算还是太难。所以我们需要搭建一个计算引擎来帮助数据工程师更加好的,更加容易的来做数据分析。这个计算引擎我们希望达到海量的高性能的计算能力,同时有完善安全的体制,有统一应用的编程框架,能够让我们上面的数据工程师更好更方便的开发数据应用,我们需要有稳定性、因为稳定是服务的第一要素。

 

统一的计算引擎


图9 计算基本架构


我们有多个万台以上的物理集群分布在多地的,在此基础上会有一个飞天的分布式操作系,再上面会搭建一个统一的计算引擎帮助我们的开发者迅速的进行开发。 之上我们提供了很多种运算方式,比如传统的SQL、MR、迭代计算、图计算、流计算等种种计算模式帮助开发人员解决现实问题。这个平台最主要有两个特点,第一是“大”,去年双十一6小时处理了100PB的数据;第二是“快”,去年打破世界纪录,100TB数据排序377秒。

 

MaxCompute系统架构

图10 MaxCompute系统架构

 

上图揭示了MaxCompute平台的体系结构,数据通过DataHub接入到计算引擎,不同于其他的计算分布式系统,我们还分割管理层和运算层,管理层封装底层多个计算集群,使得计算引擎可以当成一个运算平台,可以打破地域的限制,做到真正的跨地域、跨机房的大型运算平台,还有一个重要原因是基于安全性的要求。我们只在计算集群内去执行用户自定义的函数,而在管理层我们进行用户权限检查,在利用沙箱技术隔离恶意用户代码的同时,通过网段隔离,进一步保障用户数据的安全性。

 

数据从某种意义上是阿里的生命线,所以我们系统设计的时候就非常强调数据的管理,我们有很详尽的数据血缘关系的分析,分析数据之间的相关性。丰富的数据发现工具帮助数据工程师理解和使用数据等等。阿里也非常强调数据的质量,因为提高了系统中的数据质量将大大提高数据分析的效率,使得我们数据处理变得事半功倍。我们建立完整数据质量监控闭环,记录计算平台本身中各种运行数据的和各种元数据,这些数据其实本身就是非常巨大, 我们正好利用自己平台本身的强大数据分析能力来分析这些数据,通过系统已有的监控能力等等来提高自己上数据质量。

 

回归到运算,刚刚讲到我们在统一的计算引擎上面很多种计算模式,因为时间有限,我们就只用一个简单的例子来解释一下整个SQL的过程。


图11 编译


这个例子很简单,就是将A,B,C做个join后进行fliter后返回。编译器将该查询转变一个语法树,然后对该树进行多次的visit. 将不同的信息附加到该树上。我们将编译器和IDE紧密结合,在编辑查询的同时不停的进行编译,从而能够提供自动补全,上下文智能推荐等等visual studio的编程体验。


 


图12优化


经过编译,我们将生成一个逻辑执行计划,接下来我们将其进行优化来生成一个物理执行计划。我们采用cascading优化模型。就是将逻辑执行计划,利用变换规则把其分裂出多个等价的物理执行计划,然后通过一个统一的cost model来选择一个最优的执行计划(cost最低),现在开源社区也在从简单的rule-based像这种更加先进的cost-based的优化器演进。有别于单机成熟的数据库产品中的已经广泛使用cascading优化器。在分布式系统下,cost model本身, 大量用户自定义函数和分布式场景都带来不同的问题场景。

 


图13 分布式查询中的一个优化问题


这里就举一个例子来解释下分布式系统下的查询优化一个问题。我们需要T1和T2两个表格在

a column上做join,T1按照a, b进行分片, T2按照a进行分片。所以我们可以把T1重新按照a进行重新分片然后和T2进行join, 我们也可以把T2作为整体然后broadcast到T1的每个分片。这两个执行孰优孰劣取决于重新分片T1带来多余一个步骤重,还是broadcast T2带来多余数据拷贝重。如果这个分片是Range分片,我们还会有更多有趣的执行计划,大家可以去阅读我在SIGMOD 12上的论文。

 

 


图14 执行


有了物理执行计划,我们将会把这个计划翻译为伏羲的一个作业区调度,因为伏羲作业可以描述DAG, 对比于常规的Map-Reduce,所以我们在这个例子中能够节省一次多余的读写操作。

 


图15 更高效的执行引擎


我们在每个worker中执行的程序是经过根据该查询经过代码生成,然后经过LLVM编译器生成的高效的机器代码。我们采用列式执行,充分利用CPU本身向量执行指令来提高CPU流水线执行效率,并提高缓存的命中率。

 


图16 HBO(基于历史的优化)


我们有大量相似查询,他们仅仅在处理数据时间上不同。所以我们可以利用数据分析的手段将这些相似的查询进行聚类,然后把原来以前执行得到的统计信息来帮助进行优化,这样我们就能够对用户自定义函数有了一些大致判断从而提高优化的结果


图17 全局调度


MaxCompute的管理层封装了多个计算集群从而做到打破机房限制,做到多地域的计算平台。再考虑任务完成时效要求,多集群之间的带宽大小等因素下进行全局分析,利用动态预先调整,远程读,复制等多种手段做到全局调度。

 

总结一下MaxCompute的特点,首先是大规模,万台单机群有跨集群的能力;兼容Hive语言;高性能,有列存储, 向量运算,C++代码运行,高运行效率,更好的查询优化;有稳定性,在阿里巴巴有5年的实践经验;有丰富UDF扩展,能够支持多种运行状态等等。讲讲大数据平台最新的进展,在刚刚做的基础上面会继续做的工作:会增强伏羲DAG,描述能力进一步增强,支持迭代计算、条件式的结束条件等,在MaxCompute平台继续加强优化,会做更多扩展,做更多性能上和成本上的优化;会贴近需求做更多迭代计算满足机器学习的算法特性等。

相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
目录
相关文章
|
2月前
|
SQL 分布式计算 运维
如何对付一个耗时6h+的ODPS任务:慢节点优化实践
本文描述了大数据处理任务(特别是涉及大量JOIN操作的任务)中遇到的性能瓶颈问题及其优化过程。
|
1月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
61 4
|
1月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
98 1
|
15天前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
【赵渝强老师】基于大数据组件的平台架构
|
23天前
|
边缘计算 人工智能 搜索推荐
大数据与零售业:精准营销的实践
【10月更文挑战第31天】在信息化社会,大数据技术正成为推动零售业革新的重要驱动力。本文探讨了大数据在零售业中的应用,包括客户细分、个性化推荐、动态定价、营销自动化、预测性分析、忠诚度管理和社交网络洞察等方面,通过实际案例展示了大数据如何帮助商家洞悉消费者行为,优化决策,实现精准营销。同时,文章也讨论了大数据面临的挑战和未来展望。
|
1月前
|
机器学习/深度学习 监控 搜索推荐
电商平台如何精准抓住你的心?揭秘大数据背后的神秘推荐系统!
【10月更文挑战第12天】在信息爆炸时代,数据驱动决策成为企业优化决策的关键方法。本文以某大型电商平台的商品推荐系统为例,介绍其通过收集用户行为数据,经过预处理、特征工程、模型选择与训练、评估优化及部署监控等步骤,实现个性化商品推荐,提升用户体验和销售额的过程。
81 1
|
2月前
|
人工智能 分布式计算 大数据
超级计算与大数据:推动科学研究的发展
【9月更文挑战第30天】在信息时代,超级计算和大数据技术正成为推动科学研究的关键力量。超级计算凭借强大的计算能力,在尖端科研、国防军工等领域发挥重要作用;大数据技术则提供高效的数据处理工具,促进跨学科合作与创新。两者融合不仅提升了数据处理效率,还推动了人工智能、生物科学等领域的快速发展。未来,随着技术进步和跨学科合作的加深,超级计算与大数据将在科学研究中扮演更加重要的角色。
|
1月前
|
SQL 消息中间件 分布式计算
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(一)
80 0
|
1月前
|
SQL 大数据
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
大数据-143 - ClickHouse 集群 SQL 超详细实践记录!(二)
59 0
|
1月前
|
SQL 消息中间件 分布式计算
大数据-130 - Flink CEP 详解 - CEP开发流程 与 案例实践:恶意登录检测实现
大数据-130 - Flink CEP 详解 - CEP开发流程 与 案例实践:恶意登录检测实现
46 0
下一篇
无影云桌面