HBase 預(yù)分區(qū) & Phoenix 加鹽

HBase 熱點(diǎn)問題

剛創(chuàng)建 HBase 表的時候默認(rèn)只有一個 Region 由一個 Region Server 管理莹捡,在數(shù)據(jù)量達(dá)到一定值的時候會觸發(fā)分裂 split,這樣會不斷的分裂出更多的 Region,由不同的 Region Server 管理纲岭,每個 Region 管理的是一段連續(xù)的 row key晓淀,由 start row key 和 end row key 表示,這樣會有兩個問題

  1. 無法充分利用分布式并發(fā)處理的優(yōu)勢,必須等 Region 自動分裂成多個澈吨,這個過程可能會很久
  2. 由于每個 Region 管理一段連續(xù)的 row key把敢,這樣如果數(shù)據(jù)的讀寫不夠隨機(jī),比如有自增 ID谅辣,比如大量操作集中在某段 row key修赞,這樣有可能導(dǎo)致壓力都在同一個 Region 上

Region 分裂策略

定義在 hbase-site.xml 文件

<name>hbase.regionserver.region.split.policy</name>
<value>org.apache.hadoop.hbase.regionserver.IncreasingToUpperBoundRegionSplitPolicy</value>
<description>
  A split policy determines when a region should be split. The various other split policies that
  are available currently are ConstantSizeRegionSplitPolicy, DisabledRegionSplitPolicy,
  DelimitedKeyPrefixRegionSplitPolicy, KeyPrefixRegionSplitPolicy etc.
</description>

默認(rèn)策略是 IncreasingToUpperBoundRegionSplitPolicy,在 HBase 1.2 中桑阶,這個策略默認(rèn)表示柏副,當(dāng) Region 的大小達(dá)到 Region 個數(shù)的立方乘以 hbase.hregion.memstore.flush.size(默認(rèn) 128 MB)再乘以 2 ,或是達(dá)到 hbase.hregion.max.filesize (默認(rèn) 10 GB)時联逻,就對該 Region 做分裂

第一次分裂的大写瓿丁:1^3 * 128MB * 2 = 256MB
第二次分裂的大小:2^3 * 128MB * 2 = 2048MB
第三次分裂的大邪椤:3^3 * 128MB * 2 = 6912MB
第四次分裂的大邢峭啤:4^3 * 128MB * 2 = 16384MB,超過了 10GB公壤,因此只取 10GB
后面的分裂大小都是 10GB

可以看到如果可以利用的節(jié)點(diǎn)比較多的話换可,那么可能得等很久才能充分利用

預(yù)分區(qū)

第一種預(yù)分區(qū)的方法

hbase org.apache.hadoop.hbase.util.RegionSplitter tablename HexStringSplit -c 10 -f f1:f2:f3

上面的命令表示創(chuàng)建一張名為 tablename 的表,這張表預(yù)先分配了 10 個 Region厦幅,有三個 CF沾鳄,分別是 f1、f2确憨、f3译荞,預(yù)分區(qū)算法是 HexStringSplit,也可以選擇 UniformSplit休弃,其中 HexStringSplit 適合 row key 的前綴是十六進(jìn)制的字符串的吞歼,UniformSplit 適合 row key 前綴完全隨機(jī)的,預(yù)分區(qū)后塔猾,哪怕連續(xù)的 row key篙骡, HBase 也會通過算法將其分到不同的 Region,實(shí)現(xiàn)均勻分布丈甸,避免了熱點(diǎn)

第二種預(yù)分區(qū)的方法

hbase shell > create 'tablename', 'f1', SPLITS=> ['10', '20', '30', '40']

當(dāng)可以提前知道 row key 的分布的時候糯俗,可以指定每個預(yù)分區(qū)的 region 的分割點(diǎn),上面命令創(chuàng)建的表中睦擂,有 5 個 Region

Region 1 : row key 的前兩位是 min~10
Region 2 : row key 的前兩位是 10~20
Region 3 : row key 的前兩位是 20~30
Region 4 : row key 的前兩位是 30~40
Region 5 : row key 的前兩位是 40~max

注意這里不單指數(shù)字字符得湘,比如 1a 就會落在 Region 2


對已存在的表可以做強(qiáng)制分裂

