需求場景?
目前Doris是一個典型Share-Nothing的架構, 通過綁定數據和計算資源在同一個節點獲得非常好的性能表現. 但隨著Doris計算引擎性能持續提高, 越來越多的用戶也開始選擇使用Doris直接查詢數據湖數據. 這類場景是一種Share-Disk場景, 數據往往存儲在遠端的HDFS/S3上, 計算在Doris中, Doris通過網絡獲取數據, 然后在內存完成計算. 而如果這兩個負載都混合在同一個集群時, 對于目前Doris的架構就會出現以下不足:
- 資源隔離差, 兩個負載對集群的響應要求不一, 混合部署會有相互的影響.
- 集群擴容時, 數據湖查詢只需要擴容計算資源, 而目前只能存儲計算一起擴容, 導致磁盤使用率變低.
- 擴容效率差, 擴容后會啟動Tablet數據的遷移, 整體過程比較漫長. 而數據湖查詢有著明顯的高峰低谷, 需要小時級彈性能力.
解決方案?
實現一種專門用于聯邦計算的BE節點角色:?計算節點
, 計算節點專門處理數據湖這類遠程的聯邦查詢. 原來的BE節點類型稱為混合節點
, 這類節點既能做SQL查詢, 又有Tablet數據存儲管理. 而計算節點
只能做SQL查詢, 它不會保存任何數據.
有了計算節點后, 集群部署拓撲也會發生變化: 混合節點用于OLAP類型表的數據計算, 這個節點根據存儲的需求而擴容, 而計算節點用于聯邦查詢, 該節點類型隨著計算負載而擴容.
此外, 計算節點由于沒有存儲, 因此在部署時, 計算節點可以混部在HDD磁盤機器或者部署在容器之中.
Compute Node的使用?
配置?
在BE的配置文件be.conf中添加配置項:
be_node_role=computation
該配置項默認為mix
, 即原來的BE節點類型, 設置為computation
后, 該節點為計算節點.
可以通過show backends\G
命令看到其中NodeRole
字段的值, 如果是mix
, 則為混合節點, 如果是computation
, 則為計算節點
*************************** 1. row ***************************BackendId: 10010Cluster: default_clusterIP: 10.248.181.219HeartbeatPort: 9050BePort: 9060HttpPort: 8040BrpcPort: 8060LastStartTime: 2022-11-30 23:01:40LastHeartbeat: 2022-12-05 15:01:18Alive: trueSystemDecommissioned: falseClusterDecommissioned: falseTabletNum: 753DataUsedCapacity: 1.955 GBAvailCapacity: 202.987 GBTotalCapacity: 491.153 GBUsedPct: 58.67 %MaxDiskUsedPct: 58.67 %RemoteUsedCapacity: 0.000Tag: {"location" : "default"}ErrMsg:Version: doris-0.0.0-trunk-80baca264Status: {"lastSuccessReportTabletsTime":"2022-12-05 15:00:38","lastStreamLoadTime":-1,"isQueryDisabled":false,"isLoadDisabled":false}
HeartbeatFailureCounter: 0NodeRole: computation
使用?
在 fe.conf 中添加配置項
prefer_compute_node_for_external_table=true
min_backend_num_for_external_table=3
參數說明請參閱:FE 配置項
當查詢時使用MultiCatalog功能時, 查詢會優先調度到計算節點。
一些限制?
- 計算節點由配置項控制, 但不要將混合類型節點, 修改配置為計算節點.
未盡事項?
- 計算外溢: Doris內表查詢, 當集群負載高的時候, 上層(TableScan之外)算子調度到計算節點中.
- 優雅下線: 當節點下線的時候, 任務新任務自動調度到其他節點; 等待老任務后全部完成后節點再下線; 老任務無法按時結束時, 能夠讓任務能夠自己結束.