presto 調優


Presto 調優


0、presto 原理架構

https://www.cnblogs.com/tgzhu/p/6033373.html

 


1、Presto 存在的問題

  1. Coordinator單點問題(常見方案:ip漂移、nginx代理動態獲取等)

  2. 大查詢容易OOM(0.186+版本支持dump到磁盤 未驗證)

  3. 沒有容錯能力,無重試機制

  4. Presto部署環境復雜,MPP架構容易受到單台機器影響

  5. Presto並發能力不足


2、調優策略

  1. 部署多台Coordinator避免單點問題,上層封裝一層查詢服務 避免jdbc直連

  2. 如果有必要在查詢服務進行重試操作(需要判斷任務狀態)

  3. 對worker相關內存參數進行合理配置,避免OOM

  4. 啟用Presto本身資源隊列的同時,構建符合業務場景的查詢隊列,控制並發量及查詢優先級,確保任務高效完成

  5. 開發Presto監控系統,監測Presto集群狀態,及時預警。動態調整Presto集群規模


3、內存調優

Presto分為三類內存池,分別為GENERAL_POOL、RESERVED_POOL、SYSTEM_POOL。

SYSTEM_POOL是系統預留內存,worker初始化和執行任務必要的內存,默認為Xmx0.4 也可由resources.reserved-system-memory指定

RESERVED_POOL是最大查詢內存,Presto會將當前好用內存最大的query切到該內存區域,默認為Xmx0.1 由query.max-memory-per-node配置

GENERAL_POOL其他查詢內存,即除最大查詢外其他query的查詢內存,大小為Xmx-SYSTEM_POOL-RESERVED_POOL

  • query.max-memory:表示單個查詢在分布在所有相關節點上能用的內存之和的最大值。

  • query.max-memory-per-node:單個查詢在單個節點上用戶內存能用的最大值,從定義上就能看出:query.max-memory-per-node 必須小於query.max-total-memory-per-node

  • 同樣: query.max-memory 也必須小於query.max-total-memory

  • 另外:query.max-total-memory-per-node 與memory.heap-headroom-per-node 之和必須小於 jvm max memory .也就是jvm.config 中配置的-Xmx

  • 注意:memory.heap-headroom-per-node:JVM max memory * 0.3

img

img

整體內存配置受以下場景的影響:

  1. 用戶查詢數據量、復雜性(決定該用多大的查詢內存)

  2. 用戶查詢的並發度(決定該用多大的jvm堆)

需要注意的是:單純的增大RESERVED_POOL的值並不能解決Presto的查詢問題,因為RESERVED_POOL大部分時間是不參與計算的,只有滿足以下情景才會被使用,而且只能被一個Query所使用。

  1. GENERAL_POOL有節點出現阻塞節點的情況,即內存不足

  2. RESERVED_POOL沒有被使用

所以三者需要配置合理的值,如果並發比較大需要SYSTEM_POOL保持默認或者稍微再大一點,RESERVED_POOL可以稍微增大到八分之一左右。

同時對於jvm OOM的問題,需要對Presto的jvm.config進行配置:

-XX:G1ReservePercent=15
-XX:InitiatingHeapOccupancyPercent=40
-XX:ConcGCThreads=8

 


4、參考

https://cloud.tencent.com/developer/article/1156796

https://www.jianshu.com/p/f2b7d1550884

https://www.cnblogs.com/jixin/p/11234861.html

https://prestodb.io/docs/current/admin/properties.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM