HBase原理和設(shè)計

簡介

HBase —— Hadoop Database的簡稱缕减,Google BigTable的另一種開源實現(xiàn)方式乔宿,從問世之初祈秕,就為了解決用大量廉價的機器高速存取海量數(shù)據(jù)、實現(xiàn)數(shù)據(jù)分布式存儲提供可靠的方案倡蝙。從功能上來講九串,HBase不折不扣是一個數(shù)據(jù)庫,與我們熟悉的Oracle寺鸥、MySQL猪钮、MSSQL等一樣,對外提供數(shù)據(jù)的存儲和讀取服務(wù)胆建。而從應(yīng)用的角度來說烤低,HBase與一般的數(shù)據(jù)庫又有所區(qū)別,HBase本身的存取接口相當(dāng)簡單笆载,不支持復(fù)雜的數(shù)據(jù)存取扑馁,更不支持SQL等結(jié)構(gòu)化的查詢語言;HBase也沒有除了rowkey以外的索引凉驻,所有的數(shù)據(jù)分布和查詢都依賴rowkey腻要。所以,HBase在表的設(shè)計上會有很嚴(yán)格的要求涝登。架構(gòu)上雄家,HBase是分布式數(shù)據(jù)庫的典范,這點比較像MongoDB的sharding模式胀滚,能根據(jù)鍵值的大小趟济,把數(shù)據(jù)分布到不同的存儲節(jié)點上,MongoDB根據(jù)configserver來定位數(shù)據(jù)落在哪個分區(qū)上咽笼,HBase通過訪問Zookeeper來獲取-ROOT-表所在地址顷编,通過-ROOT-表得到相應(yīng).META.表信息,從而獲取數(shù)據(jù)存儲的region位置剑刑。

架構(gòu)

上面提到媳纬,HBase是一個分布式的架構(gòu),除去底層存儲的HDFS外施掏,HBase本身從功能上可以分為三塊:Zookeeper群层宫、Master群和RegionServer群。

  • Zookeeper群:HBase集群中不可缺少的重要部分其监,主要用于存儲Master地址、協(xié)調(diào)Master和RegionServer等上下線限匣、存儲臨時數(shù)據(jù)等等抖苦。
  • Master群:Master主要是做一些管理操作毁菱,如:region的分配,手動管理操作下發(fā)等等锌历,一般數(shù)據(jù)的讀寫操作并不需要經(jīng)過Master集群贮庞,所以Master一般不需要很高的配置即可。
  • RegionServer群:RegionServer群是真正數(shù)據(jù)存儲的地方究西,每個RegionServer由若干個region組成窗慎,而一個region維護了一定區(qū)間rowkey值的數(shù)據(jù),整個結(jié)構(gòu)如下圖:

上圖中卤材,Zookeeper(簡稱ZK)是一個集群遮斥,通常有奇數(shù)個ZK服務(wù)組成。Master為了服務(wù)可用性扇丛,也建議部署成集群方式术吗,因為 Master是整個管理操作的發(fā)起者,如果Master一旦發(fā)生意外停機帆精,整個集群將會無法進行管理操作较屿,所以Master也必須有多個,當(dāng)然多個 Master也有主從之分卓练,如何區(qū)分哪個是主隘蝎,哪個是從?關(guān)鍵看哪個Master能競爭到ZK上對應(yīng)Master目錄下的鎖襟企,持有該目錄鎖的Master 為主Master嘱么,其他從Master輪詢競爭該鎖,所以一旦主Master發(fā)生意外停機整吆,從Master很快會因為競爭到Master文件夾上的鎖而接管服務(wù)拱撵。

RegionServer(簡稱RS)在非Replication模式下,整個系統(tǒng)中都是唯一的表蝙,也就是說拴测,在整個非Replication的 HBase集群中,每臺RS上保存的數(shù)據(jù)都不一樣府蛇,所以相對于前面兩者集索,該模式下的RS并不是高可用的,至少RS可能存在單點故障的問題汇跨,但是由于 HBase內(nèi)部數(shù)據(jù)分region存儲和region可以遷移的機制务荆,RS服務(wù)的單點故障可能會在極小代價下很快恢復(fù),但是一旦停掉的RS上有 -ROOT-或者.META.表的region穷遂,那后果還是比較嚴(yán)重函匕,因為數(shù)據(jù)節(jié)點的RS停機,只會在短時間內(nèi)影響該臺RS上的region不可訪問蚪黑,等 到region遷移完成后即可恢復(fù)盅惜,如果是-ROOT-中剩、.META.所在的RS停機,整個HBase的新的求情都將受到影響抒寂,因為需要通過.META. 表來路由结啼,從而尋找到region所在RS的地址。

