Presto介绍

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

Presto和大家熟悉的MySQL相比:

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

数据源

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

一条Presto查询可以将多个数据源的数据进行合并分析。 比如:select * from a join b where a.id=b.id;,其中表a可以来自Hive,表b可以来自MySQL。

优势

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

举例:

SELECT id,
    name,
       source_type,
       created_at
FROM dw_dwb.dwb_user_day
WHERE dt='2018-06-03'
  AND created_at>’2018-05-20’;

上述SQL在Presto运行时间不到1秒钟,在Hive里要几十秒钟。

为什么presto查询速度比Hive快?

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