KUDU(五)kudu優化
機架感知
Kudu可以知道每個Tablet Server處於哪個資料中心的哪個機架上,副本的負載均衡策略就可以考慮更全面,避免一個tablet的多個副本負載在同一機架,防止機架故障時tablet不可用。
上圖中,L0-L2是三個機架,TS0 -TS5是5臺Tablet Server,有兩張表:
A表(副本因子=3),包含A0-A3四個tablets
B表(副本因子=5),包含B0-B2三個tablets
如果Kudu配置了機架感知,它就會發現上面的tablet分佈違背了相關規則:
副本A0.0和A0.1構成了大多數副本(三分之二),並且位於相同的位置/ L0中,一旦L0機架電源或者交換機故障,將只有L1上的A0.2一個tablet副本可用且無法選擇出leader(根據Raft協議必須 n/2+1 個副本正常才可以選舉,n=總副本數)
B表的大多數副本集中在TS0-TS4,而TS5非常空閒,在即考慮機架分散式由考慮負載均衡的前提下,需要把B表的相關副本往TS5挪一挪
經過手工負載均衡,負載可能會變成如下樣子
透明分層儲存管理方案
- 儲存選擇方法
Kudu是為快速資料上的快速分析場景而生的,但是Kudu的成本並不低,且擴充套件性並沒有那麼好(tserver的個數不能太多)
HDFS旨在以低成本實現無限的可擴充套件性。它針對資料不可更改的面向批處理的場景進行了優化,當使用Parquet檔案格式,可以以極高的吞吐量和效率訪問結構化數
對於資料比較小且不斷變化的資料(例如維表)通常全部存放到Kudu當資料不會超過Kudu的擴充套件範圍限制,且能夠從Kudu的獨特功能中受益時(快速變化、快速分析),通常作為大表儲存在Kudu
當資料量非常大,面向批處理且基本不太可能變更的情況下首選以Parquet格式將資料儲存在HDFS中(冷資料)
2.基於滑動視窗的透明儲存管理方案
當您需要兩個儲存層的優勢時,滑動視窗模式是一個有用的解決方案。該方案的主要思路是:
使用Impala建立2張表:Kudu表和Parquet 格式的HDSF表這兩張表都是按照時間分割槽的表,分割槽粒度取決於資料在Kudu表和HDSF表之間遷移的頻率,一般是按照年或者月或者日分割槽,特殊情況下可以更細粒度在Impala另外建立一個統一檢視,並使用where字句定義一個邊界,由該邊界決定哪些資料該從哪個表讀取Kudu中變冷的資料分割槽會定期的被刷寫到HDFS(Parquet )資料刷寫之後,在HDFS表新增分割槽、使用原子的ALTER VIEW 操作把檢視的邊界往前推移
優點;
流式資料可立即查詢
可以更新遲到的資料或進行手動更正
HDFS中儲存的資料具有最佳大小,可提高效能並防止小檔案降低成本
- 資料從Kudu遷到HDFS的過程
資料從Kudu遷移到HDFS需要經過下面兩個步驟,該過程需要定時自動排程
資料遷移在第一階段,將現在不變的資料從Kudu複製到HDFS。 即使將資料從Kudu複製到HDFS,在檢視中定義的邊界也將阻止向使用者顯示重複資料。 此步驟應該包含檢查機制,以確保成功完成資料的遷移和解除安裝。
後設資料修改
在第二階段,既然已將資料安全地複製到HDFS,則更改後設資料以調整如何顯示解除安裝的分割槽。 這包括向前移動邊界,新增下一個時間視窗的新的Kudu分割槽以及刪除舊的Kudu分割槽。
索引跳躍式掃描優化
CREATE TABLE metrics (
host STRING,
tstamp INT,
clusterid INT,
role STRING,
PRIMARY KEY (host, tstamp, clusterid)
);
Kudu在內部會建立主鍵索引(B-tree),跟上表類似,索引資料按所有主鍵列的組合排序。當使用者查詢包含第一主鍵列(host)時,Kudu將使用索引(因為索引資料主要在第一個主鍵列上排序)
如果使用者查詢不包含第一個主鍵列而僅包含tstamp列怎麼辦?tstamp雖然在固定host下是有序的,但全域性是無須的,所以無法使用主鍵索引。在關係型資料庫中一般採用二級索引,但是Kudu並不支援二級索引
tstamp之前的列為“prefix column”,列的具體值為“prefix
key”,在我們們的例子中host就是prefix column。在索引中首先按照prefix key排序,相同的prefix key在按照剩餘列的值排序,因此可以使用索引跳轉到具有不同prefix key且tstamp滿足條件的行上
SELECT clusterid FROM metrics WHERE tstamp = 100,其餘的是跳過的。Tablet Server使用索引( prefix key (host =
helium)+tstamp = 100)跳過不匹配的行直接到達第三行並逐步掃描直到不匹配tstamp = 100,就通過下一個prefix key (host = ubuntu)+tstamp = 100繼續跳過不匹配的行。其餘prefix key採用相同的做法,這就叫做Index Skip Scan優化
效能
索引跳躍式掃描優化的效能與字首列(prefix column)的基數(prefix key去重後的數量)負相關
host的基數越低,跳躍掃描效能越高,反之則效能越差。
字首列基數很高時,索引跳躍式掃描優化就不可取了
在每個tablet一千萬行的資料規模下,當【字首列host基數>sqrt(number_of_rows_in_tablet)】時,索引跳躍式掃描效能開始下降。 為了解決這個問題:
Kudu目前在【跳躍次數>sqrt(number_of_rows_in_tablet)】時自動禁用跳躍掃描優化
資源規劃
在做資源規劃是重點考慮的是tserver,master負載要小很多,回顧已知tserver相關的建議和限制如下
選項 最佳效能(建議值) 限制
tablet server數 不超過100 300+
tablet數/tablet server(含副本) 1000+ 4000+
tablet數/表/tablet server(含副本) 60+ 60+
單臺tablet server儲存資料(含副本,壓縮後) 8TB+ 10TB+
單tablet儲存資料(超過會效能下降、合併失敗、啟動慢) 10G 50G
單tablet對應CPU核心數(不考慮副本,不考慮小表) 1 多對1
tablet server記憶體 16G以上最佳 不低於4G
相關文章
- KUDU學習總結
- Kudu主鍵選擇策略
- 客快物流大資料專案(四十六):Spark操作Kudu dataFrame操作kudu大資料Spark
- KUDU 1.7.0-CDH5.15.1-0 版本中 客戶端kudu 命令缺少rebalance 子命令.H5客戶端
- 將資料匯入kudu表(建立臨時hive表,從hive匯入kudu)步驟Hive
- kudu1.10基於cdh6.3.1搭建
- kudu 的基本技術限制 本文來自網路. 非原創
- 客快物流大資料專案(四十二):Java程式碼操作Kudu大資料Java
- 客快物流大資料專案(四十四):Spark操作Kudu建立表大資料Spark
- 客快物流大資料專案(四十五):Spark操作Kudu DML操作大資料Spark
- Kudu:一個融合低延遲寫入和高效能分析的儲存系統
- 併發提升 10 倍,運算延時降低 70%,領健從Kudu 到 Apache Doris 數倉升級實踐Apache
- Oracle優化的五個方面Oracle優化
- 效能優化 (五) 長圖優化,仿微博載入長圖方式優化
- 【Azure 應用服務】App Service服務無法啟動,開啟Kudu站點,App Service Editor 頁面均丟擲:The service is unavailableAPPAI
- 前端面試題(五)(安全、效能優化)前端面試題優化
- Oracle某行系統SQL優化(案例五)OracleSQL優化
- Mysql優化(出自官方文件) - 第五篇MySql優化
- SQL優化案例-自定義函式索引(五)SQL優化函式索引
- Oracle優化案例-自定義函式索引(五)Oracle優化函式索引
- Android 效能優化(五)之細說 BitmapAndroid優化
- 寶貝SEO優化五步法——資訊圖優化
- MongoDB 效能優化五個簡單步驟MongoDB優化
- 五個方面精細優化你的Oracle優化Oracle
- Session重疊問題學習(五)--最優化Session優化
- 優化器革命之-Dynamic Sampling(五)優化
- oracle performance tuning效能優化學習系列(五)OracleORM優化
- Facebook|Google資深優化師群筆記劇場版(五):轉化率Go優化筆記
- 遊戲產品如何做優化(五):LTV回收拆解遊戲優化
- Linux效能優化實戰記憶體篇(五)Linux優化記憶體
- SQL連線查詢優化[姊妹篇.第五彈]SQL優化
- 運籌優化(五)--線性規劃之內點法優化
- 丰采網優化案例:五步操作法讓您擁有優質商品!MJY優化
- 「視訊直播技術詳解」系列之五:延遲優化優化
- 蛙蛙推薦:五分鐘搞定網站前端效能優化網站前端優化
- 【書評:Oracle查詢優化改寫】第五至十三章Oracle優化
- 前端效能優化(JS/CSS優化,SEO優化)前端優化JSCSS
- VuePress 部落格之 SEO 優化(五)新增 JSON-LD 資料Vue優化JSON