close

本文資料來自2021年12月09日舉辦的PrestoCon2021,議題為《Presto at Tencent at Scale Usability Extension Stability Improvement》,分享者Junyi Huang 和 Pan Liu,均為騰訊軟件工程師。Presto 已被騰訊採用為不同業務部門提供臨時查詢和交互式查詢場景。在這次演講中,作者將分享騰訊在生產中關於 Presto 的實踐。
關注過往記憶大數據公眾號回復10110tx獲取本文資料。

本次分享主要有以下幾個內容:

•Presto 在騰訊的使用狀況•可用性擴展•穩定性改善•性能優化•未來工作

Presto 在騰訊的使用狀況

上面是目前 Presto 在騰訊的使用狀況。集群規模為 500+ 台 Worker,每天10W+查詢,處理 2+PB 的數據,P50 查詢時間在50s內。

用戶的 SQL 提交到一個稱為 SuperSQL 的中間件中,其實騰訊內部一個統一、智能、跨引擎的 SQL 處理層。SuperSQL 會解析用戶提交過來的 SQL,校驗並利用 RBO、CBO 以及 HBO 的東西將 SQL 轉發到 Presto 或者 Spark 集群中。比如小或者中等規模的查詢轉發到 Presto 處理;ETL 轉發到 Spark 中。

可用性擴展

在可用性方面,騰訊對 Presto 進行了改造,使其支持 Hive UDF、MapJoin Hint 以及隱形類型轉換等。
查詢的 Metrics 會進行保存,供 HBO 、性能分析等使用,同時騰訊 Presto 團隊還在做 Presto 歷史服務器等功能。

我們知道,原生的 Presto 配置 Catalog 是需要重啟集群的。而騰訊對這個進行了改造,使得 Presto 支持動態 Catalog 配置,動態 Catalog 信息是保存到 Catalog Store(猜想應該是元數據等服務)。對Catalog 的增刪操作都是發到 Coordinator,然後再由 Coordinator 同步到 Worker。

Presto 的 Iceberg 數據源的社區進行了一些功能提升,騰訊 Presto 團隊將一些有用的 Patch Merge 到自己分支。

穩定性改善

穩定性建設之一是 JVM 調優。主要包括 JDK 由8升級到11. -XX:GCLockerRetryAllocationCount 增加到 100。

騰訊 Presto 團隊弄了一個新的策略:在 Full GC 之後,如果 workers 還出現 OOM 的問題,就會 kill 掉 workers 上使用內存最多的查詢。

ORC 文件如果有很多 stripes 的話,很容易導致 Worker 出現 OOM,對於這個問題主要有以下兩個解決辦法:

將大的ORC 文件拆分成 stripe 比較合適的小文件,但是這個需要修改用戶的數據。

優化 Presto ORC Reader,不需要在不同的 splits 中讀取相同 ORC文件的重複 StripeStatistics。

其他擴展性提升:

對重要業務的不同類型工作負載使用獨立集群處理;

限制查詢的 split 數,避免大查詢以及處理許多小文件的查詢;

轉發到 Presto 的查詢失敗時會通過 SuperSQL 自動轉發到 Hive/Spark,這個操作對用戶是無感知的。

減少 hive.dfs-timeout 來避免從 HDFS DataNode 讀取數據時等待過長的時間。

性能優化

引入了 Presto on Alluxio,目前 Alluxio 節點和 Presto 是混部的,Presto Alluxio Local Cache 正在測試中。

對不同的數據源使用不同的路由策略。

當路由的時候,會檢查 Alluxio 集群的健康,如果 Alluxio 路徑不可訪問時自動使用 HDFS 路徑;

熱數據範圍是由用戶在白名單中指定的,其可以支持多個 Alluxio 集群;

第一次讀取數據時,把數據緩存到 Alluxio 中。數據的過期和 evict 都是自動的。

上面是 Presto on Alluxio 的性能測試,主要選取了8中類型的 SQL 進行了測試。(過往記憶大數據備註:性能提升看起來不明顯啊?)

目前,騰訊的 Presto 是部署在 K8S 上的。

支持通過節點的 CPU 和 內存的使用情況自動擴縮容。

對 distinct Count 查詢進行了重寫,將其轉換成 grouping sets,從而通過部分聚合消除數據傾斜。同樣場景下的用戶場景性能提升了2-3倍。

優化重分區的用戶場景,性能從11分鐘提升到6分鐘;CPU 利用率從 90% 降為50%。

未來工作

未來工作主要是支持臨時表/視圖;Presto 歷史服務器的實現;在具有不同硬件資源的機器上進行自適應執行。
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 鑽石舞台 的頭像
    鑽石舞台

    鑽石舞台

    鑽石舞台 發表在 痞客邦 留言(0) 人氣()