數(shù)據(jù)組織

整個架構(gòu)中屈芜,ZK用于服務(wù)協(xié)調(diào)和整個集群運行過程中部分信息的保存和-ROOT-表地址定位郊愧,Master用于集群內(nèi)部管理,所以剩下的RS主要用于處理數(shù)據(jù)井佑。

RS是處理數(shù)據(jù)的主要場所属铁,那么在RS內(nèi)部的數(shù)據(jù)是怎么分布的?其實RS本身只是一個容器毅糟,其定義了一些功能線程红选,比如:數(shù)據(jù)合并線程 (compact thread)、storeFile分割線程(split thread)等等姆另。容器中的主要對象就是region喇肋,region是一個表根據(jù)自身rowkey范圍劃分的一部分,一個表可以被劃分成若干部分迹辐,也就 是若干個region蝶防,region可以根據(jù)rowkey范圍不同而被分布在不同的RS上(當(dāng)然也可以在同一個RS上,但不建議這么做)明吩。一個RS上可以 包含多個表的region间学,也可以只包含一個表的部分region,RS和表是兩個不同的概念印荔。

這里還有一個概念——列簇低葫。對HBase有一些了解的人,或多或少聽說過:HBase是一個列式存儲的數(shù)據(jù)庫仍律,而這個列式存儲中的列嘿悬,其實是區(qū)別于 一般數(shù)據(jù)庫的列,這里的列的概念水泉,就是列簇善涨,列簇,顧名思義就是很多列的集合草则,而在數(shù)據(jù)存儲上來講钢拧,不同列簇的數(shù)據(jù),一定是分開存儲的炕横,即使是在同一個 region內(nèi)部源内,不同的列簇也存儲在不同的文件夾中,這樣做的好處是份殿,一般我們定義列簇的時候姿锭,通常會把類似的數(shù)據(jù)放入同一個列簇塔鳍,不同的列簇分開存 儲,有利于數(shù)據(jù)的壓縮呻此,并且HBase本身支持多種壓縮方式。

原理

前面介紹了HBase的一般架構(gòu)腔寡,我們知道了HBase有ZK焚鲜、Master和RS等組成,本節(jié)我們來介紹下HBase的基本原理放前,從數(shù)據(jù)訪問忿磅、RS路由到RS內(nèi)部緩存、數(shù)據(jù)存儲和刷寫再到region的合并和拆分等等功能凭语。

RegionServer定位

訪問HBase通過HBase客戶端(或API)進行葱她,整個HBase提供給外部的地址,其實是ZK的入口似扔,前面也介紹了吨些,ZK中有保存 -ROOT-所在的RS地址,從-ROOT-表可以獲取.META.表信息炒辉,根據(jù).META.表可以獲取region在RS上的分布豪墅,整個region尋 址過程大致如下:


  1. 首先,Client通過訪問ZK來請求目標(biāo)數(shù)據(jù)的地址黔寇。
  2. ZK中保存了-ROOT-表的地址偶器,所以ZK通過訪問-ROOT-表來請求數(shù)據(jù)地址。
  3. 同樣缝裤,-ROOT-表中保存的是.META.的信息屏轰,通過訪問.META.表來獲取具體的RS。
  4. .META.表查詢到具體RS信息后返回具體RS地址給Client憋飞。
  5. Client端獲取到目標(biāo)地址后霎苗,然后直接向該地址發(fā)送數(shù)據(jù)請求。

