天天看點

客快物流大資料項目(八十三):Kudu的優化

文章目錄

​​Kudu的優化​​

​​一、Kudu關鍵配置​​

​​二、Kudu的使用限制​​

​​1、主鍵​​

​​2、Cells​​

​​3、字段​​

​​4、表​​

​​5、其他限制​​

​​6、分區限制​​

​​7、擴充建議和限制​​

​​8、守護程序​​

​​9、叢集管理限制​​

​​10、複制和備份限制​​

​​11、Impala內建限制​​

​​12、Spark內建限制​​

Kudu的優化

一、Kudu關鍵配置

TabletServer 在開始拒絕所有傳入的寫入之前可以消耗的最大記憶體量:memory_limit_h

ard_bytes=1073741824

客快物流大資料項目(八十三):Kudu的優化

配置設定給 Kudu Tablet Server 塊緩存的最大記憶體量:block_cache_capacity_mb=512

客快物流大資料項目(八十三):Kudu的優化

二、Kudu的使用限制

1、主鍵

  • 建立表後,不能更改主鍵。必須删除并重新建立表以選擇新的主鍵。
  • 建立表的時候,主鍵必須放在最前邊。
  • 主鍵不能通過 update 更新,如果要修改主鍵就必須先删除行,然後重新插入。這種操作不是原子性的。(kudu的删除和插入操作無法事務)
  • 不支援自動生成主鍵,可以通過内置的 uuid 函數表示為主鍵值。
  • 聯合主鍵由 kudu 編碼後,大小不能超過 16KB。

2、Cells

3、字段

  • 預設情況下,Kudu 不允許建立超過 300 列的表。官方建議使用較少列的 Schema 設計以獲得最佳性能。
  • 不支援 CHAR、VARCHAR、DATE 和數組等複雜類型。
  • 現有列的類型和是否允許為空,一旦設定後,是不可修改的。
  • Decimal 類型的精度不可修改。也不允許通過更改表來更改 Decimal 列的精度和小數位數
  • 删除列不會立即回收空間。首先必須運作壓縮。

4、表

  • 表中的副本數必須為奇數,最多為 7
  • 複制因子(在表建立時設定)不能更改
  • 無法手動運作壓縮,但是删除表将立即回收空間

5、其他限制

  • 不支援二級索引。
  • 不支援多行事務。
  • 不支援外鍵。
  • 列名和表名之類的辨別符僅限于有效的 UTF-8 字元串并且其最大長度為 256 個字元。

6、分區限制

  • 表必須根據一個主鍵 or 聯合主鍵被預先切成 tablet,不支援自動切。表被建立後不支援修改分區字段,支援添加和删除 range 分區(意思分區表,分區字段需提前定義好,kudu 不會自動分)。
  • 已經存在的表不支援自動重新分區,隻能建立新表時指定。
  • 丢失副本時,必須通過手動修複方式來恢複。

7、擴充建議和限制

  • 建議 TabletServer 最多為 100 台。
  • 建議 Master 最多 3 台。
  • 建議每個 TabletServer 最大資料為 8T(壓縮後)。
  • 建議每台 TabletServer 的 tablet 數為 1000,最多 2000。
  • 建立表的時候,建議在每個 Tablet Server 上,每個表的 Tablet 數最大為 60,也就是 3 節點的話,3 副本,創表分區最大 60,這樣每個單 TabletServer 上該表的 Tablets 也就為 60。
  • 建議每個 Tablet 最大為 50GB,超出後可能導緻壓縮和啟動有問題。
  • 建議單 Tablet 的大小<10GB。

8、守護程序

  • 部署至少 4G 記憶體,理想情況下應超過 16GB。
  • 預寫日志(WAL)隻能存儲在一個磁盤上。
  • 不能直接删除資料目錄,必須使用重新格式化資料目錄的方式來達到删除目的。
  • TabletServer 不能修改 IP 和 PORT。
  • Kudu 對 NTP 有嚴格要求,如果時間不同步時,Kudu 的 Master 和 TabletServer 會崩潰。
  • Kudu 僅使用 NTP 進行了測試,不支援其他時間同步工具。

9、叢集管理限制

  • 不支援滾動重新開機。
  • 建議 Kudu 叢集中的最大點對點延遲為 20 毫秒。推薦的最小點對點帶寬是 10GB。
  • 如果要使用位置感覺功能将平闆伺服器放置在不同的位置,官方建議先測量伺服器之間的帶寬和延遲,以確定它們符合上述指導原則。
  • 首次啟動群集時,必須同時啟動所有 Master 服務。

10、複制和備份限制

  • Kudu 目前不支援任何用于備份和還原的内置功能。鼓勵使用者根據需要使用 Spark 或 Impala之類的工具導出或導入表。

11、Impala內建限制

  • 建立 Kudu 表時,建表語句中的主鍵字段必須在最前面。
  • Impala 無法更新主鍵列中的值。
  • Impala 無法使用以下指令建立 Kudu 表 VARCHAR 或嵌套類型的列。
  • 名稱包含大寫字母或非 ASCII 字元的 Kudu 表在 Impala 中用作外部表時,必須配置設定一個備用名稱。
  • 列名包含大寫字母或非 ASCII 字元的 Kudu 表不能用作 Impala 中的外部表。可以在 Kudu 中重命名列以解決此問題。
  • !=和 like 謂詞不會下推到 Kudu,而是由 Impala 掃描節點評估。相對于其他類型的謂語,這會導緻降低性能。
  • 使用 Impala 進行更新,插入和删除是非事務性的。如果查詢在部分途中失敗,則其部分效果不會復原。
  • 單個查詢的最大并行度受限于 Table 中 Tablet 的數量。為了獲得良好的分析性能,每位主機目标為 10 片或更多 tablets。
  • Impala 的關鍵字(PARTITIONED、LOCATION、ROWFORMAT)不适用于在建立 Kudu 表時使用。

12、Spark內建限制

  • 必須使用 JDK8,自 Kudu-1.5.0 起,Spark 2.2 是預設的依賴項版本。
  • Kudu 表隻能在 Spark SQL 中注冊為臨時表。
  • 無法使用 HiveContext 查詢 Kudu 表。
  • 📢部落格首頁
  • 📢歡迎點贊 👍 收藏 ⭐留言 📝 如有錯誤敬請指正!
  • 📢本文由 Lansonli 原創
  • 📢停下休息的時候不要忘了别人還在奔跑,希望大家抓緊時間學習,全力奔赴更美好的生活✨

繼續閱讀