统一计算框架|学习笔记

简介: 快速学习统一计算框架

开发者学堂课程【分布式计算入门:统一计算框架】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/375/detail/4703


统一计算框架


内容介绍

一、内存计算

二、内存计算问题

三、算子类型

四、难点


一、内存计算

关于内存计算,在广义上没有什么不适内存计算,大家所有计算都会用到内存的方式,狭义的定义是最大限度利用内存容量,最大限度可复用内存数据,内存数据可编程,框架内置容错的机制,存在 Replication 和  partition 的机制,这样才构成了狭隘上的内存计算范畴。

Batch : 可大可小

串并行 DAG:Batch 内串行,Batch 间并行

MRM

1.png

所以从内存计算引出到计算,认为计算分为三大要素,第一数据结构,第二功能,三控制逻辑,而  MapReduce  的出现是弱化了数据结构,抽象的功能让你只能去继承  MapReduce  编写程序,大大简化了控制逻辑,只能把控制逻辑编写成 Dag,不能自由组合,在某种程度上,他束缚了整个的编程能力。

思考一下,是不是还是以数据结构为核心(这里指分布式数据结构),数据结构的运算定义了从 a 到 b , b 到 a 的数据对象,他们之间的血缘关系, spark 的出现往传统方向靠近,spark 的问题是 Immutable 有什么好处,缺陷。所以需要提供更多的原语,而不是 mapreduce,需要对用户开放控制逻辑,用户可以在它的程序下面写出任意程序代码,和  sql  有点不同的是,如果用户把所有要做的事表示成  sql ,系统可以知道他要做什么事情,他可以在范围之内做出优化的动作,而且成控制逻辑功能逻辑的方法,很多时候需要用分布式执行,返回到控制层,分布式系统是不知道更高的信息,但是他取的是灵活性。


二、内存计算问题

基本的问题包括用户复杂的控制逻辑,Dag 运行效率,Distributed cache 的扩展问题,迭代计算,实际业务中的 case 问题,任务间如何共享数据,还有如何定义分布式数据结构。进而要考虑一个 adhoc 系统,他需要一线架构索引,基线,流式增量的合并,不同的文件所以加载后摆放到本地,然后再进行在线 service ,如何在各种复杂系统中做迁移,在离线,流式,迭代,在线计算做迁移。

所以换一个维度看计算,尝试从是否需要分批 Shuffle 方式是推还是拉,后世节点是预先拉起还是 Shuffle 拉起,通过这三个维度的组合可以发现,如果―A0B1C0,可以认为它是传统离线模式,―A0B0C1是 service mode ,―A0B0C1是流计算,这些只是模块不同的组合。尝试去 build 以这几种模块去设计系统,如图,

2.png

Application,可以嵌入在任何的用户环境,定义的各种分布式操作以及算子原语,用户可以使用它编写各种单机程序,以及分布式运行。Session,是指不同 job 复用数据的边界,DAGSession 可以复制不同的数据在内存中,DAGSession,不同的逻辑执行计划来复用相同的物理执行计划,BlockSession 支持 job 间复用用数据的全局管理,VertexManage 可以接受更细节的控制逻辑,localAM 保持与 am 数据结构一致的本地 am。


三、算子类型

算子层抽象出了五个基础算子类型:map,reduce,merge,shuffle,union

这五类算子是正交的,但是她的全集能组合出任何复杂算子,这张图是五个算子,在计算结构中的扭转,

3.png


四、难点

RC 的引入引发了一系列的问题,比如看到了资源一致,所以要进行本地调度,灵活的表示层会付出,泛型的代价,非原生的消耗成本是成倍数的增长,包括需要在这一层上面抽象出 schema 的 Table ,大量复用对象池和内存池,因为存在着本地的所以和摆放信息,所以引入了优化器,而不是全部依赖 globa l优化器,在分布式变量引入了 LocalDataSet ,所以用户可以和本地进行交叉式运算。分布式变量引入版本 Version,Partition/replica引入了不同的分布式变量亲缘以及计算的关系,用Tag来组合,Version 的引入使得分布式变量变得可读可写。在 ac 端支持 sql 的时候,执行计划可以简单的,分布式的 .match  来询问这个 DataSet  支持在 a 字段下支持等于的挑选操作。有所以和没有所以,逻辑执行计划经过优化后会变成不同的物理执行计划。

那么引入 CPU  框架,对不同的  join 会生出十几种优化策略,大量使用下推逻辑,希望一个处理逻辑到处运行,上下文运行的 context 不同,可以在离线, stream ,迭代,准实时,实时,在线,图分析复用。对于一个在线的场景,可以建立 dag,提前拉起  pattern 固定,大量执行下沉,利用 Codegen  做本地优化,以及内存优化,长尾控制,本地调度,在线的截断策略。