上述過程其實是一個三層索引結(jié)構(gòu)搀崭,從ZK獲取-ROOT-信息叨粘,再從-ROOT-獲取.META.表信息,最后從.META.表中查到RS地址后緩存瘤睹。這里有幾個問題:

  • 既然ZK中能保存-ROOT-信息升敲,那么為什么不把.META.信息直接保存在ZK中,而需要通過-ROOT-表來定位轰传?
  • Client查找到目標(biāo)地址后驴党,下一次請求還需要走ZK –> -ROOT- –>.META.這個流程么?
    第一個問題:為什么不直接把.META.表信息直接保存到ZK中获茬?主要是為了保存的數(shù)據(jù)量考慮港庄,ZK中不宜保存大量數(shù)據(jù)倔既,而.META.表 主要是保存Region和RS的映射信息,region的數(shù)量沒有具體約束鹏氧,只要在內(nèi)存允許的范圍內(nèi)渤涌,region數(shù)量可以有很多,如果保存在ZK 中把还,ZK的壓力會很大实蓬。所以,通過一個-ROOT-表來轉(zhuǎn)存到RS中是一個比較理想的方案吊履,相比直接保存在ZK中安皱,也就多了一層-ROOT-表的查詢,對 性能來說影響不大艇炎。
    第二個問題:每次訪問都需要走ZK –> -ROOT- —> .META.的流程么酌伊?當(dāng)然不需要,Client端有緩存缀踪,第一次查詢到相應(yīng)region所在RS后居砖,這個信息將被緩存到Client端,以后每次訪問都 直接從緩存中獲取RS地址即可辜贵。當(dāng)然這里有個意外:訪問的region若果在RS上發(fā)生了改變悯蝉,比如被balancer遷移到其他RS上了,這個時候托慨,通 過緩存的地址訪問會出現(xiàn)異常鼻由,在出現(xiàn)異常的情況下,Client需要重新走一遍上面的流程來獲取新的RS地址厚棵〗妒溃總體來說,region的變動只會在極少數(shù) 情況下發(fā)生婆硬,一般變動不會很大狠轻,所以在整個集群訪問過程中,影響可以忽略彬犯。

Region數(shù)據(jù)寫入

HBase通過ZK –> -ROOT- –>.META.的訪問獲取RS地址后向楼,直接向該RS上進行數(shù)據(jù)寫入操作,整個過程如下圖:


Client通過三層索引獲得RS的地址后谐区,即可向指定RS的對應(yīng)region進行數(shù)據(jù)寫入湖蜕,HBase的數(shù)據(jù)寫入采用WAL(write ahead log)的形式,先寫log宋列,后寫數(shù)據(jù)昭抒。HBase是一個append類型的數(shù)據(jù)庫,沒有關(guān)系型數(shù)據(jù)庫那么復(fù)雜的操作,所以記錄HLog的操作都是簡單的 put操作(delete/update操作都被轉(zhuǎn)化為put進行)

HLog

HLog寫入

HLog是HBase實現(xiàn)WAL方式產(chǎn)生的日志信息灭返,其內(nèi)部是一個簡單的順序日志盗迟,每個RS上的region都共享一個HLog,所有對于該RS上的 region數(shù)據(jù)寫入都被記錄到該HLog中熙含。HLog的主要作用就是在RS出現(xiàn)意外崩潰的時候罚缕,可以盡量多的恢復(fù)數(shù)據(jù),這里說是盡量多怎静,因為在一般情況 下怕磨,客戶端為了提高性能,會把HLog的auto flush關(guān)掉消约,這樣HLog日志的落盤全靠操作系統(tǒng)保證,如果出現(xiàn)意外崩潰员帮,短時間內(nèi)沒有被fsync的日志會被丟失或粮。

HLog過期

HLog的大量寫入會造成HLog占用存儲空間會越來越大,HBase通過HLog過期的方式進行HLog的清理捞高,每個RS內(nèi)部都有一個HLog監(jiān)控線程在運行氯材,其周期可以通過hbase.master.cleaner.interval進行配置。

HLog在數(shù)據(jù)從memstore flush到底層存儲上后硝岗,說明該段HLog已經(jīng)不再被需要氢哮,就會被移動到.oldlogs這個目錄下,HLog監(jiān)控線程監(jiān)控該目錄下的HLog型檀,當(dāng)該文 件夾下的HLog達到hbase.master.logcleaner.ttl設(shè)置的過期條件后冗尤,監(jiān)控線程立即刪除過期的HLog。

Memstore

數(shù)據(jù)存儲

memstore是region內(nèi)部緩存胀溺,其大小通過HBase參數(shù)hbase.hregion.memstore.flush.size進行配置裂七。RS在寫完HLog以后,數(shù)據(jù)寫入的下一個目標(biāo)就是region的memstore仓坞,memstore在HBase內(nèi)部通過LSM-tree結(jié)構(gòu)組織背零,所以能夠合并大量對于相同rowkey上的更新操作。
正是由于memstore的存在无埃,HBase的數(shù)據(jù)寫入都是異步的徙瓶,而且性能非常不錯,寫入到memstore后嫉称,該次寫入請求就可以被返回侦镇,HBase即認(rèn)為該次數(shù)據(jù)寫入成功。這里有一點需要說明澎埠,寫入到memstore中的數(shù)據(jù)都是預(yù)先按照rowkey的值進行排序的虽缕,這樣有利于后續(xù)數(shù)據(jù)查找。

數(shù)據(jù)刷盤

Memstore中的數(shù)據(jù)在一定條件下會進行刷寫操作,使數(shù)據(jù)持久化到相應(yīng)的存儲設(shè)備上氮趋,觸發(fā)memstore刷盤的操作有多種不同的方式如下圖:


以上1,2,3都可以觸發(fā)memstore的flush操作伍派,但是實現(xiàn)的方式不同:

  1. UpperLimit: 通過全局內(nèi)存控制,觸發(fā)memstore刷盤操作剩胁。
    在該種情況下诉植,RS中所有region的memstore內(nèi)存占用都沒達到刷盤條件,但整體的內(nèi)存消耗已經(jīng)到一個非常危險的范圍昵观,如果持續(xù)下去晾腔,很有可能造成RS的OOM,這個時候啊犬,需要進行memstore的刷盤,從而釋放內(nèi)存觉至。
    memstore整體內(nèi)存占用上限通過參數(shù)hbase.regionserver.global.memstore.upperLimit進行設(shè)置,當(dāng)然在達到上限后语御,memstore的刷寫也不是一直進行,在內(nèi)存下降到 hbase.regionserver.global.memstore.lowerLimit 配置的值后应闯,即停止memstore的刷盤操作。這樣做碉纺, 主要是為了防止長時間的memstore刷盤,會影響整體的性能惜辑。

  2. manual: 手動觸發(fā)memstore刷盤操作, HBase提供API接口唬涧,運行通過外部調(diào)用進行memstore的刷盤。

  3. MemSize: memstore上限觸發(fā)數(shù)據(jù)刷盤盛撑;前面提到memstore的大小通過hbase.hregion.memstore.flush.size進行設(shè)置碎节,當(dāng)region中memstore的數(shù)據(jù)量達到該值時,會自動觸發(fā)memstore的刷盤操作抵卫。

刷盤影響

memstore在不同的條件下會觸發(fā)數(shù)據(jù)刷盤狮荔,那么整個數(shù)據(jù)在刷盤過程中,對region的數(shù)據(jù)寫入等有什么影響介粘?
memstore的數(shù)據(jù)刷盤殖氏,對region的直接影響就是:在數(shù)據(jù)刷盤開始到結(jié)束這段時間內(nèi),該region上的訪問都是被拒絕的姻采,這里主要是因 為在數(shù)據(jù)刷盤結(jié)束時雅采,RS會對改region做一個snapshot,同時HLog做一個checkpoint操作,通知ZK哪些HLog可以被移 到.oldlogs下婚瓜。從前面圖上也可以看到宝鼓,在memstore寫盤開始,相應(yīng)region會被加上UpdateLock鎖巴刻,寫盤結(jié)束后該鎖被釋放愚铡。

StoreFile

