1. 程式人生 > 實用技巧 >drill 學習 五 配置說明- 記憶體

drill 學習 五 配置說明- 記憶體

關於 drill 的配置主要包含了:

  • 記憶體配置
  • 多租戶配置
  • 安全配置
  • 效能以及功能配置
  • 查詢profile以及資料配置配置

記憶體配置

drill 使用包含了jvm 的直接記憶體,堆記憶體,核心使用最多的是直接記憶體,預設是8G,但是推薦配置更好(drill 高效使用了記憶體)
大部分場景drill使用的是記憶體,並不使用磁碟,jvm 堆記憶體預設是4G,4-8G基本就夠用了

  • 修改分配的記憶體
    預設位置/conf/drill-env.sh 修改需要重啟
    參考選項
#export DRILLBIT_MAX_PROC_MEM=${DRILLBIT_MAX_PROC_MEM:-"13G"}
//Maximum cumulative memory allocated to the Drill process during startup. This option was introduced in Drill 1.13.
#export DRILL_HEAP=${DRILL_HEAP:-"4G"}
//Maximum theoretical heap limit for the JVM per node.
#export DRILL_MAX_DIRECT_MEMORY=${DRILL_MAX_DIRECT_MEMORY:-"8G"} 
//Java direct memory limit per node.
#export DRILLBIT_CODE_CACHE_SIZE=${DRILLBIT_CODE_CACHE_SIZE:-"1G"} 
//Do not modify the DRILLBIT_CODE_CACHE_SIZE. The value for this parameter is auto-computed based on the heap size and cannot exceed 1GB. 

一些說明
比如DRILLBIT_MAX_PROC_MEM=40G,則以下的配置總和不能超過40G

DRILL_HEAP=8G
DRILL_MAX_DIRECT_MEMORY=10G
DRILLBIT_CODE_CACHE_SIZE=1024M
  • 修改查詢的記憶體分配
    可以將Drill分配給每個查詢的記憶體量配置為硬限制或佔總直接記憶體的百分比。在planner.memory.max_query_memory_per_node和planner.memory.percent_per_query選項設定的儲存器,drill可分配給一個節點上的查詢量。這兩個選項均預設啟用。在這兩個選項中,Drill選擇提供最多記憶體的設定
    如果修改每個查詢分配的記憶體,並繼續遇到記憶體不足錯誤,則可以嘗試減小該planner.width.max_per_node選項的值。減小此選項的值會降低每個節點的並行度。但是,這可能會增加查詢完成所需的時間。
    還可以修改drill.exec.memory.operator.output_batch_sizeDrill 1.13中引入的選項。該drill.exec.memory.operator.output_batch_size選項限制了Flatten,Merge Join和External Sort運算子分配給外發批次的記憶體量。限制分配給外發批次的記憶體可以提高併發性,並防止查詢因記憶體不足錯誤而失敗。
    傳出批處理的平均行大小(根據傳入的批處理大小計算)確定了可放入該批處理的可用記憶體的行數。如果查詢因記憶體錯誤而失敗,請減小該drill.exec.memory.operator.output_batch_size選項的值以減小輸出批處理大小。
    預設值為16777216(16 MB)。允許的最大值是536870912(512 MB)。輸入以位元組為單位的值。
    注意:不建議將批大小配置為小於1 MB,因為這可能會導致效能問題

參考資料

https://drill.apache.org/docs/configuring-drill-memory/
https://drill.apache.org/docs/sort-based-and-hash-based-memory-constrained-operators/