?
?
不多說,直接上干貨!
?
?
?Kudu1.1.0
新特性
?
- python API升級,具備JAVA C++client一樣的功能(從0.3版本直接升級到1.1),主要的點如下:?
1.1. 改進了Parial Row的語義?
1.2. 增加了range partition支持?
1.3. 提供了 scan api?
1.4. 增強predicate支持?
1.5. 支持所有kudu的類型,包括datetime.datetime轉化成UNIXTIME_MICROS?
1.6. 支持修改表(alter)?
1.7. scanner可以讀取快照數據?
1.8. 支持scanner副本選擇?
1.9. python?
1.10. 一些bug的修復 - 為了優化過濾,增加了IN LIST predicate pushdown的支持(即匹配一列中一個集合的數據,predicate push down類似于hbase的協處理器coprocessors),有些過濾在后臺執行。spark、mr和impala query的此項功能還沒有完成。?
為了便于查錯,Java client增加了client-side請求追蹤。原先只有最終的錯誤日志,沒有導致最終錯誤其他日志信息。
優化和改進
?
- kudu發布了spark2.0(編譯于scala2.11)的JAR。
- 通過配置java client可以從最近的副本讀取數據,而不是原先的從leader副本讀取數據。不過默認還是后者,可以通過設置scanner builder replicaSelection參數來調整。
- Tablet server采用一種新策略來維護write-ahead log(WAL)。原先使用log_min_segments_to_retain=2的策略,這種策略會過于頻繁flush內存數據,限制了寫入的性能。新策略引入了一個新的參數log_target_replay_size_mb,它決定了flush內存數據的閥值,而且這個參數值已經經過實驗驗證,用戶不需要去修改它。這個新策略在某些寫入用例下,提升了相對2x倍的寫入性能。
- kudu Raft consensus algorithm 算法加入了一個新的階段pre-election,它可以在高負荷的情況下,更穩定的進行leader選舉,特別在一個tabletserver含有大量的tablet的情況下。
- 提升了在tabletserver含有大量的tombstoned tablet時,tabletserver的啟動的速度。
工具
?
- kudu tablet leader_step_down,step down一個leader tablet。
- kudu remote_replica copy拷貝tablet從一個running tabletserver。
- kudu local_replica delet刪除tablet。
- kudu test loadgen
?
兼容性
?
- 1.1的client可以連接到1.0的kudu服務。
- 1.0的client可以無限制的連接到1.1kudu服務。
- 滾動升級從1.0到1.1是可能的,但是沒有完整的測試。建議安裝關閉所有節點,更新版本,啟動更新的節點的步驟來升級。
?
參考
?
https://github.com/cloudera/kudu/blob/master/docs/prior_release_notes.adoc?
個人github?https://github.com/qiulp/doc/edit/master/kudu/kudu1.1.0.md
?
?
?
?
?
Kudu1.2.0
新特性
- kudu clients和servers可以編輯用戶的數據,例如log信息,java的異常信息和狀態信息。但用戶的元數據是不可編輯的,例如表名,字段名,分區邊界。默認是可編輯的,但可以通過設置log_redact_user_data=false關閉。
-
kudu一致性保證的能力大幅度提升了:?
每個副本都會track它們的 safe timestamp,這個時間戳是最大時間戳,在這個時間戳上讀是可重復的。SCAN_AT_SNAPSHOT模式的scan,要不等待本副本的snapshot safe后再查,要不路由到一個safe的副本查。如此保證數據scan是可重復的。
Kudu會保留以往所有歷史數據,無論是插入,還是刪除,還是相同key插入一條新的數據。以往版本的kudu不會保留歷史數據在這種情況下。如此tablet server可以得到歷史某一時間段點的準確的快照,即便是重新插入的情形。
kudu client會自動記住它們最近成功讀取或者寫入操作的時間戳。在使用READ_AT_SNAPSHOT模式,且沒有指定時間戳的情況下,scan會自動指定一個比最近寫入時間戳大的時間戳。寫入同樣會傳播timestamp,確認一系列的有因果關系的操作,能被指定有序的時間戳。總的來說,這個改變,可以保證數據的讀寫一致性,同樣保證了在其他clients上的快照查詢能等到一致的結果。
- kuduserver自動限制了log文件數量,默認是10個,通過參數max_log_files設置。
?
優化和改進
- java和c++client的日志將會變得更平和,不在記錄正常操作的日志,而記錄error日志。
- c++client提供一個KuduSession::SetErrorBufferSpace API,通過它可以限制同步操作異常的buffer大小。
- java client可以獲取tablet地址信息1000個一個批次(原先是10)。如此可以提升spark或者impala查詢具有大量tablets的表性能。
- kudu master表元數據信息的鎖競爭大幅度緩解。如此提升了在大集群環境下尋址(tablet)的高并發度。
- tablet server端的高并發寫的鎖競爭同樣被緩解了。
- 寫日志的鎖競爭也被緩解。
?
修復的bug
- KUDU-1508,ext4file的文件系統損壞。
- KUDU-1399,實現LRU cache解決長時間運行的kudu機器openfiles不夠的問題。默認kudu會使用ulimit的一半的量。?
省略
?
兼容性
- 1.2.0與歷史版本兼容
- 1.2client可以了解1.0server,只是有些沒有的功能不可用。
- 1.0cleint可以連接1.2,沒有任何限制。
- 滾動升級從1.0到1.1是可能的,但是沒有完整的測試。建議安裝關閉所有節點,更新版本,啟動更新的節點的步驟來升級。
?
?
不可兼容變化
- 副本因子最大值改成7,并且副本不能是偶數。
- 不提供GROUP_VARINT無損壓縮算法。
?
?
約束性
- 列數,建議不超過300列,建議列數越少越好。
- cell大小,不能大于64KB,不然寫入時client有error信息。
- 有效標識符,表名列名嚴格要求是UTF-8,且不能超過256個字符。
引用
https://github.com/cloudera/kudu/blob/master/docs/release_notes.adoc?
我的github?https://github.com/qiulp/doc/blob/master/kudu/kudu1.2.0.md
?
?
?
?
?
?
Kudu1.3.0
新特性
-
增加了kerberos安全認證,可以通過kerberos tickets或者keytabs文件認證。此新特性是個可選項,推薦在部署環境中增加安全機制。
-
增加了Transport Layer Security(TLS)網絡安全傳輸協議,kudu將會對任意client和server間的信息通信進行加密。默認加密是開啟的,無論client或者server端都可以決定是否啟用加密。
-
增加了粗粒度服務級別的授權。細粒度的授權,例如表級別、字段級別,暫不支持。
-
增加了清理過期歷史版本數據(超過保留時間)的后臺任務。減少磁盤空間的使用,特別是有頻繁更新的數據。
-
便于診斷錯誤,集成了Google Breakpad,它產生的reports可以在配置的日志文件夾中看到。
?
優化
-
修改了數據目錄和數據文件的權限,可以通過–umask配置。升級之后文件權限會更加嚴格。
-
Web UI 去除了一些用戶的敏感信息,例如查詢時的predicate values。
-
默認kudu對配置的磁盤預留1%空間,當磁盤空閑空間不足1%時,為避免完全寫滿磁盤,會停止寫入數據。
-
數字列(int float double)默認編碼BIT_SHUFFLE,binary string類型的變成DICT_ENCODING。此類編碼存儲機制類似于parquet。
-
WAL使用LZ4壓縮,提升寫入性能和穩定性。
-
Delta file使用LZ4壓縮,可以提高讀和寫,特別是頻繁更新的可壓縮數據。
-
Kudu API在查詢時支持IS NULL 和 IS NOT NULL(KuduPredicate.newIsNotNullPredicate)的pridicate,spark datasource集成可以利用這些新的predicate。
-
C++ 和 Java client “in partitions”的查詢有優化。
-
Java client的異常信息被截斷成最大的32KB。
?
兼容性
-
Kudu 1.3 可連接kudu1.0 server,調用新特性時會報錯。
-
kudu 1.1 可連接kudu1.3 server,但當集群配置了安全認證,將會報錯。
-
從1.2滾動升級到1.3沒有被充分驗證。建議使用者關閉整個集群,升級版本,然后重啟新版本,通過這種方式來升級。
-
升級后,如果1.3版本設置了安全認證(authentication or encryption set to “required”),老版本的client將不能連接服務。
-
升級后,如果1.3版本沒有設置安全認證(set to “optional” or “disabled”),老版本的client還能繼續連接server。
?
不可兼容變化
-
因為存儲格式變化,1.3版本將不能降級到老版本。
-
為了在配置了安全的集群上跑mr或者spark任務,需要提供認證憑證。
?
引用
https://github.com/cloudera/kudu/blob/master/docs/release_notes.adoc?
個人github?https://github.com/qiulp/doc/edit/master/kudu/kudu1.3.0.md
?