Presto架构原理

什么是大数据?
在信息化时代背景下,由于信息交互,信息存储,信息处理能力大幅增加而产生的数据

什么是OLAP?

OLAP (Online Analytical Processing) 对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂数据建模的能力。是许多商务智能(BI)应用程序背后的技术。OLAP已经发展为基于数据库通过SQL对外提供分析能力。 与MapReduce Job相比,OLAP引擎常通过SQL的形式,为数据分析、数据开发人员提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化

常见的OLAP引擎:

  • 预计算引擎:Kylin, Druid
  • 批式处理引擎:Hive, Spark
  • 流式处理引擎:Flink
  • 交互式处理引擎:Presto, Clickhouse, Doris

Presto是Facebook开源的查询分析引擎,在国内京东用的比较成熟。Presto数据处理能力到达PB级别,支持查询数据源有Hive、Kafka、Cassandra、Redis、Mongodb、SQL server等,在工作应用当中,Presto的查询性能比Hive要高40%以上。Presto的具体组成如下图所示:Presto架构原理_第1张图片

主要的组成部分为:Coordinator+一个Discovery server+多个worker。三者的作用如下:

1、coodinator:用于解析查询sql,生成执行计划,并分发给worker执行。

2、discovery server:worker上线后,向discovery server注册。coodinator分发任务前,需要向discovery server获取可以正常工作worker列表。

3、worker:具体执行任务的工作节点。

在Presto中有一些基础概念。

  • Connector

Presto通过Connector来支持多数据源,一个Connector代表一种数据源,如Hive Connector代表了对Hive数据源的支持。可以认为Connector是由Presto提供的适配多数据源的统一接口

  • Catalog

针对不同的数据源,Connector和Catalog是一一对应的关系,Catalog包含了schema和data source的映射关系。

Presto基础概念-Query部分

  • Query

基于SQL parser后获得的执行计划

  • Stage

根据是否需要shuffle将Query拆分成不同的subplan,每一个subplan便是一个stage

  • Fragment

基本等价于Stage,属于在不同阶段的称呼,在本门课程可以认为两者等价

  • Task

单个 Worker 节点上的最小资源管理单元: 在一个节点上, 一个 Stage 只有一个 Task, 一个 Query 可能有多个Task

  • Pipeline

Stage 按照 LocalExchange 切分为若干 Operator 集合, 每个 Operator 集合定义一个 Pipeline

  • Driver

Pipeline 的可执行实体 , Pipeline 和 Driver 的关系可类比 程序和进程 ,是最小的执行单元,通过 火山迭代模型执行每一个Operator

  • Split

输入数据描述(数据实体是 Page), 数量上和 Driver 一一对应,不仅代表实际数据源split,也代表了不同stage间传输的数据

  • Operator

最小的物理算子

Presto基础概念-数据传输部分

  • Exchange

表示不同 Stage 间的数据传输,大多数意义下等价于 Shuffle

  • LocalExchange

Stage内的 rehash 操作,常用于提高并行处理数据的能力(Task在presto中只是最小的容器,而不是最小的执行单元)

Presto执行的流程

Presto架构原理_第2张图片

查询流程如下:

  1. Client 使用 HTTP 协议发送一个 query 请求。
  2. 通过 Discovery Server 发现可用的 Server。
  3. Coordinator 构建查询计划(通过 Anltr3 解析为 AST(抽象语法树),然后通过 Connector 获取原始数据的 Metadata 信息,生成分发计划和执行计划)。
  4. Coordinator 向 Worker 发送任务。
  5. Worker 通过 Connector 插件读取数据。
  6. Worker 在内存里执行任务(Worker 是纯内存型计算引擎)。
  7. Worker 将数据返回给 Coordinator,汇总之后再响应客户端。

但是Presto在查询上也有一些不足:

  1. 没有容错能力,当一个 query 分发到多个 Worker 去执行时,当有一个 Worker 因为各种原因查询失败,Master 感知到之后,整个 query 也会失败。
  2. 内存限制,由于 Presto 是纯内存计算,所以当内存不够时,Presto 并不会将结果 dump 到磁盘上,所以查询也就失败了。
  3. 并行查询,因为所有的 task 都是并行执行,如果其中一台 Worker 因为各种原因查询很慢,那么整个 query 就会变得很慢。
  4. 并发限制,因为全内存操作+内存限制,能同时处理的数据量有限,因而导致并发能力不足。

 

你可能感兴趣的:(大数据)