Presto

  • 前言
  • 一、Presto概念
  • 二、Presto架构
  • 三、特点
  • 3.1 优点
  • 3.2 缺点
  • 四、注意事项
  • 总结



前言

本文简单介绍了大数据中Presto的相关知识,包括Presto的基本概念、架构、特点以及使用Presto的注意事项


一、Presto概念

开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节。

  注意:虽然Presto可以解析SQL,但它不是一个标准的数据库。不是MySQL、PostgreSQL或者Oracle的代替品,也不能用来处理在线事务(OLTP)

二、Presto架构

presto 全表count presto 数据类型_机器学习


  Presto的客户端将SQL命令发送给协调者coordinator,coordinator将SQL指令转化为Presto可以识别的计算任务并将其分发给worker;worker来执行这个任务,每一个worker执行一部分任务。

  Catalog是presto支持的数据源,一个数据源就是一个catalog,图中有三个数据源,hive,kafka,Redis;在配置每一个数据源时,都要定义一个对应的connector,并且在presto中的数据结构都是固定的(schema – database ,table – 表);所以presto可以做到多数据源的连表查询,因为它将数据结构统一了。

三、特点

3.1 优点

(1)Presto是基于内存运算,减少没必要的硬盘IO,所以更快。

(2)能够连接多个数据源,跨数据源连表查,如从Hive查询大量网站访问记录,然后从Mysql中匹配出设备信息。

3.2 缺点

(1)虽然能够处理PB级别的海量数据分析,但不是代表Presto把PB级别都放在内存中计算的。而是根据场景,如count,avg等聚合运算,是边读数据边计算,再清内存,再读数据再计算,这种耗的内存并不高。但是连表查,就可能产生大量的临时数据,因此速度会变慢,反而hive此时会更擅长。

(2)为了达到实时查询,可能会想到用它直连MySql来操作查询,这效率并不会提升,瓶颈依然在MySql,此时还引入网络瓶颈,所以会比原本直接操作数据库要慢。

四、注意事项

(1)能用分区字段进行过滤尽量用分区字段进行过滤;
  比如要取某一天的数据,用creat_time字段也可以过滤,但是这样会对整个表进行扫描,不如用分区字段进行过滤;

(2)使用groupby时,如果后面有多个属性列,要将基数大的列放在前面;

(3)使用join语句时,大表在左,小表在右;即大表分段,小表广播(将小表广播到每一个worker上,将大表分为几段,每一段一个worker,这样也可以实现join操作)

(4)不支持insert overwrite,只能先delete表,再insert into;

(5)时间比较时,mysql将时间当做字符串进行比较,但是在presto中,不可以,要加上timestamp标记
代码如下:

select * from table1 where t > '2021-11-23 00:00:00';

//Presto中的写法
select * from table1 where t > timestamp  '2021-11-23 00:00:00';

总结

本文简单介绍了大数据中Presto的相关知识,包括Presto的基本概念、架构、特点以及使用Presto的注意事项,如果有不足之处或者表述不当的地方欢迎大家指正