Maxcompute入门-产品概述、特点、应用场景、系统架构、作业流程


MaxCompute 入门必知

简介: 什么是MaxCompute?MaxCompute的主要应用场景有哪些?产品有什么特点?系统架构和作业流程是怎样的?

一、什么是MaxCompute?

大数据计算服务(MaxCompute,原名ODPS)是一种快速、完全托管的EB级数据仓库解决方案。

随着数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百TB、PB、EB)级别。MaxCompute致力于批量结构化数据的存储和计算,提供海量数据仓库的解决方案及分析建模服务。

由于单台服务器的处理能力有限,海量数据的分析需要分布式的计算模型。分布式的计算模型对数据分析人员要求较高且不易维护。数据分析人员不仅需要了解业务需求,同时还需要熟悉底层分布式计算模型。MaxCompute为您提供完善的数据导入方案以及多种经典的分布式计算模型,您可以不必关心分布式计算和维护细节,便可轻松完成大数据分析。

二、概述与产品特点

1、采用分布式架构,规模可以根据需要平行扩展
2、自动存储容错机制,保障数据高可靠性
3、所有计算在沙箱中运行,保障数据高安全性
4、以 RESTful API 的方式提供服务
5、支持高并发、高吞吐量的数据上传下载
6、提供离线计算、机器学习两类模型及计算服务
7、支持基于 SQL、MapReduce、Graph、MPI 等多种编程模型的数据处理方式
8、支持多租户,多个用户可以协同分析数据
9、支持基于 ACL 和 Policy 的用户权限管理,可以配置灵活的数据访问控制策略,防止数据越权访问

_2020_04_30_12_37_02

三、主要应用场景

日志分析、机器学习、数据仓库、数据挖掘、用户画像、数据化运营、商业智能等。

四、MaxCompute 系统架构

_2020_04_30_12_37_35

MaxCompute系统架构由四部分组成,分别是客户端、接入层 、逻辑层及存储与计算层 。

(1)ODPS客户端

主要包括Rest APISDKCLTIDE种形式,具体说明如下:

Rest APIODPSRESTful API的方式提供离线数据处理服务;

SDK:对ODPS RESTful API的封装,目前有JavaPython等版本的实现;

CLT (Command Line Tool):运行在Window/Linux下的客户端工具,通过CLT可以提交命令完成Project管理、DDLDML等操作;

IDEODPS提供了上层可视化ETL/BI工具,用户可以基于工具完成数据同步、任务调度、报表生成等常见操作。

(2)接入层

提供HTTP服务、负载均衡、用户认证和服务层面的访问控制。

(3)逻辑层

称作控制层,是ODPS的核心部分。实现用户空间和对象的管理、命令的解析与执行逻辑、数据对象的访问控制与授权等功能。包括WorkerSchedulerExecutor三个角色:

Worker处理所有RESTful请求,包括用户空间(project)管理操作、资源(resource)管理操作、作业管理等,对于SQL DMLMR等启动Fuxi任务的作业,会提交Scheduler进一步处理

Scheduler负责instance的调度,包括将instance分解为task、对等待提交的task进行排序、以及向计算集群的Fuxi master询问资源占用情况以进行流控

Executor负责启动SQL/MR task,向计算集群的Fuxi master提交Fuxi任务,并监控这些任务的运行。

ODPS中的元数据存储在OTS中,元数据主要包括用户空间元数据Table/Partition SchemaACLJob元数据、安全体系等。

(4)计算层

飞天内核(Apsara Core),运行在和控制层相互独立的计算集群上。包括Pangu(分布式文件系统)、Fuxi(资源调度系统)、Nuwa(分布式协同服务)、Shennong(监控模块)等。

五、MaxCompute 作业流程

_2020_04_30_12_37_53

MaxCompute作业中涉及到的相关概念如下所示。

1. MaxCompute instance代表一个MaxCompute job(没有定义job就是匿名job)的实例。

一个 MaxCompute job可以包含多个MaxCompute task,所以一个MaxCompute instance可以提交多个sql或者mr,并指定是并行执行还是串行执行。由于job不常用,因此这种用法也比较少,绝大多数情况下是一个instance包含一个task

2.MaxCompute task代表一个具体的任务,目前有sql/mr/admin/lot/xlib等近20种类型,每个类型任务执行的逻辑差别很大。同一个instance下不同的task根据task_name进行区分。MaxComputetask是在控制集群上运行的,对于较为简单的修改meta的操作,在控制集群上可以完成整个的生命周期;对于计算任务,则需要向计算集群提交fuxijob

3.Fuxi job是任务调度系统模块提供的一种计算模型(与之对应的是fuxiservice),表示能执行完成的任务(service表示常驻进程)。Fuxijob支持DAG调度,每一个job都会有一个对应的jobmaster,用于进行这个job下资源的调度。对于sql来说,fuxijob又分为offlinejobonlinejob(由servicemode演变而来)。其中,onlinejob也被称为准实时任务,进程是常驻系统的,有任务时就执行,可以减少启停时间,提高处理速度。MaxComputetask可以向多个计算集群提交任务,fuxijob的主键是clustername+jobname任务调度系统提交jobjsonplan以及任务结束后的jobstatus会被保存在飞天分布式文件系统上。

4.Fuxi taskfuxijob下的一个概念,与MaxComputetask类似,不同的task代表不同的执行逻辑。fuxitask之间可以链接成pipes,共同完成一段复杂的逻辑。

5.Fuxi instance指的是fuxitaskinstance,是任务调度系统调度的最小单位。一个task在实际执行过程中,会被切分为许多逻辑单元并行处理,提高处理速度。不同的instance的执行逻辑是相同的,但输入输出数据不同。

6.Fuxi worker是任务调度系统底层的一个概念,一个worker代表一个操作系统的进程,多个fuxiinstance可以复用一个worker,一个worker同时只能处理一个instance。说明说InstanceIDMaxCompute作业的唯一标识,在调查问题时非常常用,根据ProjectnameInstanceID可以构造当前instancelogviewServicemaster/JobmasterTpye类型分别为servicejobmaster节点,负责进行资源申请和调度,为worker创建工作计划并监控worker的生命周期。MaxCompute存储与计算层为阿里云自主知识产权的云计算平台的核心构件,是飞天操作系统内核,运行在和控制集群独立的计算集群上。

提交作业(简易流程):

  1. 提交一个SQL语句,发送 RESTful 请求给HTTP服务器
  2. HTTP 服务器做用户认证。认证通过后,请求就会以 Kuafu通信协议方式发送给 Worker。
  3. Worker判断该请求作业是否需要启动Fuxi Job。如果不需要,本地执行并返回结果。如果需要,则生成一个 instance, 发送给 Scheduler。
  4. Scheduler把instance信息注册到 OTS,将其状态置成 Running。Scheduler 把 instance 添加到 instance 队列。
  5. Worker把 Instance ID返回给客户端。

运行作业(简易流程):

  1. Scheduler会把instance拆成多个Task,并生成任务流DAG图。
  2. 把可运行的Task 放入到优先级队列TaskPool中。
  3. Scheduler 有一个后台线程定时对TaskPool 中的任务进行排序。Scheduler 有一个后台线程定时查询计算集群的资源状况。Executor在资源未满的情况下,轮询TaskPool,请求Task。Scheduler判断计算资源。若集群有资源,就将该Task发给Executor。
  4. Executor调用SQL Parse Planner,生成SQL Plan。Executor 将 SQL Plan 转换成计算层的 FuXi Job 描述文件。Executor 将该描述文件提交给计算层运行,并查询 Task 执行状态。Task 执行完成后,Executor更新 OTS 中的 Task信息,并汇报给Scheudler。
  5. Schduler 判断 instance 结束,更新 OTS 中 instance 信息,置为 Terminated。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM