随着大数据时代的到来,Presto作为一款高性能的分布式SQL查询引擎,在B站得到了广泛的应用。本文将详细介绍Presto在B站的性能优化实践,包括Presto集群的现状、Local Cache的优化、Index的改进以及后续的工作计划。
一、Presto集群现状
B站的Presto集群每天处理约30万次查询,每天处理约20PB的数据,拥有超过1200个Worker节点,分布在两个IDC的六个集群中。当前使用的Presto版本为330。
二、Presto Local Cache优化
为了解决查询不稳定、热表反复查询以及网络传输问题,B站对Presto Local Cache进行了优化。通过开发标记服务,将适合缓存的分区进行标记,并在构建split时识别这些分区。同时,引入了基于版本的元数据缓存、FileStatus cache、HDFS数据缓存到worker的SSD中、Worker缓存orc/parquet的footer信息等优化措施。
三、Presto Index改进
针对ORC/parquet内嵌index少的问题,B站实现了index语法,构建index数据,并写入到Hdfs中进行持久化。通过Coordinator侧source split调度利用index进行过滤,Worker侧在读orc文件时,根据index过滤stripe或者具体的行数据。同时,支持了BitMap Index、Bloomfilter Index和Min-Max Index等多种索引类型。
四、后续工作计划
B站计划支持物化列的读写、物化视图提升查询性能以及探索Native engine等后续工作。
总之,B站在Presto的性能优化方面取得了显著的成果,为用户提供更加稳定、高效的查询服务。