hbase shell > split 'table', 'split point'


此外也可以設(shè)計(jì)自己的分裂方法

Phoenix 加鹽
CREATE TABLE IF NOT EXISTS Product (
    id           VARCHAR not null,
    time         VARCHAR not null,
    price        FLOAT,
    sale         INTEGER,
    inventory    INTEGER,

    CONSTRAINT pk PRIMARY KEY (id, time)
) COMPRESSION = 'GZ', SALT_BUCKETS = 6

本質(zhì)上是對 HBase 表的 row key 做了哈希后,對 SALT_BUCKETS 取余數(shù)祈匙,并將結(jié)果(上面的例子中是 0~5)作為 byte 插入到 row key 的第一位忽刽,根據(jù)這個數(shù)值將數(shù)據(jù)分到不同 Region 中天揖,由于是作為 byte 存儲,所以 SALT_BUCKETS 能取的最大值是 256跪帝,擁有相同 salt byte 的 row 會被分到相同的 region server今膊,所以通常取 region server 的數(shù)量作為 SALT_BUCKETS

由于加了鹽的數(shù)據(jù)最前面多了一位,這樣默認(rèn)情況下伞剑,從不同 region server 取出來的數(shù)據(jù)無法按原來的 row key 排序斑唬,如果需要保證排序,需要改一個配置

phoenix.query.force.rowkeyorder = true




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末黎泣,一起剝皮案震驚了整個濱河市恕刘,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌抒倚,老刑警劉巖褐着,帶你破解...
    沈念sama閱讀 212,383評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異托呕,居然都是意外死亡含蓉,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,522評論 3 385
  • 文/潘曉璐 我一進(jìn)店門项郊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馅扣,“玉大人,你說我怎么就攤上這事着降〔钣停” “怎么了?”我有些...
    開封第一講書人閱讀 157,852評論 0 348
  • 文/不壞的土叔 我叫張陵任洞,是天一觀的道長蓄喇。 經(jīng)常有香客問我,道長交掏,這世上最難降的妖魔是什么公罕? 我笑而不...
    開封第一講書人閱讀 56,621評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮耀销,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘铲汪。我一直安慰自己熊尉,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,741評論 6 386
  • 文/花漫 我一把揭開白布掌腰。 她就那樣靜靜地躺著狰住,像睡著了一般。 火紅的嫁衣襯著肌膚如雪齿梁。 梳的紋絲不亂的頭發(fā)上催植,一...
    開封第一講書人閱讀 49,929評論 1 290
  • 那天肮蛹,我揣著相機(jī)與錄音,去河邊找鬼创南。 笑死伦忠,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的稿辙。 我是一名探鬼主播昆码,決...
    沈念sama閱讀 39,076評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼邻储!你這毒婦竟也來了赋咽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,803評論 0 268
  • 序言:老撾萬榮一對情侶失蹤吨娜,失蹤者是張志新(化名)和其女友劉穎脓匿,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體宦赠,經(jīng)...
    沈念sama閱讀 44,265評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陪毡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,582評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了袱瓮。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缤骨。...
    茶點(diǎn)故事閱讀 38,716評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖尺借,靈堂內(nèi)的尸體忽然破棺而出绊起,到底是詐尸還是另有隱情,我是刑警寧澤燎斩,帶...
    沈念sama閱讀 34,395評論 4 333
  • 正文 年R本政府宣布虱歪,位于F島的核電站,受9級特大地震影響栅表,放射性物質(zhì)發(fā)生泄漏笋鄙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,039評論 3 316
  • 文/蒙蒙 一怪瓶、第九天 我趴在偏房一處隱蔽的房頂上張望萧落。 院中可真熱鬧,春花似錦洗贰、人聲如沸找岖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,798評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽许布。三九已至,卻和暖如春绎晃,著一層夾襖步出監(jiān)牢的瞬間蜜唾,已是汗流浹背杂曲。 一陣腳步聲響...
    開封第一講書人閱讀 32,027評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留袁余,地道東北人擎勘。 一個月前我還...
    沈念sama閱讀 46,488評論 2 361
  • 正文 我出身青樓,卻偏偏與公主長得像泌霍,于是被迫代替她去往敵國和親货抄。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,612評論 2 350

推薦閱讀更多精彩內(nèi)容