1、Presto在B站性能优化郭建华+b站+研发工程师个人简介个人简介 20162020 携程大数据离线平台 2020至今 B站大数据离线平台 负责Presto计算引擎目录目录1.架构2.Presto集群现状3.Presto Local Cache4.Presto Index5.后续工作架构架构Presto集群现状集群现状 30W/天 20PB/天 1200+Worker 2 IDC/6 cluster Presto-330Presto集群现状集群现状Presto Local Cache-背景背景1.容易受到慢DN影响,导致查询不稳定2.少量热表反复被查询3.减少网络传输,增加locality提升
2、查询性能Presto Local Cache-热度统计热度统计Presto Local Cache-热度统计热度统计Presto Local Cache-如何只缓存热表如何只缓存热表1.开发一个标记服务,将适合缓存的分区进行标记2.Presto在构建split时,load partition即可识别Presto Local Cache-架构架构1.强依赖HMS,且频繁请求2.构建split,访问NN获取FileStatus3.读数据,访问DN读blockPresto Local Cache-架构架构1.基于版本的元数据缓存2.主节点支持开启FileStatus cache3.HDFS数据缓存到
3、worker的ssd中4.Worker缓存orc/parquet的footer信息5.主节点软亲和调度Presto Local Cache-Soft-Affinity调度调度热点问题:热点问题:1.WorkerID1=Hash(splitID)%workerCount2.WorkerID2=Hash(splitID)%workerCount+1TaskTask集中问题:集中问题:Hive、iceberg、hudi:public String getSoftAffinityFilePath()return path+start;节点缩扩容问题节点缩扩容问题:Presto Local Cache-
4、Soft-Affinity调度调度分布不均问题:分布不均问题:掉线一台节点,相邻节点承载掉线节点全部负载解决:引入虚拟节点的概念1.更好的负载分布2.掉线节点负载均摊给各节点Presto Local Cache-本地磁盘管理本地磁盘管理1.Presto worker通过集成了AlluxioCachingFileSystem来进行热数据缓存2.读过来的数据被分成1MB为一个单位进行存储管理3.基于LRU来清理缓存块如何解决缓存失效问题?如何解决缓存失效问题?1.我们将split的FileModifiedTime 传递到FileContext2.pageSource再将该时间传递给LocalFS3
5、.LocalFS缓存Page的时候,将time写入元 数据4.LocalFS读文件的时候将该时间和存储的FileMeta中的时间进行对比Presto Local Cache-改进改进1.bugs一、FileSystem提前closeFileSystemCache涉及到对象回收的一个bugprestodb-17356二、disabled Filesystem cache情况下,viewfs 存在bugprestodb-17366三、insert语句存在跨namespace问题prestodb-17389Presto Local Cache-改进改进问题2:CacheManager只支持单路径社区
6、:社区:通过hash&mod的方式存入多磁盘改造:改造:基于AvailableSpace来做磁盘选择(借鉴HDFS)Presto Local Cache-改进改进问题3:HMS不支持获取带版本的Partition和table开启:改造:改造:HMS基于分区的lastModifyTime新增版本APIhive.partition-versioning-enabled=true异常:UnsupportedOperationExceptionPresto Local Cache-性能对比性能对比TPCH:30%数倍性能提升Presto Local Cache-