本文来自2019杭州云栖大会大数据生态专场中的分享《Spark Relational Cache实现亚秒级响应的交互式分析》
作者:王道远,花名健身,阿里云EMR技术专家,Apache Spark活跃贡献者,主要关注大数据计算优化相关工作。
视频链接:https://tianchi.aliyun.com/course/video?spm=5176.12282027.0.0.369a379cZrDREc&liveId=41101
分四部分介绍阿里云EMR团队在Spark Relational Cache上的工作。
项目介绍
EMR为用户提供了丰富的应用,可以进行各种数据分析。
在云上进行数据分析时,需要在支持大规模数据的同时,实现快速的分析。Spark目前用户数量庞大,然而Spark目前的数据缓存机制,不支持缓存在跨会话共享,也需要使用者改写SQL查询才能利用缓存好的数据。
Spark Relational Cache 内建于EMR Spark中,为这种场景提供了一种解决方案。
Spark Relational Cache 用户透明且支持数据更新,未来还会支持缓存方案自动推荐。
技术分析
核心技术主要分三部分:数据预计算、数据预组织、查询自动重写。
数据预计算:由于数据之间是直接有关系的,查询间通常有一些通用模式。通过预计算可以大大加速查询。
Spark Relational Cache 引入执行计划重写,用户无需修改查询语句即可使用缓存好的数据。
下面是两个查询自动重写的简单示例。
数据预组织则是为了进一步优化读取预计算好的数据的过程。通过对数据进行排序和全局索引的构建,使用列式存储格式,在需要读取一定量的数据时,可以显著减少查询时间。
如何使用
Spark Relational Cache 提供了 DDL 语句用于定义缓存。
两种数据更新策略,在加速的同时能保证数据准确。Spark Relational Cache目前也支持基于分区的增量更新,后续会有更细粒度的增量更新支持。
性能分析
用Star Schema Benchmark进行测试。
由于EMR Spark的优化,1TB数据构建时间约为1小时,明显优于同类产品。
使用 Spark Relational Cache 可以获得200倍以上的性能提升。
欢迎加入Spark技术交流钉钉二群进行交流: