首页  

Presto简介     所属分类 bigdata 浏览量 204
Presto 分布式数据查询引擎 可接入多种数据源,支持跨数据源查询
ad-hoc query  即席查询
交互式分析

客户端提交查询,从 Presto 命令行 CLI 提交到 Coordinator
Coordinator 进行 解析,分析并执行查询计划,然后分发处理队列到 Worker 
Coordinator 跟踪每个 Work 的活动情况并协调查询语句的执行
Coordinator 为每个查询建立模型,模型包含多个Stage,每个Stage再转为Task 分发到不同的 Worker 上执行

Presto 使用内存计算,减少与硬盘交互

coordinator worker

coordinator=true
node-scheduler.include-coordinator=true
http-server.http.port=8080
query.max-memory=5GB
query.max-memory-per-node=1GB
discovery-server.enabled=true
discovery.uri=http://example.net:8080


coordinator   接收客户端查询请求,管理每个查询的执行过程
node-scheduler.include-coordinator  是否将coordinator 作为worker 
http-server.http.port  内部和外部通讯都是用 http 
query.max-memory=5GB   单独的查询任务使用的最大内存
discovery-server.enabled  
通过Discovery 服务来找到集群中所有的节点
每一个Presto实例启动时注册到discovery服务
一般 Discovery 和 coordinator 部署在一起



Connector Catelog Schema  Table
一个 Catelog 包含 Schema 和 Connector
三层表结构
Catalog  数据源,例如 Hive  MySql 等
Schema   对应 MySql 中的数据库
Table    对应 MySql 中的表

Page  多行数据的集合,包含多个列的数据,内部仅提供逻辑行,实际以列式存储

Block 一列数据,根据不同类型的数据,通常采取不同的编码方式

不同类型的 Block

Array 类型   固定长度的类型,例如 int,long,double
block 由两部分组成
boolean valueIsNull[]表示每一行是否有值
T values[]每一行的具体值


可变长度的 Block,应用于 String 类数据,由三部分信息组成
Slice 所有行的数据拼接起来的字符串
int offsets[]
每一行数据的起始偏移位置 每一行的长度等于下一行的起始偏移减去当 前行的起始偏移。
boolean valueIsNull[]:
表示某一行是否有值。如果有某一行无值,那么这一行的偏移量 等于上一行的偏移量

固定宽度的 String 类型的 block
所有行的数据拼接成一长串 Slice,每一行的长度固定

字典 block
对于某些列,distinct 值较少,适合使用字典保存
主要有两部分组成
字典,可以是任意一种类型的 block(甚至可以嵌套一个字典 block),block 中的每一行按照顺序排序编号
int ids[]表示每一行数据对应的 value 在字典中的编号
查找时,首先找到某一行的 id, 然后到字典中获取真实的值



缺点 内存消耗 可能会OOM count,avg 等聚合运算,是边读数据边计算,再清内存,再读数据再计算,耗的内存并不高 连表查,可能产生大量的临时数据,速度会变慢 比直接操作数据库要慢 Presto 和 Impala 两者都吃内存 presto 数据源支持丰富 2020 年 12 月 27 日,prestosql 与 facebook prestoDB 正式分裂,改名为 trino https://prestodb.io/ https://prestosql.io/ https://trino.io Prestodb VS Prestosql(trino) 根据目前社区活跃度和使用广泛度,推荐 prestosql

上一篇     下一篇
idea maven 项目 scala代码 不会自动编译

spark3 例子

Apache Pinot 分布式实时分析和存储系统

spark core RDD

spark RDD saveAsTextFile

spark RDD 分组求平均例子