Kudu在使用過程中的各種限制

參考文章:Kudu在使用過程中的各種限制

主鍵

  • 表創建後,主鍵不能修改。必須刪除重建表指定新的主鍵。
  • 主鍵列必須在非主鍵列之前
  • 主鍵列的值不能使用UPDATE函數修改。如果要修改主鍵的值只能刪除該行重新插入。
  • DOUBLE、FLOAT或BOOL類型的列不能作爲主鍵,此外,主鍵列必須爲NOT NULL。
  • 不支持自動生成的主鍵(如自增列)
  • 組合主鍵的所有列在編碼後,大小不能大於16K

  • 不支持CHAR、VARCHAR、DATE和數組等複雜類型。
  • 不能通過ALTER TABLE更改現有列的類型和是否可爲空屬性
  • DECIMAL類型列的精度和規模不能通過ALTER TABLE進行修改(Kudu 1.7+才支持decimal類型)
  • 表最多可以有300列。

  • 表的副本數必須爲奇數,最多爲7。
  • 副本數在建表時指定,之後無法更改。

單元格

  • 單個單元格的值在編碼或壓縮前不能大於64KB。

其他使用限制

  • kudu主要是爲分析用例設計的,如果單行中包含多個千字節的單元格,則可能會遇到問題。
  • 不支持二級索引。
  • 不支持多行事物。
  • 不支持外鍵等關係特性。
  • 表名和列名必須爲有效的UTF-8字符串,最大長度爲256個字符。
  • 刪除列並不會立即釋放空間,compaction運行後纔會釋放。
  • 無法手動執行compaction,但是刪表會立即釋放空間。

分區限制

  • 表必須使用簡單或複合主鍵手動分區。目前不支持自動分區。
  • Range 分區可以在建表後添加或刪除。
  • 表中已有的數據無法重新自動分區。有一種解決方案,創建一個新表並制定新的分區,然後將舊錶的數據插入新表。
  • 失去大部分副本的tablet(比如三個副本中的一個)需要人工干預才能恢復。

集羣管理

  • 不支持機架感知。
  • 不支持多數據中心。
  • 不支持滾動重啓。

服務器管理

  • 生產部署時應該爲tablet server分配至少4G內存,在接近數據和tablet的限制時,最好配置大於16G的內存。
  • 預寫日誌(WAL)只能存儲在磁盤上。
  • 磁盤故障是無法容忍的,一旦檢測到磁盤故障,tablet server就會崩潰。
  • 無法恢復數據的磁盤需要格式化該tablet server的所有Kudu數據,然後才能重新啓動。
  • 無法添加或刪除數據目錄,必須對所有目錄進行重新格式化以更改目錄集。
  • Tablet servers不能優雅地退役。
  • 不能更改tablet servers的地址和端口。
  • Kudu對時鐘同步有嚴格的要求,一旦時鐘不同步,Kudu的master和tablet server就會崩潰。
  • Kudu發行版只在NTP中進行過測試,其他時鐘同步程序不保證能正常工作。

規模

  • 建議tablet server最多爲100臺。
  • 建議master最多爲3個。
  • 建議的最大數據存儲量爲,複製和壓縮後,每個tablet server 8TB。
  • 建議每個tablet server管理的tablet爲2000,包含tablet的副本。
  • 在創建表時,每個Tablet server的每個表的最大tablet數爲60。
    基於以上限制,可以推測出一下內容:
    Kudu中存儲的總數據量建議爲:tablet server總數
    單個tablet server的數據量=100*8TB=800TB,即Kudu不適用於存儲PB級數據。
    單個tablet的數據量建議爲:單個tablet server的數據量/每個tablet server中tablet的總數=8TB/2000=4G。Kudu支持的壓縮方式有LZ4, Snappy,或zlib。鑑於各種壓縮算法的壓縮比一般不超過50%,則每個tablet中的數據量在壓縮前的大小建議應小於2G。

複製和備份

  • kudu目前沒有任何內置備份和恢復功能。建議用戶在必要的時候使用spark或impala等工具導入或導出表。

其他已知的問題

  • 如果Kudu master配置了-log_force_fsync_all選項、 tablet servers和客戶端將經常超時,集羣可能變得不可用。
  • 如果一個tablet server 有大量的tablet,啓動可能需要幾分鐘。建議將每臺服務器的tablet數量限制在100或更少。在預拆分表時,請考慮這個限制。如果您注意到啓動時間較慢,您可以在web UI中監視每個服務器的tablet數量。
  • Kerberos身份驗證在主機名中包含大寫字母的主機上不能正常運行。
  • 如果在krb5.conf中配置rdns = false,Kerberos身份驗證將不能正常工作。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章