目录
概念
Presto(或PrestoDB)
是一个开放源代码的分布式SQL查询引擎,它是从头开始设计的,可以针对任何大小的数据进行快速分析查询。
Presto是基于内存运算,减少没必要的硬盘IO
Master-Slave的架构
presto自带的监控可以查看执行的完整sql
优势
-
内存管理:Presto使用内存管理技术来减少GC的开销,从而提高性能。Presto使用的内存管理技术是基于内存池的,可以更好地管理内存的分配和释放。
-
查询优化:Presto使用了一系列的查询优化技术,如谓词下推、列裁剪、分区裁剪等,可以减少数据的传输和处理,从而提高查询性能。
-
并发处理:Presto使用了多线程和协程技术来实现并发处理,可以更好地利用CPU资源,提高查询性能。
-
数据源支持:Presto支持多种数据源,包括Hadoop、Cassandra、MySQL、PostgreSQL等,可以更好地满足不同的数据处理需求。
-
社区支持:Presto有一个活跃的社区,不断地更新和维护代码,修复bug和增加新功能,保证了Presto的稳定性和可靠性。
总的来说,Presto在内存管理、查询优化、并发处理、数据源支持和社区支持等方面都有优势
hive和presto的语法对比
--Hive
select !(rank2_home_days1 >= 2 and rank2_home_num1 >= 3));
--Presto
select not(rank2_home_days1 >= 2 and rank2_home_num1 >= 3));
--Hive
select get_json_object(json, '$.book');
--Presto
select json_extract_scalar(json, '$.book');
--hive
select date_add('2020-07-24 11:42:58', 1)
--Presto
select date_add('day', 1, cast('2020-07-24 11:42:58' as timestamp)) date_sub用不了
--时间处理
--hive
select to_date(from_unixtime(UNIX_TIMESTAMP('20200110','yyyyMMdd')));
--presto
select (format_datetime(date_parse('20200110','%Y%m%d'),'yyyy-MM-dd') ;
--获取数组长度
--hive size函数
select size(split(user_ids,',')) from test_tb
-- presto
select cardinality(split(user_ids,',')) from test_tb
--Hive
select student, score from tests lateral view explode(split(scores, ',')) t as score;
--Presto
select student, score from tests cross json unnest(split(scores, ',') as t (score);
--hive
select to_date(from_unixtime(UNIX_TIMESTAMP('20200110','yyyyMMdd')));
--presto
select (format_datetime(date_parse('20200110','%Y%m%d'),'yyyy-MM-dd') ;
--Presto不支持String数据类型
select cast(1 as varchar)
--Presto不支持’%’运算符
select mod(1, 2)---select 1 % 2
--Presto不支持regexp、rlike语法
select regexp_like(map['field'], '.*')
--select map['field'] rlike '.*'
--select map['field'] regexp '.*'
--数组定义方式
select array [1, 2]
--datediff:
--hive
select datediff('2018-09-07','2018-09-05');
--Presto
select date_diff('day',cast('2018-09-05' as date),cast('2018-09-07' as date))
--数据类型
--Hive
SELECT CAST('2022-01-01' AS DATE);
--Presto
SELECT DATE '2022-01-01';
presto比spark执行更快的原因
一般来说,很难说Presto肯定比Spark SQL更快或更慢.这实际上取决于正在执行的查询类型,环境和引擎调整参数
在数据量不超过限制以及逻辑简单的情况下,presto是更快的
resto架构相当简单。主从式,主节点是coordinator负责SQL的优化和执行计划分配,同时还负责整个集群的内存管理;一个协调器,可以执行SQL解析,计划,调度和一组执行物理计划的工作人员。
假如一个Query需要消耗100GB的内存,这就超过了整个集群的内存了,那么Presto的coordinator就直接卡掉这个查询,防止内存溢出
Spark核心之间有更多层,集群中的每个计算节点的Executor进程中进行内存管理