memstore在觸發(fā)刷盤操作后會被寫入底層存儲,每次memstore的刷盤就會相應(yīng)生成一個存儲文件HFile胡陪,storeFile即HFile在HBase層的輕量級分裝沥寥。
數(shù)據(jù)量的持續(xù)寫入,造成memstore的頻繁flush柠座,每次flush都會產(chǎn)生一個HFile邑雅,這樣底層存儲設(shè)備上的HFile文件數(shù)量將會越 來越多。不管是HDFS還是Linux下常用的文件系統(tǒng)如Ext4妈经、XFS等蒂阱,對小而多的文件上的管理都沒有大文件來的有效,比如小文件打開需要消耗更多 的文件句柄狂塘;在大量小文件中進行指定rowkey數(shù)據(jù)的查詢性能沒有在少量大文件中查詢來的快等等。

Compact

大量HFile的產(chǎn)生鳄厌,會消耗更多的文件句柄荞胡,同時會造成RS在數(shù)據(jù)查詢等的效率大幅度下降,HBase為解決這個問題了嚎,引入了compact操作,RS通過compact把大量小的HFile進行文件合并歪泳,生成大的HFile文件呐伞。

RS上的compact根據(jù)功能的不同伶氢,可以分為兩種不同類型,即:minor compact和major compact蜗巧。

  • Minor Compact
    minor compact又叫small compact幕屹,在RS運行過程中會頻繁進行望拖,主要通過參數(shù)hbase.hstore.compactionThreshold進行控制,該參數(shù)配置了 HFile數(shù)量在滿足該值時沧烈,進行minor compact锌雀,minor compact只選取region下部分HFile進行compact操作腋逆,并且選取的HFile大小不能超過 hbase.hregion.max.filesize參數(shù)設(shè)置惩歉。

-- Major Compact
相反major compact也被稱之為large compact俏蛮,major compact會對整個region下相同列簇的所有HFile進行compact搏屑,也就是說major compact結(jié)束后,同一個列簇下的HFile會被合并成一個亮垫。major compact是一個比較長的過程饮潦,對底層I/O的壓力相對較大。

major compact除了合并HFile外壹瘟,另外一個重要功能就是清理過期或者被刪除的數(shù)據(jù)鳄逾。前面提到過雕凹,HBase的delete操作也是通過append的 方式寫入,一旦某些數(shù)據(jù)在HBase內(nèi)部被刪除了线欲,在內(nèi)部只是被簡單標(biāo)記為刪除李丰,真正在存儲層面沒有進行數(shù)據(jù)清理,只有通過major compact對HFile進行重組時舟舒,被標(biāo)記為刪除的數(shù)據(jù)才能被真正的清理秃励。

compact操作都有特定的線程進行夺鲜,一般情況下不會影響RS上數(shù)據(jù)寫入的性能币励,當(dāng)然也有例外:在compact操作速度跟不上region中 HFile增長速度時珊拼,為了安全考慮杆麸,RS會在HFile達到一定數(shù)量時昔头,對寫入進行鎖定操作揭斧,直到HFile通過compact降到一定的范圍內(nèi)才釋放 鎖讹开。

Split

compact將多個HFile合并單個HFile文件捐名,隨著數(shù)據(jù)量的不斷寫入镶蹋,單個HFile也會越來越大,大量小的HFile會影響數(shù)據(jù)查詢性 能淆两,大的HFile也會秋冰,HFile越大,相對的在HFile中搜索的指定rowkey的數(shù)據(jù)花的時間也就越長埃撵,HBase同樣提供了region的 split方案來解決大的HFile造成數(shù)據(jù)查詢時間過長問題盯另。

一個較大的region通過split操作鸳惯,會生成兩個小的region芝发,稱之為Daughter苛谷,一般Daughter中的數(shù)據(jù)是根據(jù)rowkey的之間點進行切分的腹殿,region的split過程大致如下圖:


  1. region先更改ZK中該region的狀態(tài)為SPLITING锣尉。
  2. Master檢測到region狀態(tài)改變。
  3. region會在存儲目錄下新建.split文件夾用于保存split后的daughter region信息坟奥。
  4. Parent region關(guān)閉數(shù)據(jù)寫入并觸發(fā)flush操作爱谁,保證所有寫入Parent region的數(shù)據(jù)都能持久化访敌。
  5. 在.split文件夾下新建兩個region捐顷,稱之為daughter A、daughter B废赞。
  6. Daughter A唉地、Daughter B拷貝到HBase根目錄下传透,形成兩個新的region朱盐。
  7. Parent region通知修改.META.表后下線兵琳,不再提供服務(wù)。
  8. Daughter A者春、Daughter B上線清女,開始向外提供服務(wù)。
  9. 如果開啟了balance_switch服務(wù)嫡丙,split后的region將會被重新分布。

