写点什么

Presto 入门

用户头像
HQ数字卡
关注
发布于: 2020 年 12 月 26 日

Presto是一个分布式的查询引擎,本身并不存储数据,但是可以接入多种数据源,并且支持跨数据源的级联查询。Presto是一个OLAP的工具,擅长对海量数据进行复杂的分析;但是对于OLTP场景,并不是Presto所擅长,所以不要把Presto当做数据库来使用。

Presto对比MySQL

  • 首先Mysql是一个数据库,具有存储和计算分析能力,而Presto只有计算分析能力;

  • 其次数据量方面,Mysql作为传统单点关系型数据库不能满足当前大数据量的需求,于是有各种大数据的存储和分析工具产生,Presto就是这样一个可以满足大数据量分析计算需求的一个工具。



Presto数据源

  • Presto需要从其他数据源获取数据来进行运算分析,它可以连接多种数据源,包括Hive、RDBMS(MySQL、Oracle、Tidb等)、Kafka、MongoDB、Redis等。

Presto优势

  • Presto是一个低延迟高并发的内存计算引擎,相比Hive,执行效率要高很多。



Presto数据使用

Presto使用Catalog、Schema和Table这3层结构来管理数据。



  • Catalog:就是数据源。Hive是数据源,MySQL也是数据源,Hive 和MySQL都是数据源类型,可以连接多个Hive和多个Mysql,每个连接都有一个名字。一个Catalog可以包含多个Schema,大家可以通过show catalogs 命令看到Presto连接的所有数据源。

  • Schema:相当于一个数据库实例,一个Schema包含多张数据表。show schemas from 'catalogname'可列出catalogname下的所有schema。

  • Table:数据表,与一般意义上的数据库表相同。show tables from 'catalogname.schemaname'可查看'catalogname.schemaname'下的所有表。

  • 在Presto中定位一张表,一般是catalog为根,例如:一张表的全称为 hive.testdata.test,标识 hive(catalog)下的 testdata(schema)中test表。

可以简理解为:数据源的大类.数据库.数据表。

Presto对比Hive

  • Hive是一个基于HDFS(分布式文件系统)的一个数据库,具有存储和分析计算能力, 支持大数据量的存储和查询。Hive 作为数据源,结合Presto分布式查询引擎,这样大数据量的查询计算速度就会快很多。

  • Presto支持标准SQL,这里需要提醒大家的是,在使用Hive数据源的时候,如果表是分区表,一定要添加分区过滤,不加分区扫描全表是一个很暴力的操作,执行效率低下并且占用大量集群资源,大家尽量避免这种写法。

  • 这里提到Hive分区,我简单介绍一下概念。Hive分区就是分目录,把一个大的数据集根据业务需要分割成更细的数据集。

  • 举个例子:假如一个表的数据都放在/user/table/目录下,如果想把数据按照每天的数据细分,则就变成/user/table/2018-06-01/,/user/table/2018-06-02/,……如果查询某一天的数据,就可以直接取某一天目录下的数据,不需要扫描其他天的数据,节省了时间和资源。



Presto接入方式

  • Presto的接入方式有多种:presto-cli,jdbc,http,golang,SQLAlchemy,PHP等,其中presto-cli是Presto官方提供的。

应用场景

  • MySQL跨库查询

  • BI的web后端查询

为什么Presto查询速度快?

为啥Presto查询速度快?虽然是在内存中的,但是还是查的Hive的数据源,为什么比Hive自己快?可以理解为类似于MySQL不同的引擎么?Presto比Hive自带的引擎快?



Presto是常驻任务,接受请求立即执行,全内存并行计算;Hive需要用yarn做资源调度,接受查询需要先申请资源,启动进程,并且中间结果会经过磁盘。



发布于: 2020 年 12 月 26 日阅读数: 20
用户头像

HQ数字卡

关注

还未添加个人签名 2019.09.29 加入

略懂后端的RD

评论

发布
暂无评论
Presto入门