Presto 介绍

  Presto 是由 Facebook 开发的开源大数据分布式高性能 SQL 查询引擎; 它被设计为用来专门进行高速、实时的数据分析,以弥补 Hive 在速度和对接多种数据源上的短板;专门为交互式查询所设计,提供分钟级乃至亚秒级低延时的查询性能。

1.1 Presto 架构

  Presto 是典型的 MPP 架构,由一个 Coordinator 和多个 Worker 组成,其中 Coordinator 负责 SQL 的解析和调度,Worker 负责任务的具体执行。可配置多个不同类型的 Catalog,实现对多个数据源的访问。

图片

1.2 Presto 执行查询过程

  1. Client 发送请求给 Coordinator。
  2. SQL 通过 ANTLR 进行解析生成 AST。
  3. AST 通过元数据进行语义解析。
  4. 语义解析后的数据生成逻辑执行计划,并且通过规则进行优化。
  5. 切分逻辑执行计划为不同 Stage,并调度 Worker 节点去生成 Task。
  6. Task 生成相应物理执行计划。
  7. 调度完后根据调度结果 Coordinator 将 Stage 串联起来。
  8. Worker 执行相应的物理执行计划。
  9. Client 不断地向 Coordinator 拉取查询结果,Coordinator 从最终汇聚输出的 Worker 节点拉取查询结果。

1.3 Presto 为何高性能

  • Pipeline, 全内存计算。
  • SQL 查询计划规则优化。
  • 动态代码生成技术。
  • 数据调度本地化,注重内存开销效率,优化数据结构,Cache,非精确查询等其它技术。

1.4 Presto优化

  • Coordinator 节点不作为计算节点,只作为协调节点;

  • 每台物理机只部署一个 Presto 节点,无其他任何竞争服务;

  • JVM 配置为 G1 回收器、最大堆内存为物理内存的 75%;

  • 设置堆外内存最大使用量 MaxDirectMemorySize;

  • 设置 glibc 的参数 export MALLOC_ARENA_MAX=1 ;

猜你喜欢

转载自blog.csdn.net/qq_42979842/article/details/111771276