ITPub博客

首页 > 大数据 > 数据分析 > presto 架构

presto 架构

数据分析 作者:mcxiaoracle 时间:2022-06-27 23:59:12 0 删除 编辑

  1. 一个Coordinator节点
  1. 一个Discovery Server节点
    1. 多个Worker节点
  • Coordinator: 负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行
  • Discovery Server: 通常内嵌于Coordinator节点中
  • Worker节点: 负责实际执行查询任务,负责与HDFS交互读取数据
  • Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。如果配置了Hive Connector,需要配置一个Hive MetaStore服务为Presto提供Hive元信息

Presto低延迟原理


  • 完全基于内存的并行计算
  • 流水线式计算作业
  • 本地化计算
  • 动态编译执行计划
  • GC控制


Presto存储插件


  • Presto设计了一个简单的数据存储的抽象层, 来满足在不同数据存储系统之上都可以使用SQL进行查询。


  • 存储插件(连接器,connector)只需要提供实现以下操作的接口, 包括对元数据(metadata)的提取,获得数据存储的位置,获取数据本身的操作等。


  • 除了我们主要使用的Hive/HDFS后台系统之外, 我们也开发了一些连接其他系统的Presto 连接器,包括HBase,Scribe和定制开发的系统


提交查询: 用户使用Presto Cli提交一个查询语句后,Cli使用HTTP协议与Coordinator通信,Coordinator收到查询请求后调用SqlParser解析SQL语句得到Statement对象,并将Statement封装成一个QueryStarter对象放入线程池中等待执行,如下图:示例SQL如下


  1. PlanDistribution:表示一个查询阶段的分发方式,上图中的4个SubPlan共有3种不同的PlanDistribution方式
    • Source:表示这个SubPlan是数据源,Source类型的任务会按照数据源大小确定分配多少个节点进行执行
    • Fixed:  表示这个SubPlan会分配固定的节点数进行执行(Config配置中的query.initial-hash-partitions参数配置,默认是8)
    • None:  表示这个SubPlan只分配到一个节点进行执行
  2. OutputPartitioning:表示这个SubPlan的输出是否按照partitionBy的key值对数据进行Shuffle (洗牌), 只有两个值HASH和NONE



数据模型

  1. catalog 对应某一类数据源,例如hive的数据,或mysql的数据

  2. schema 对应mysql中的数据库

  3. table 对应mysql中的表


presto的存储单元包括:

  1. Page: 多行数据的集合,包含多个列的数据,内部仅提供逻辑行,实际以列式存储。
  1. Block:一列数据,根据不同类型的数据,通常采取不同的编码方式,了解这些编码方式,有助于自己的存储系统对接presto。

不同类型的block:

    1. array类型block,应用于固定宽度的类型,例如int,long,double。block由两部分组成

      • boolean valueIsNull[]表示每一行是否有值。
      • T values[] 每一行的具体值。



    1. 可变宽度的block,应用于string类数据,由三部分信息组成

      • Slice : 所有行的数据拼接起来的字符串。
      • int offsets[] :每一行数据的起始便宜位置。每一行的长度等于下一行的起始便宜减去当前行的起始便宜。
      • boolean valueIsNull[] 表示某一行是否有值。如果有某一行无值,那么这一行的便宜量等于上一行的偏移量。
    1. 固定宽度的string类型的block,所有行的数据拼接成一长串Slice,每一行的长度固定。


    1. 字典block:对于某些列,distinct值较少,适合使用字典保存。主要有两部分组成:

      • 字典,可以是任意一种类型的block(甚至可以嵌套一个字典block),block中的每一行按照顺序排序编号。
      • int ids[] 表示每一行数据对应的value在字典中的编号。在查找时,首先找到某一行的id,然后到字典中获取真实的值。


    推荐阅读:

    http://t.zoukankan.com/SuKiWX-p-8667910.html

    https://developer.aliyun.com/article/686001



      来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69949806/viewspace-2903049/ ,如需转载,请注明出处,否则将追究法律责任。

      请登录后发表评论 登录
      全部评论
      数据方向,了解oracle ,IBM DB2 730

      注册时间:2019-09-30

      • 博文量
        286
      • 访问量
        226568