Presto 架构原理与优化简介 | 青训营笔记

89 阅读3分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

1. 大数据与OLAP系统的演进

1.1 什么是大数据

大数据 = 大规模的数据量? 关于大数据这里我们参考马丁·希尔伯特的总结:大数据基实是在2000年后,因为信息化的快速发展。信息交换、信息存储、信息处理三个方面能力的大幅增长而产生的数据。

1.2 OLAP(OnLine Analytical Processing)

对业务数据执行多维分析,并提供复杂计算,趋势分析和复杂 数据建模的能力。是许多商务智能(BI)应用程序背后的技术。

1.3 OLAP VS MapReduce

  • MapReduce代表了抽象的物理执行模型,使用门槛较高
  • 与Mapreduce Job相比,OLAP引擎常通过SQL的形式,为数据分析、数据开发人员提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化。

1.4 OLAP核心概念:

  • 维度
  • 度量

1.5 常见的OLAP引擎:

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

2.Presto设计思想

Presto是Facebook开源的查询分析引擎,在国内京东用的比较成熟。Presto数据处理能力到达PB级别,支持查询数据源有Hive、Kafka、Cassandra、Redis、Mongodb、SQL server等,在工作应用当中,Presto的查询性能比Hive要高40%以上。

image.png

3. Presto基础原理

image.png

3.1 基础概念

image.png

3.2 特点

  • 多租户任务的管理与调度:它支持并发执行数百个内存、I/O 以及 CPU 密集型的负载查询,并支持集群规模扩展到上千个节点;

  • 多数据源联邦查询:它可以由开发者利用开放接口自定义开发针对不同数据源的连接器(Connector),从而支持跨多种不同数据源的联邦数据查询;

  • 支持内存化计算:把计算嵌入到内存里面去,内存变成存储+计算的利器,在存储/读取数据的同时完成运算,减少了计算过程中的数据存取的耗费。把计算都转化为带权重加和计算,把权重存在内存单元中,让内存单元具备计算能力。

  • pipeline式数据处理:将许多算法模型串联起来,然后依次对数据进行处理,得到最终的分类结果。

4. Presto重要机制

4.1 多租户资源管理

  • Resource Group

    • 类似Yarn 多级队列的资源管理方式
    • 基于CPU、MEMORY、SQL 执行数进行资源使用量限制
  • 优点:

    • 轻量的Query级别的多级队列资源管理模式
  • 缺点

    • 存在一定滞后性,只会对Group中正在运行的 SQL进行判断

4.2 多租户下的任务调度

  1. Stage调度策略
  2. Task的节点选择策略
  3. Split调度策略

4.3 内存计算

  • Pipeline(按LocalExchange拆分) :

    • Pipeline的引入更好的实现算子间的并行
    • 语义上保证了每个Task内的数据流式处
  • Back Pressure Mechanism

    • 控制split生成流程
    • 控制operator的执行

总结

  1. 大数据与 OLAP 的演进之路,简单了解了 Presto 的设计理念;
  2. 了解了 Presto 的基础概念与原理,加深对Presto基础概念的理解;
  3. 深入剖析 Presto 的特色和重要机制;
  4. 了解了 Presto 常用的优化工具,以及 Presto 在字节内部的相关优化;

参考

  1. 【大数据专场 学习资料三】第四届字节跳动青训营 - 掘金 (juejin.cn)
  2. Big data - Wikipedia