Presto的应用场景与企业案例

2022-02-14 00:00:00 查询 数据 分析 集群 执行

Presto的使用场景:

Presto是定位在数据仓库和数据分析业务的分布式SQL引擎,比较适合如下几个应用场景:

  • 加速Hive查询。Presto的执行模型是纯内存MPP模型,比Hive使用的磁盘Shuffle的MapReduce模型快至少5倍。
  • 统一SQL执行引擎。Presto兼容ANSI SQL标准,能够连接多个RDBMS和数据仓库的数据源,在这些数据源上使用相同的SQL语法和SQL Functions。
  • 为那些不具备SQL执行功能的存储系统带来SQL执行能力。例如Presto可以为HBase、Elasticsearch、Kafka带来SQL执行能力,甚至是本地文件、内存、JMX、HTTP接口,Presto也可以做到。
  • 构建虚拟的统一数据仓库,实现多数据源联邦查询。如果需要计算的数据源分散在不同的RDBMS,数据仓库,甚至其他RPC系统中,Presto可以直接把这些数据源关联在一起分析(SQL Join),而不需要从数据源复制数据,统一集中到一起。
  • 数据迁移和ETL工具。Presto可以连接多个数据源,再加上它有丰富的SQL Functions和UDF,可以方便的帮助数据工程师完成从一个数据源拉取(E)、转换(T)、装载(L)数据到另一个数据源。


Presto的企业案例:

  1. Facebook

Facebook 在全球有超过10亿的用户,它的数据仓库中数据的规模非常大,在2013年就已经超过30PB。这些数据的用途非常广泛,从离线批处理到图计算、机器学习,还有交互式查询。

2008年,Facebook开源了Apache Hive,计算模型基于MapReduce,使用SQL来表达计算落,算是海量数据计算的一次非常大的进步。Hive在Facebook内部也有大规模的应用,Hive的优势是能够应对超海量数据、运行稳定、吞吐量大。

然而,对于数据分析师、PM、工程师来说,查询的速度越快(不要等一杯茶的时间),能够处理数据越多,交互式能力越强,他们的数据分析效率也就更高。基于海量数据的快速交互式查询的需求,越来越迫切。

2013年,Facebook完成了Presto的研发及生产环境的落地,搭建了几十个Presto集群,总节点数超过10000,为300PB的数据赋予了快速交互式查询的能力。

据公开披露的Facebook官方Presto论文描述,Presto在Facebook的几个主要使用场景如下:

(1)交互式分析

Facebook工程师和数据分析师经常需要在一些数据集(一般压缩后有50GB到3TB)上分析,验证猜想,绘制图表等。单个Presto集群需要至少支持50-100的并发查询,秒级的查询时延。这些交互式分析需求的用户,更关系查询执行的快慢,而不是占用资源的多少。

(2)ETL

数据仓库经常需要定时根据SQL逻辑从上游表生成下游表(例如数据仓库中的分层设计中,从ODS表到DW表,从DW表到DM表),在这种场景下,Presto可以用来执行长时间运行的SQL ETL Query,任务的计算逻辑需要完全用SQL来表达。类似下面的SQL:

INSERT INTO dw_order_analysis ... 
    SELECT category, region, sum(price) as price_sum, count(1) as order_cnt
    FROM ods_order_detail
    WHERE country = 'China'
    GROUP BY category, region
    ORDER BY price_sum

相关文章