《2-4 B站基于緩存優化 Presto 集群查詢性能.pdf》由會員分享,可在線閱讀,更多相關《2-4 B站基于緩存優化 Presto 集群查詢性能.pdf(42頁珍藏版)》請在三個皮匠報告上搜索。
1、B B站基于緩存優化站基于緩存優化PRESTOPRESTO集群查詢性能集群查詢性能楊洋 大數據開發工程師|個人簡介|楊洋楊洋bilibili大數據開發工程師2021年6月份加入b站工作至今在團隊中主要負責Presto與Alluxio的研發對分布式計算、存儲與調度方面有濃厚興趣0101集群架構集群架構0202Presto簡介簡介0404Presto on Alluxio0606后續工作后續工作目錄目錄 CONTENT|0303Presto改造改造0505Presto Local Cache 集群架構請01|集群架構-B站SQL On Hadoop|集群架構-Presto集群現狀|Cluster1
2、Cluster2Cluster3Cluster4IDC1414+2186+214+1111+2IDC2441+2270+2085+2集群架構-Presto集群架構|Presto簡介請02|Presto簡介-Presto歷史|Presto于2013年11月份由FaceBook開源的一個分布式Sql查詢引擎,設計之初是為了進行OLAP數據查詢,支持標準的ANSI SQL,支持多數據源。PrestoSQL(trino)PrestoDB主導開發Presto Software FoundationLinux Foundation社區活躍度高低功能olapetl最新版本Release 384Release
3、 0.273Presto簡介-Presto基本原理|Presto改造請03|Presto改造Presto在B站的實踐:https:/ on Alluxio04|Presto on Alluxio-背景介紹-Presto痛點|計算存儲分離架構帶來網絡開銷 容易受慢rpc或熱dn影響,查詢性能不穩定 查詢缺乏locality,性能有待提升Presto on Alluxio-背景介紹-熱數據|Presto on Alluxio-Alluxio引入|Worker通過Alluxio讀取數據 Presto血緣信息解析用于獲取熱數據Presto on Alluxio-整合Alluxio需要考慮的點|Allu
4、xio與HDFS的scheme不同 Alluxio緩存數據的確定 Alluxio與HDFS的數據一致性保證Presto on Alluxio-Alluxio與HDFS的scheme不同|社區:社區:支持Alluxio的連接器(高版本Presto)從Alluxio中獲取元數據(無需從HMS中獲?。┦笰lluxio的SDS模塊與底層HMS通信其他:其他:維護一套新的HMS(用于Adhoc)設置白名單(用于需要緩存的表)使新HMS與原HMS保持同步團隊:團隊:改造hive connector 識別分區tag參數判斷是否走AlluxioPresto on Alluxio-緩存數據的確定|熱數據熱數據t
5、ag設置:設置:將Presto query血緣信息吐到Kafka 通過Kafka消費程序,分析血緣依賴信息并落地到Tidb 通過緩存策略服務,確定需要加載的熱數據 給熱數據設置tag(Tidb與HMS中)緩存策略:緩存策略:計算訪問熱度(一周內的訪問頻率均值)計算TTL(離當前最遠的熱分區的時間跨度)剔除超過TTL的分區Presto on Alluxio-數據一致性保證|社區:社區:通過參數控制和HDFS的元數據同步團隊:團隊:開發緩存失效服務(監聽Hive meta event)監聽add partition事件,load需緩存的新分區Presto on Alluxio-TPC-H Benc
6、hmark性能測試|實驗效果:平均下來可節省約20%的查詢時間Presto on Alluxio-線上效果|接入約30%的BI業務到緩存 已緩存約20w分區(約45TB)讀HDFS穩定性提升,2.5ms以內改進前:改進后:Presto on Alluxio-Alluxio線上故障|現象:線上Master進程偶發crash鏈接:https:/ Local Cache05|Presto Local Cache-RaptorX背景|Presto在執行計劃階段需要訪問HMS獲取表和分區的信息,HMS的響應 受單點mysql的吞吐影響,存在慢查詢 Presto在構建split以及讀數據的情況下需要訪問H
7、DFS。HDFS作為底層存儲對接了許多計算引擎,對于RPC請求存在slow rpc情況 RaptorX應運而生,對元數據與數據源進行全方面緩存Presto Local Cache-RaptorX|Hive meta cache File List Cache Fragment Result Cache Orc/Parquet Footer Cache Alluxio Data Cache Soft Affinity Scheduling鏈接:https:/prestodb.io/blog/2021/02/04/raptorxPresto Local Cache-Alluxio Local模式|
8、以jar包的形式嵌入到Presto進程中Presto Local Cache-Soft Affinity Scheduling|同一個Split盡可能分到同一臺worker上(1.hash&mod 2.一致性hash)Presto Local Cache-Alluxio Cluster|Presto Local Cache-Local vs Cluster|Presto Local Cache-改造點|Local Cache與底層數據一致性 Local Cache啟動問題 Local Cache支持hdfs文件系統 Local Cache支持多磁盤Presto Local Cache-Loca
9、l Cache與底層數據一致性|背景:背景:緩存為舊數據(若底層文件變動)影響計算引擎查詢結果思路:思路:基于文件的LastModifiedTime來判斷Presto端改造:端改造:透傳文件的LastModifiedTime信息,封裝到HiveFileContext中 構建pageSource時,將其信息傳給本地文件系統中Presto Local Cache-Local Cache與底層數據一致性|Alluxio社區:社區:社區代碼實現了基本的緩存功能 社區沒對過期數據進行處理Alluxio端改造:端改造:讀數據時校驗文件的LastModifiedTime 構建內存數據結構,保存文件及時間信息
10、 持久化信息(可用于在restore過程中恢復)修改disk存儲路徑結構Presto Local Cache-Local Cache啟動問題|背景:背景:Local Cache restore時間點(Worker啟動時)Local Cache加載失敗時應關閉cachePresto端改造:端改造:Worker啟動時,主動去獲取一次fs(用于加載緩存)當緩存加載失?。ㄈ绱疟P壞了),設置開關關閉緩存Presto Local Cache-Local Cache支持hdfs文件系統|背景:背景:社區的外部文件系統要求scheme為alluxio與ws 線上環境的data主要走HDFS(Alluxio為輔
11、)改造:改造:Alluxio端添加hdfs的scheme信息 Alluxio端添加viewfs的scheme信息Presto Local Cache-Local Cache支持多磁盤|背景:背景:單個disk空間不足 單磁盤io限制社區:社區:通過hash&mod的方式存入多磁盤改造:改造:基于AvailableSpace來做磁盤選擇(借鑒HDFS)Presto Local Cache-測試效果|單并發場景下,開啟local cache緩存可以減少20%左右的查詢時間。4并發場景下,開啟local cache整體上也有一定的提升。相比單并發情況下,有一定的性能損失。從總體上來看,無論對于簡單查
12、詢還是復雜查詢都能夠獲得一定的性能提升。Presto Local Cache-線上效果|Local Cache已上線三個Presto集群 整體緩存命中率約40%Coordinator端命中率Worker端命中率Presto Local Cache-社區PR|Get raw filesystem should consider CachingFileSystem(https:/ the input and output stream of HadoopExtendedFileSystem(https:/ disable filesystem cache(https:/ hdfs and viewfs as the external filesystem(https:/ timely invalidation of parquet metadata cache(https:/ 開發支持textFile格式的緩存 開發磁盤檢測(若有問題,隔離該節點)改進soft-affinity(用path+start作為key來hash,分散大文件分到單個worker split的壓力)改進soft-affinity排除不開啟cache的節點非常感謝您的觀看非常感謝您的觀看|