上面1 ~ 9就是region split的整個過程拥刻,split過程非常快盼砍,速度基本會在秒級內(nèi)浇坐,那么在這么快的時間內(nèi)近刘,region中的數(shù)據(jù)怎么被重新組織的臀晃?

其實徽惋,split只是簡單的把region從邏輯上劃分成兩個险绘,并沒有涉及到底層數(shù)據(jù)的重組宦棺,split完成后代咸,Parent region并沒有被銷毀呐芥,只是被做下線處理慨默,不再對外部提供服務(wù)厦取。而新產(chǎn)生的region Daughter A和Daughter B虾攻,內(nèi)部的數(shù)據(jù)只是簡單的到Parent region數(shù)據(jù)的索引,Parent region數(shù)據(jù)的清理在Daughter A和Daughter B進行major compact以后奇钞,發(fā)現(xiàn)已經(jīng)沒有到其內(nèi)部數(shù)據(jù)的索引后漂坏,Parent region才會被真正的清理顶别。

HBase設(shè)計

HBase是一個分布式數(shù)據(jù)庫驯绎,其性能的好壞主要取決于內(nèi)部表的設(shè)計和資源的分配是否合理。

表的設(shè)計

Rowkey設(shè)計
rowkey是HBase實現(xiàn)分布式的基礎(chǔ)屈尼,HBase通過rowkey范圍劃分不同的region,分布式系統(tǒng)的基本要求就是在任何時候甲捏,系統(tǒng)的 訪問都不要出現(xiàn)明顯的熱點現(xiàn)象摊鸡,所以rowkey的設(shè)計至關(guān)重要蚕冬,一般我們建議rowkey的開始部分以hash或者MD5進行散列囤热,盡量做到 rowkey的頭部是均勻分布的。禁止采用時間锨苏、用戶id等明顯有分段現(xiàn)象的標(biāo)志直接當(dāng)作rowkey來使用伞租。

列簇設(shè)計
HBase的表設(shè)計時限佩,根據(jù)不同需求有不同選擇,需要做在線查詢的數(shù)據(jù)表作喘,盡量不要設(shè)計多個列簇泞坦,我們知道贰锁,不同的列簇在存儲上是被分開的滤蝠,多列簇設(shè)計會造成在數(shù)據(jù)查詢的時候讀取更多的文件几睛,從而消耗更多的I/O所森。

TTL設(shè)計
選擇合適的數(shù)據(jù)過期時間也是表設(shè)計中需要注意的一點,HBase中允許列簇定義數(shù)據(jù)過期時間纷妆,數(shù)據(jù)一旦超過過期時間掩幢,可以被major compact進行清理际邻。大量無用歷史數(shù)據(jù)的殘余世曾,會造成region體積增大谴咸,影響查詢效率。

Region設(shè)計

一般地血巍,region不宜設(shè)計成很大述寡,除非應(yīng)用對階段性性能要求很多辨赐,但是在將來運行一段時間可以接受停服處理京办。region過大會導(dǎo)致major compact調(diào)用的周期變長,而單次major compact的時間也相應(yīng)變長不恭。major compact對底層I/O會造成壓力换吧,長時間的compact操作可能會影響數(shù)據(jù)的flush沾瓦,compact的周期變長會導(dǎo)致許多刪除或者過期的數(shù)據(jù) 不能被及時清理,對數(shù)據(jù)的讀取速度等都有影響柱衔。

相反魂莫,小的region意味著major compact會相對頻繁耙考,但是由于region比較小倦始,major compact的相對時間較快山卦,而且相對較多的major compact操作炫狱,會加速過期數(shù)據(jù)的清理剔猿。

