目录
1.Prosto简介
==Apache Hadoop-MapReduce==
==Apache Hive==
2.Presto的优缺点
3.个人自用启动服务
个人自用启动服务
4.presto和hive的区别
5.presto优化
优点:统一、通用、简单的编程模型,分而治之思想处理海量数据。
缺点:java学习成本高、MR执行慢、内部过程繁琐
优点:SQL on Hadoop。sql语言上手方便。学习成本低。
缺点:底层默认还是MapReduce引擎、慢、延迟高
各种SQL类计算引擎开始出现,主要追求的就是一个问题:==计算如何更快,延迟如何降低==。
==Presto/trino==
Spark On Hive、Spark SQL
Flink
交互查询引擎:Presto是一款Facebook开源的MPP架构的OLAP查询引擎,可针对不同数据源执行大容量数据集的一款分布式SQL执行引擎,数据量支持GB到PB字节,主要用来处理秒级查询的场景。Presto 本身并不存储数据,,但是可以接入多种数据源,并且支持跨数据源的级联查询,而且基于内存运算,速度很快,实时性高。
Presto是一个开源的==分布式SQL查询引擎==,适用于==交互式查询==,数据量支持GB到PB字节。
Presto的设计和编写完全是为了解决==Facebook==这样规模的商业数据仓库交互式分析和处理速度的问题。
presto简介: 一条Presto查询可以将多个数据源进行合并,可以跨越整个组织进行分析;
presto特点: Presto以分析师的需求作为目标,他们期望响应速度小于1秒到几分钟;
注意:虽然 Presto 可以解析 SQL,但它不是一个标准的数据库。不是 MySQL、Oracle 的代替品,也不能用来处理在线事务(OLTP)
# 优点
1)Presto与Hive对比,都能够处理PB级别的海量数据分析,但Presto是基于内存运算,减少没必要的硬盘IO,所以更快。2)能够连接多个数据源,跨数据源连表查,如从Hive查询大量网站访问记录,然后从Mysql中匹配出设备信息。
3)部署也比Hive简单,因为Hive是基于HDFS的,需要先部署HDFS。
# 缺点
1)虽然能够处理PB级别的海量数据分析,但不是代表Presto把PB级别都放在内存中计算的。而是根据场景,如count,avg等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢,反而Hive此时会更擅长。2)为了达到实时查询,可能会想到用它直连MySql来操作查询,这效率并不会提升,瓶颈依然在MySql,此时还引入网络瓶颈,所以会比原本直接操作数据库要慢。
个人自用启动服务
datax-web启动
cd /export/server/datax-web-2.1.2
./bin/start-all.sh
海豚调度ds启动
cd /export/server/dolphinscheduler/
./bin/start-all.sh
postgres 虚拟机使用pg数据库服务
#psql -h 服务器 -p 端口地址 -d 数据库 -U 用户名
psql -h 127.0.0.1 -p 5432 -d postgres -U postgres或者
psql -h hadoop01 -d postgres -U postgres
#密码:itcast123退出 \q
Prosto集群启动
/export/server/presto/bin/launcher start
1.一般用presto查询数据,因为快,一般用hive开发数据
2.presto调取表格的方式是
from
a.b.c
hive是from b.c 只需要库.表
3.current_date等日期相关的功能,presto可以用,但这类函数的写法hive往往不通用,hive用的是‘${yesterday}’等。
一些日期的不同,例如我们在presto可以使用
format_datetime(date_add(‘day’,-1,current_date),‘yyyyMMdd’)自动获取昨天的日期,hive是不能用的,hive中可以改为:
date_format(date_add(current_date,-1),‘yyyyMMdd’)
类似的,date_diff 不同版本的presto 和hive也是不同的,具体如下
presto:date_dff(‘day’,date1,date2)
hive : datediff(date1,date2)
4.hive 最后是需要分号的; presto无
5.presto 可以用double,不能用float,presto hive都可以用varchar,但presto不能用string
例如一个字段长度20,presto 用cast(a as varchar(3))能识别出来,但 hive不可以。为了兼容,可以都写为cast(a as varchar(30))
6.新版本的hive 为了安全性,必须要对数据进行分区,要选定etl_dt,presto暂无要求
7.hive 在使用order时候需要配合limit使用,presto无要求
8.presto可以使用group by 1,2,3等简写,hive 是不能识别出来123简写的。
特别要注意的是,在写一些复杂的查询语句时,“as"以前的部分都要group的,不要偷懒只group句子中的一部分
--1)合理设置分区
与Hive类似,Presto会根据元信息读取分区数据,合理的分区能减少Presto数据读取量,提升查询性能。
--2)使用列式存储
Presto对ORC文件读取做了特定优化,因此在Hive中创建Presto使用的表时,建议采用ORC格式存储。相对于Parquet,Presto对ORC支持更好。
Parquet和ORC一样都支持列式存储,但是Presto对ORC支持更好,而Impala对Parquet支持更好。在数仓设计时,要根据后续可能的查询引擎合理设置数据存储格式。
--3)使用压缩
数据压缩可以减少节点间数据传输对IO带宽压力,对于需要快速解压的,建议采用Snappy压缩。
--4)预先排序
对于已经排序的数据,在查询的数据过滤阶段,ORC格式支持跳过读取不必要的数据。比如对于经常需要过滤的字段可以预先排序。