Presto的应用场景与企业案例
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的企业案例:
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
相关文章