當(dāng)然归敬,小region的設(shè)計意味著更多的region split風(fēng)險汪茧,region容量過小舱污,在數(shù)據(jù)量達到上限后扩灯,region需要進行split來拆分珠插,其實split操作在整個HBase運行過程中,是 被不怎么希望出現(xiàn)的磨隘,因為一旦發(fā)生split番捂,涉及到數(shù)據(jù)的重組,region的再分配等一系列問題。所以我們在設(shè)計之初就需要考慮到這些問題膘流,盡量避免 region的運行過程中發(fā)生split耕魄。

HBase可以通過在表創(chuàng)建的時候進行region的預(yù)分配來解決運行過程中region的split產(chǎn)生彭谁,在表設(shè)計的時候缠局,預(yù)先分配足夠多的 region數(shù)读处,在region達到上限前唱矛,至少有部分?jǐn)?shù)據(jù)會過期罚舱,通過major compact進行清理后, region的數(shù)據(jù)量始終維持在一個平衡狀態(tài)绎谦。

region數(shù)量的設(shè)計還需要考慮內(nèi)存上的限制管闷,通過前面的介紹我們知道每個region都有memstore,memstore的數(shù)量與region數(shù)量和region下列簇的數(shù)量成正比:

一個RS下memstore內(nèi)存消耗:

Memory = memstore大小 * region數(shù)量 * 列簇數(shù)量

如果不進行前期數(shù)據(jù)量估算和region的預(yù)分配窃肠,通過不斷的split產(chǎn)生新的region包个,容易導(dǎo)致因為內(nèi)存不足而出現(xiàn)OOM現(xiàn)象。

轉(zhuǎn)載: https://blog.csdn.net/xgjianstart/article/details/53290155

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末冤留,一起剝皮案震驚了整個濱河市赃蛛,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌搀菩,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡奥秆,警方通過查閱死者的電腦和手機避矢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門箩绍,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事豆赏「Ц冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵亩冬,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己彤枢,他們只是感情好盟猖,可當(dāng)我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布歹茶。 她就那樣靜靜地躺著禽作,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茫负。 梳的紋絲不亂的頭發(fā)上潮尝,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天踢匣,我揣著相機與錄音,去河邊找鬼裸诽。 笑死,一個胖子當(dāng)著我的面吹牛槐脏,可吹牛的內(nèi)容都是我干的祖灰。 我是一名探鬼主播,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼么翰!你這毒婦竟也來了追迟?” 一聲冷哼從身側(cè)響起金闽,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎牙甫,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年秸应,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片胧辽。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡影锈,死狀恐怖佳晶,靈堂內(nèi)的尸體忽然破棺而出漩符,到底是詐尸還是另有隱情狐赡,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布苔咪,位于F島的核電站,受9級特大地震影響丝里,放射性物質(zhì)發(fā)生泄漏杯聚。R本人自食惡果不足惜傀广,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望畔勤。 院中可真熱鬧,春花似錦敦腔、人聲如沸均澳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽负懦。三九已至筒捺,卻和暖如春柏腻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背系吭。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工五嫂, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓沃缘,卻偏偏與公主長得像躯枢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子槐臀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,762評論 2 345

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

  • 比特科技: 存儲锄蹂、數(shù)據(jù)庫、大數(shù)據(jù)技術(shù) ? HBase原理和設(shè)計 http://www.bitstech.net/...
    葡萄喃喃囈語閱讀 725評論 0 11
  • 簡介 [HBase]——Hadoop Database的簡稱水慨,Google BigTable的另一種開源實現(xiàn)方式得糜,...
    高廣超閱讀 2,337評論 1 27
  • 最近在逐步跟進Hbase的相關(guān)工作,由于之前對Hbase并不怎么了解晰洒,因此系統(tǒng)地學(xué)習(xí)了下Hbase朝抖,為了加深對Hb...
    飛鴻無痕閱讀 50,181評論 19 271
  • HBase那些事 @(大數(shù)據(jù)工程學(xué)院)[HBase, Hadoop, 優(yōu)化, HadoopChen, hbase]...
    分癡閱讀 3,928評論 3 17
  • HBase存儲架構(gòu)圖 HBase Master 為Region server分配region 負責(zé)Region s...
    kimibob閱讀 5,564評論 0 52