而分布式变量支持可读改,串并行  DAG 组合,支持  push/pull 模式,Shuffle service 单独抽离,进而会进一步思考 BD 是否进一步与 DB 融合,用户不希望数据拖动出来,所以需要更好的 schema 控制,建立更丰富的 index ,本地调度以及 CBO,目标客户,考虑将 DAG 和 MPP 延合成汇合架构,除了价格的设计,也要从微观的代码方面做到极致的优化。

下面介绍一下在向量化和  Codgen  做出的优化,简单来看,如下的这些代码是行存储,行运算的话,即便是在内存中也存在大量的跳跃,

GetBigint(*record, 0, &c0);  

GetDouble(* record, 1, &c1);

GetBigint(*record, 2, &c2);  

GetDouble(*record,3, &c3);

GetBigint(*record, 4, &c4);  

GetDouble(* record, 5, &c5);

double r0 =c0+ c1;

for (uint32_ _ti= 0;i < input.mView- >GetCount(); ++i){

if(c0== NULL |Ic1 == NULL)

r1 = NULL;

else *(r1++) = *(c0++)+ *(c1++);

}

如果利用列的存储,单指令多数据集  CPU  的优化变成列的计算,那么在内存里一次可以读出多行的这一列,当然存储是混合存储,提高性能。

相关文章
|
4天前
|
存储 JSON 测试技术
构建高效后端API:实践和原则
【10月更文挑战第43天】本文深入探讨了如何设计和实现高效、可维护的后端API,强调了设计哲学、最佳实践和常见陷阱。通过具体示例,我们展示了如何运用这些原则来提高API的性能和可用性。
|
21天前
|
缓存 负载均衡 测试技术
‌API开发的基础概念和作用‌
API(Application Programming Interface)是一组定义了软件组件之间交互规则的接口。它提供了一种标准化的方式,让不同的软件组件之间可以进行通信和交互。
|
2月前
|
JSON 安全 API
构建高效后端API的五大原则
【9月更文挑战第10天】在数字化时代,后端API成为了连接用户与服务、实现数据流动的重要桥梁。本文将深入探讨如何设计并构建一个高效、可扩展且安全的后端API系统。我们将从RESTful架构开始,逐步深入到错误处理、安全性、性能优化和文档编写等方面,为读者提供一套完整的后端API构建指南。无论你是初学者还是有经验的开发者,这篇文章都将为你带来新的视角和思考。
|
3月前
|
缓存 JavaScript API
构建高性能后端API:从理论到实践
【8月更文挑战第31天】 在数字化浪潮的推动下,后端API的性能成为影响用户体验和应用响应速度的关键因素。本文将带你深入理解高性能API的设计原则和实现方法,通过具体的代码示例展示如何优化API性能,确保你的后端服务能够快速、稳定地处理大量请求。
|
4月前
|
分布式计算 API 对象存储
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
Ray是一个开源的分布式计算框架,用于构建和扩展分布式应用。它提供了简单的API,使得开发者可以轻松地编写并行和分布式代码,而无需担心底层的复杂性。
809 11
|
4月前
|
存储 JavaScript Serverless
函数计算产品使用问题之如何实现项目自动化部署
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
机器学习/深度学习 人工智能 分布式计算
PAI底层支持多种计算框架
PAI底层支持多种计算框架:
121 0
|
6月前
|
缓存 安全 API
构建高效可扩展的RESTful API:后端架构的艺术
【4月更文挑战第25天】 在数字化时代的浪潮中,一个稳定、高效且易于扩展的后端系统是企业成功的关键。本文将探讨如何构建一个满足现代业务需求的RESTful API。我们将深入分析关键设计原则,如模块化、服务分层、缓存策略以及数据库优化,并讨论这些原则如何融入实际开发流程中。通过具体案例和最佳实践,我们的目标是为读者提供一套实用的工具和方法,以支持他们自己的后端开发工作。
|
6月前
|
微服务
构建可观测性参考框架
【2月更文挑战第13天】可观测性是一个快速发展的领域。
|
6月前
|
前端开发
探索GraphQL:从概念到实践,构建高效的数据查询与交互
在传统的RESTful接口架构中,前端开发人员常常受限于数据的获取和传输方式。然而,GraphQL作为一种新兴的数据查询语言和运行时,提供了更加灵活和高效的数据交互方式。本文将介绍GraphQL的概念和原理,并通过实际案例展示如何实践GraphQL,以构建高效、可扩展的数据查询与交互系统。
下一篇
无影云桌面