Presto简介
所属分类 bigdata
浏览量 741
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 分组求平均例子