在大量客戶端請求訪問數據或者寫入數據的時候,只有少數幾個或者一個 RegionServer 做出響應,導致該服務器的負載過高,造成讀寫效率低下,而此時其他的服務器還是處于空閑的狀態,就是所謂“旱的旱死,澇的澇死”。那么為什么會造成這種情況,主要的原因就是數據分布不均勻,可能是數據量分布不均勻,也可能是冷熱數據分布不均勻。而糟糕的 RowKey 設計就是發生熱點即數據傾斜的源頭,所以這里會詳細說說HBase如何處理熱點數據問題。
加鹽
加鹽即在原本的 rowkey 前面加上隨機的一些值。 * 隨機數:在 RowKey 的前面增加隨機數來打散 RowKey 在 Region 的分布,但不是一種好的選擇,因為 HBase 的設計是只有 RowKey 是索引,RowKey 都變成隨機的了,讀數據只能做性能極低的全表掃描了??傊煌扑]。 * 哈希:哈希的方式明顯比隨機數更好,哈希會使同一行永遠用一個前綴加鹽。同樣可以起到打散 Rowkey 在 Region 的分布的目的,使負載分散到整個集群,最重要讀是可以預測的。使用確定的哈??梢宰尶蛻舳酥貥嬐暾?Rowkey,可以使用 Get 操作準確獲取某一個行數據。
反轉
* 反轉即把低位的隨機數反轉到高位。比如手機號碼或者時間戳的反轉,高位基本固定是 1 開頭的,而末位是隨機的。這種同樣是一種比較常規的構成散列的方式。
預分區
預分區上面已經提到過,這種方式對于處理數據量分布不均勻,和冷熱數據分布不均勻都是有一定效果的,但是需要對業務的應用場景做好準確的預判。
更多關于大數據培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。