一、Presto的概述
1.1 Presto的简介
官网:https://prestodb.io/
Presto是facebook的一个开源,并完全基于内存的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。presto的架构由关系型数据库的架构演化而来。presto之所以能在各个内存计算型数据库中脱颖而出,在于以下几点:
-
具有良好的清晰的体系架构,是一个能够独立运行的系统,不依赖于任何其他外部系统。
例如调度,presto自身提供了对集群的监控,可以根据监控信息完成调度。
-
简单的数据结构,列式存储,逻辑行。
大部分数据都可以轻易的转化成presto所需要的这种数据结构。
-
丰富的插件接口,完美对接外部存储系统,或者添加自定义的函数。
1.2 Presto支持的数据源
参考官网:https://prestodb.io/docs/current/connector.html#
1)hive源,支持的文件类型如下:
- ORC
- Parquet
- Avro
- RCFile
- SequenceFile
- JSON
- Text
2)开源数据存储系统
MySQL & PostgreSQL,Cassandra,Kafka,Redis
3)其他数据源
MongoDB,ElasticSearch,HBase
1.3 Presto和Hive的比较
hive是一个数据仓库管理工具,是一个交互式比较弱一点的查询引擎,而且只能访问hdfs的数据,底层编译成mr、spark或者tez程序
presto是一个交互式查询引擎,可以在很短的时间内返回查询结果,秒级,分钟级,能访问很多数据源,也不能用于在线事务处理(OLTP)
注意:presto是取代不了hive的,因为presto全部的数据都是在内存中,限制了在内存中的数据集大小,比如多个大表的join,这些大表是不能完全放进内存的
1.4 Presto与Impala的比较
首先你要知道Presto,Impala都属于开源OLAP引擎.
Presto是一个分布式SQL查询引擎,FaceBook于2013年11月份对其进行了开源, 它被设计为用来专门进行高速、实时的数据分析。它支持标准的ANSI SQL,包括复杂查询、聚合(aggregation)、连接(join)和窗口函数(window functions)。Presto 本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。
Impala是实时交互SQL大数据查询工具,是Google Dremel的开源实现(Apache Drill类似),Cloudera推出的Impala系统,它拥有和Hadoop一样的可扩展性、它提供了类SQL(类Hsql)语法,在多用户场景下也能拥有较高的响应速度和吞吐量。Impala还能够共享Hive Metastore,甚至可以直接使用Hive的JDBC jar和beeline等直接进行查询,并且支持丰富的数据存储格式(Parquet、Avro等)。此外,Impala 通过使用分布式查询引擎(由 Query Planner、Query Coordinator 和 Query Exec Engine 三部分组成),可以直接从 HDFS 或 HBase 中用 SELECT、JOIN 和统计函数查询数据,从而大大降低了延迟。
1. Presto支持标准的ANSI SQL规范,复杂查询、聚合(aggregation)、连接(join)和窗口函数
Impala的sql和Hive基本一致
2. Presto可连接的数据源更加丰富
Impala可连接的数据源不多,hive,hdfs,hbase
3. Presto的支持的文件存储格式比较多
Impala的较少
4. 速度上的比较
Impala快,但是使用的内存更多,比hive快10多倍
presto相对较慢,但是使用的内存比Impala少。 比hive快 5~10倍
所以从整体性能对比看,两者差不多,但是Presto更优.
https://www.zhihu.com/question/391626341
二、Presto的体系架构
2.1 简介与图解
Presto查询引擎是一个master/slaves的主从架构,由一个Coordinator节点和一个Discovery Server节点,多个Worker节点组成,Discovery Server通常内嵌于Coordinator节点中。Coordinator负责解析SQL语句,生成执行计划,分发执行任务给Worker节点执行。Worker节点负责实际执行查询任务。Worker节点启动后向Discovery Server服务注册,Coordinator从Discovery Server获得可以正常工作的Worker节点。如果配置了Hive Connector,需要配置一个Hive Me