熱點問題的解決
首先要弄明白一點,regions的分割槽就是根據資料的rowkey處理的,而如果設計rowkey不合理,就會導致所有資料到乙個分割槽,或者並沒有很好地發揮預分割槽帶來的負載均衡作用,還是會發生資料傾斜。
hbase中還有乙個就是rowkey的熱點問題,因為rowkey是根據字典順序排序的,如果rowkey設計不合理,當大量的client訪問hbase集群的乙個或少數幾個節點,造成少數region server的讀/寫請求過多、負載過大,而其他region server負載卻很小,就造成了「熱點」現象。
熱點問題會造成熱點region所在的單個主機負載過大,引起效能下降甚至region不可用。
而熱點問題產生的原因一般是因為大量連續編號的rowkey,導致相近的記錄存在個別region中,當client檢索此類記錄時,可能只會呼叫個別region,大量訪問將會導致此region所在的主機過載。
下面就說一下rowkey設計的三個原則和熱點問題的解決辦法。
長度原則
1.rowkey是二進位製碼流,可以是任意字串,最大長度是64kb,實際應用一般為10-100 bytes,以byte形式儲存
2.所以rowkey不能設計得過長,否則會導致占用記憶體空間過大,限制就是上面提到的64kb
雜湊原則
1.一般建議將rowkey的高位設定為雜湊字段,由系統隨機生成什麼是高位?就是rowkey的前面幾個數字,如果前面幾個為雜湊字段,就大大降低了相似記錄和資料使用大量連續編號rowkey的問題
2.低位放時間字段,因為如果高位為時間字段,還是會導致熱點問題,解決熱點問題的核心就是不要讓所有相似資料集中在乙個regionserver上
唯一原則
很簡單,rowkey必須為唯一,因為如果出現重複的rowkey,最新儲存的會將之前相同rowkey的資料作一次更新替換 加鹽
通俗地說,就是在rowkey前面加隨機數,這樣能讓rowkey隨機生成分布到各個region上
比如現在又三條資料,1111,1112,1113,如果不對其做處理,那這三條資料都會傳送到同乙個region中,如果進行加鹽,變成了 2341_1111,4232_1112,6442_1113,這樣三條資料就會隨機分布 雜湊
雜湊會使同一行永遠用乙個字首加鹽。雜湊也可以使負載分散到整個集群,但是讀卻是可以**的。使用確定的雜湊可以讓客戶端重構完整的rowkey,可以使用get操作準確獲取某乙個行資料。 反轉
就是反轉固定長度或數字格式的rowkey,手機號就是最好的例子,因為我們知道同一運營商的後四位一般不會重複,而前三位會有大量重複,所以將其反轉就可以快速有效地得到隨機rowkey,但是這樣也犧牲了rowkey的有序性
時間戳反轉
乙個常見的資料處理問題是快速獲取資料的最近版本,使用反轉的時間戳作為rowkey的一部分對這個問題十分有用,可以用 long.max_value - timestamp 追加到key的末尾,例如 [key][reverse_timestamp] , [key] 的最新值可以通過scan [key]獲得[key]的第一條記錄,因為hbase中rowkey是有序的,第一條記錄是最後錄入的資料。
ibatis 快速上手
簡介 例子 現在我們我們通過乙個簡單的案例,了解如何通過ibatis解決資料訪問問題。現在有有乙個資料庫,資料庫裡面有一張人員資訊表 需求是這樣 通過乙個web應用程式顯示人員資訊表裡面的資訊,並且可以新增 修改 刪除人員記錄 乙個並不複雜的案例,但是它覆蓋所有開發首先要學習的內容。第1步 the ...
Pro C快速上手
條件 winxp vc 6 裝在c program files microsoft visual studio vc98 oracle 9 裝在e oracle ora90 步驟 1 dos視窗設定環境變數,預編譯 oralce 給的關於pro c 例子 2 設定vc 環境 3 編譯執行 c程式。具...
Apache James快速上手
2,配置 2.1,環境配置 apache james執行需要jvm,保證所在主機安裝jdk即可 2.2,埠配置 apache james 使用到的埠包括 pop3埠 110 smtp埠 25 2.3,啟動應用 配置完畢james後,就可以啟動了,啟動命令很簡單,只需要執行bin run.sh即可 也...