Kudu使用最佳實踐以及踩坑記錄

Kudu表結構設計最佳實踐

1.字段設計

  • 字段數(shù)量最好不要超過300個
  • 除主鍵外,其他字段可以為空
  • 每一個字段均可以設置自己的編碼以及壓縮方式
  • Kudu1.7.0及其高版本,已經支持Decimal字段類型,適用于金融和特定的算數(shù)運算場景

2.主鍵設計

  • 建表必須包含主鍵,主鍵字段必須列在Schema的最前端
  • 建表后,主鍵無法更改,只能重建表
  • 不支持自增列
  • 主鍵不能為空,并且不能為boolean/float/double類型
  • 主鍵的值無法被更新,但是可以被delete后,re-insert
  • 主鍵即索引,tablet中的所有行都按照主鍵排序.查詢時,對主鍵指定相等或范圍的謂詞,Kudu掃描表的時候會過濾掉不滿足條件的行

3.分區(qū)設計

  • 不允許更改創(chuàng)建后的分區(qū)表,但可以添加或刪除range分區(qū)
  • 分區(qū)方式:hash分區(qū),range分區(qū)以及組合分區(qū)
  • 根據自身業(yè)務場景,選擇合適的分區(qū)方式,讓讀與寫操作在所有tablet server上均勻分布
  • 根據應用查詢的語句,設計合理的主鍵以及分區(qū),保證讀取數(shù)據時掃描最小的數(shù)據集
  • 分區(qū)數(shù)量的設置,根據官方文檔,每個分區(qū)的大小盡量控制在4G左右(單個tablet server最大存儲8T/管理的tablets數(shù)量最大2000個≈4G),如果表數(shù)據量未來估算在40G左右,那么分區(qū)數(shù)量可以設置10個

Impala與Kudu Client場景選擇最佳實踐

  • 就查詢來說,Impala的查詢速度要快于Kudu Client的scan數(shù)據掃描,建議使用Impala
  • KuduClient原聲API中update/delete/upsert只能根據主鍵操作,如果需要其他條件則需要查詢一下,拿到主鍵再進行操作,所以不如impala寫sql方便,如果同時使用impala和kuduclient最好做資源隔離

Kudu API性能優(yōu)化

  • 盡量采用MANUAL_FLUSH,性能最好,如果有寫入Kudu錯誤,flush()函數(shù)會拋出異常
  • 在性能要求不高的情況下,AUTO_FLUSH_SYNC也是一個很好的選擇
  • 僅僅在測試環(huán)境下使用 AUTO_FLUSH_BACKGROUND, 不考慮異常處理時候代碼可以很簡單, 性能也很好. 在生產環(huán)境下不推薦使用的原因是: 插入數(shù)據可能會是亂序的, 一旦考慮捕獲異常代碼就很冗長

踩坑記錄

  • 時鐘服務NTP配置不合理,會導致Kudu服務直接崩潰,建議根據官方的推薦來配置NTP,另外可以通過修改參數(shù)max_clock_sync_error_usec值,來提高Kudu對時間偏差的容忍程度
  • 在Impala中對Kudu表進行alter table A rename to B,只會更改impala的元數(shù)據,而不會更改任何Kudu的元數(shù)據,可以通過先修改Impala元數(shù)據alter table A rename to B 后,再修改Kudu元數(shù)據alter table A set TBLPROPERTIES(’kudu.table_name’=’B’)
  • 沒有rebalance功能,需要手動做balance
  • 在Kudu1.6.0之前,如果tablet server的某個磁盤壞了,那么整個tablet server就要重新format了,如果你的集群版本大于等于1.6.0并且損壞的盤并非WAL/Meta盤,那么你可以通過kusu fs update_dirs
  • 關于range分區(qū)踩坑:一
    kudu表信息.png

    再看一下設置range分區(qū)信息,注意這里只設置了aa-cc的range分區(qū)
    range分區(qū)信息

接著再看一下源表的數(shù)據量和部分數(shù)據


原始數(shù)據.png
原始數(shù)據信息.png

最后看看落盤到kudu表里的信息

落盤數(shù)據.png

總結:range分區(qū)沒有覆蓋的數(shù)據不會落盤到kudu表中,且kudu表在upsert時根據主鍵自動判斷是update操作還是insert操作,主鍵重復的數(shù)據進行update操作

  • 關于range分區(qū)踩坑:二
    第二個場景是關于分區(qū)的數(shù)據類型對應關系的小坑,先看一下設置的分區(qū)信息
int分區(qū).png

理論上這樣分區(qū)已經對id數(shù)據進行了全覆蓋,但是實際上落盤數(shù)據為0.

2019-08-31_104627.png

總結:在做數(shù)據導入時,主鍵的數(shù)據類型要一一對應,若數(shù)據類型不對應,數(shù)據無法落盤(oracle的number類型進行數(shù)據類型匹配時要特別注意)

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 平靜地享受著冬天的陽光 溫暖 和諧 安靜 忘卻來往的行人 忘卻身旁的嘈雜 忘卻周圍的一切 以及他們共同的狗 周圍的...
    彭淞2024閱讀 234評論 0 5
  • 刺激,目標,改變,提升,收獲; 新的刺激,目標..........
    187b49ed9d99閱讀 85評論 1 0
  • A state of anarchy exists when a country has no effective...
    Alexandear閱讀 1,213評論 0 3
  • 大學里的老師總得來說比中學要更有趣些,大抵怎么有趣法,不過就是他們喜歡吹水。把自己的閱歷經歷加一點名人名言...
    狄金森閱讀 254評論 0 0
  • 兒子問我,為什么有人覺得月亮是奶酪做的啊?我說人們其實有兩個世界,一個是現(xiàn)實的世界,一個是想象的世界。在想象的世界...
    Alpha_Omega閱讀 446評論 0 0

友情鏈接更多精彩內容