HBase寫性能初步測試
背景
剛接觸HBase,在本機上對線下HBase集群做了初步的寫性能測試,下麵對測試內容做詳細說明。
說明
HBase環境
0.96版本,8台region server,默認配置
寫數據說明
單column family,兩個column qualifier的值為字符串+隨機8位正整數,Row Key為兩個quailifer值相連後串上隨機Long
比如:val1 = dd1977285, val2 =cc6549921, rowkey = rondom.nextLong() + val1 + val2
測試涵蓋到的維度
單線程、多線程比較
Rowkey不hash、Rowkey MD5 Hash (hash後每份rowkey等長,分發Region Server時隨機性更好)
單Put寫(每次Put一次RPC)、批量寫(帶write buffer的刷寫)
批量寫情況下write buffer的大小設置
測試未涵蓋到的維度
WAL是開啟的(線上應用不推薦關閉WAL來換取寫速度)
備份數沒有改(3份)
每台Region Server的RPC handler數目沒有設定(本次單機測試中,RPC響應肯定不會是瓶頸)
沒有使用壓縮(數據量小)
沒有比較ColumnQualifier數目增長
關於Region Server更多的係統設置都是默認的(請求數分布、region文件塊大小設置及Compaction影響、Split文件數閥值等等)
結果
測試結果比較:
總結
批量寫性能提升不少
線上應用最好是禁用buffer刷寫功能的,即每一個Put一次RPC寫,不過看到這種情況下寫速度慢,考慮到機器、網絡環境的差別的話,估計能上1K
啟用buffer刷寫功能的話,要避免未flush的put記錄丟失。(HTable在close的時候最後是會自動flush,我們在寫服務節點故障的時候也需要flush一次)
Rowkey哈希後性能有小量提升
Rowkey Hash之後對寫性能的確有小量提升,但如果要基於rowkey做範圍查找的話,rowkey可能不適合hash,具體看業務場景再考慮。
單線程每秒上萬行寫能力
本機上單線程在開啟writerbuffer刷寫後,每秒寫行數輕鬆上萬。多線程下,本機上每個線程最多到每秒7K行的速度,相信考慮到機器、網絡環境的差別的話,也能上萬。
並發寫能力樂觀
本機沒有模擬到多個節點上百線程的並發寫場景,不過根據前一點看的話,還是樂觀的,而且本次測試的集群級別的設置都是默認的,集群規模也一般,有很多集群級別的優化手段。
等項目開發到一定階段時候,會測試多節點上百線程並發寫的場景,且根據對HBase逐步的了解,之後會有更多經驗,相關測試報告再詳細產出,這份初步的測試就大致先了解下。
全文完 :)
最後更新:2017-04-03 07:57:02