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

50 阅读2分钟

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

  1. 概述

    1. 大数据:大数据其实是在2000年后,因为信息化的快速发展。信息交换、信息存储、信息处理三个方面能力的大幅增长而产生的数据。
    2. Hadoop:基于廉价机器存算分离的大规模分布式处理系统
    3. OLAP VS MapReduce
      1. MapReduce代表了抽象的物理执行模型,使用门槛较高
      2. 与Mapreduce Job相比,OLAP引擎常通过SQL的形式,为数据分析、数据开发人员提供统一的逻辑描述语言,实际的物理执行由具体的引擎进行转换和优化。
    4. Presto设计思想
      1. 多租户任务的管理与调度
      2. 多数据源联邦查询
      3. 支持内存化计算
      4. Pipeline式数据处理
  2. Presto 基础原理与概念

    1. Query相关
      1. Query:基于SQL parser后获得的执行计划
      2. Stage:根据是否需要shuffle将query拆分成不同的subplan,每一个subplan便是一个stage
      3. Fragment:基本等价于Stage,属于在不同阶段的称呼
      4. Task:单个Worker节点上的最小资源管理单元:在一个节点上,一个Stage只有一个Task,一个Query可能有多个Task
    2. 通信机制
      1. Presto Client/JDBC Client与Server间通信 Http
      2. Coordinator与Vorker间的通信 Thrift Http
      3. Vorker与Vorker间的通信 Thrift/Htp
  3. Presto重要机制

    1. 多租户资源管理 - Resource Group

      1. 类似Yarn多级队列的资源管理方式

      2. 基于CPU、MEMORY、SQL执行数进行资源使用量限制

      3. 优点:轻量的Query级别的多级队列资源管理模式

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

    2. 多租户下的任务调度

      1. Stage调度
      2. Task调度
      3. Split调度
    3. 内存计算

      1. Pipeline化的数据处理
        1. Pipeline的引入更好的实现算子间的并行
        2. 语义上保证了每个Task内的数据流式处理
      2. Back Pressure Mechanism
        1. 控制split生成流程
        2. 控制operator的执行
  4. 性能优化实战

    1. 常用性能分析工具

      1. Grafana:埋点、系统指标如CPU、内存、网络等的可视化界面,时序化的数据展示

      2. Java相关指令

        Jstack 查看Java线程栈信息,排查是否有死锁或者一场线程

      3. Flame Figure/火焰图

        用于分析热点代码占用大量gpu,从而导致服务器性能下降的情况