hbase存儲層級和構架

HBase –Hadoop Database,是一個高可靠性、高性能、面向列邪财、可伸縮的分布式存儲系統(tǒng),利用HBase技術可在廉價PC Server上搭建起大規(guī)模結構化存儲集群质欲。


hbase_architecture.jpg

HBase訪問接口

  • Native Java API树埠,最常規(guī)和高效的訪問方式,適合Hadoop MapReduce Job并行批處理HBase表數(shù)據(jù)
  • HBase Shell嘶伟,HBase的命令行工具怎憋,最簡單的接口,適合HBase管理使用
  • Thrift Gateway奋早,利用Thrift序列化技術盛霎,支持C++,PHP耽装,Python等多種語言,適合其他異構系統(tǒng)在線訪問HBase表數(shù)據(jù)
  • REST Gateway期揪,支持REST 風格的Http API訪問HBase, 解除了語言限制
  • Pig掉奄,可以使用Pig Latin流式編程語言來操作HBase中的數(shù)據(jù)丸升,和Hive類似瘾晃,本質(zhì)最終也是編譯成MapReduce Job來處理HBase表數(shù)據(jù),適合做數(shù)據(jù)統(tǒng)計
  • Hive,當前Hive的Release版本尚沒有加入對HBase的支持蛮位,但在下一個版本Hive 0.7.0中將會支持HBase,可以使用類似SQL語言來訪問HBase Phoenix

HBase數(shù)據(jù)模型

  1. Table & Column Family


    hbase_table.png
  • Row Key 行鍵
    與nosql數(shù)據(jù)庫一樣,row key是用來表示唯一一行記錄的主鍵价淌,HBase的數(shù)據(jù)時按照RowKey的字典順序進行全局排序的淤齐,所有的查詢都只能依賴于這一個排序維度。訪問HBASE table中的行涣狗,只有三種方式:
    • 通過單個row key訪問谍婉;
    • 通過row key的range(正則)
    • 全表掃描
  • Timestamp: 時間戳,每次數(shù)據(jù)操作對應的時間戳镀钓,可以看作是數(shù)據(jù)的version number
  • Columns Family 列族
    列簇:HBASE表中的每個列穗熬,都歸屬于某個列族。列族是表的schema的一部分(而列不是)丁溅,必須在使用表之前定義唤蔗。列名都以列族作為前綴。例如courses:history窟赏,courses:math 都屬于courses這個列族
  • Cell:由{row key妓柜,columnFamily,version} 唯一確定的單元涯穷。cell中的數(shù)據(jù)是沒有類型的棍掐,全部是字節(jié)碼形式存儲。關鍵字:無類型求豫、字節(jié)碼
  • Time Stamp 時間戳
    HBASE中通過rowkey和columns確定的為一個存儲單元稱為cell塌衰。每個cell都保存著同一份數(shù)據(jù)的多個版本。版本通過時間戳來索引蝠嘉。

所以之間的關系是:

  • 表是行的集合最疆。
  • 行是列族的集合。
  • 列族是列的集合蚤告。
  • 列是鍵值對的集合努酸。
  1. Table & Region

當Table隨著記錄數(shù)不斷增加而變大后,會逐漸分裂成多份splits杜恰,成為regions获诈,一個region由[startkey,endkey)表示,不同的region會被Master分配給相應的RegionServer進行管理心褐。

hbase_region_all.png

HRegionServer是HBase中最核心的模塊舔涎,主要負責響應用戶I/O請求,向HDFS文件系統(tǒng)中讀寫

table在行的方向上分隔為多個Region逗爹。Region是HBase中分布式存儲和負載均衡的最小單元亡嫌,即不同的region可以分別在不同的Region Server上,但同一個Region是不會拆分到多個server上。
Region按大小分隔挟冠,每個表一般是只有一個region于购。隨著數(shù)據(jù)不斷插入表,region不斷增大知染,當region的某個列族達到一個閥值(默認256M)時就會分成兩個新的region肋僧。

每個region由以下信息標識:

  • <表名,startRowKey控淡,創(chuàng)建時間>
  • 由目錄表(-ROOT-和.META.)記錄該region的endRowKey
  • HRegion定位:Region被分配給哪個RegionServer是完全動態(tài)的嫌吠,所以需要機制來定位Region具體在哪個region server。

所以之間的關系是:

  • HRegionServer管理一系列HRegion對象:
  • 每個HRegion對應Table中一個Region逸寓,HRegion由多個HStore組成居兆;
  • 每個HStore對應Table中一個Column Family的存儲;
  • Column Family就是一個集中的存儲單元竹伸,故將具有相同IO特性的Column放在一個Column Family會更高效泥栖。
  • HBase使用三層結構來定位region
    • 通過zookeeper里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一個region
    • 通過-ROOT-表查找.META.表的第一個表中相應的region的位置勋篓。其實-ROOT-表是.META.表的第一個region吧享;.META.表中的每一個region在-ROOT-表中都是一行記錄
    • 通過.META.表找到所要的用戶表region的位置。用戶表中的每個region在.META表中都是一行記錄
  1. 其他概念:

    • HStore : HBase存儲的核心譬嚣。由MemStore和StoreFile組成钢颂。MemStore是Stored Memory Buffer

    • HLog : 引入HLog原因:在分布式系統(tǒng)環(huán)境中,無法避免系統(tǒng)出錯或者宕機拜银,一旦HRegionServer意外退出殊鞭,MemStore中的內(nèi)存數(shù)據(jù)就會丟失,引入HLog就是防止這種情況

    • HLog工作機制:
      每個HRegionServer中都會有一個HLog對象尼桶,HLog是一個實現(xiàn)Write Ahead Log的類操灿,每次用戶操作寫入MemStore的同時,也會寫一份數(shù)據(jù)到HLog文件泵督,HLog文件定期會滾動出新趾盐,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))。當HRegionServer意外終止后小腊,HMaster會通過Zookeeper感知救鲤,HMaster首先處理遺留的HLog文件,將不同region的log數(shù)據(jù)拆分秩冈,分別放到相應region目錄下本缠,然后再將失效的region重新分配,領取到這些region的HRegionServer在Load Region的過程中入问,會發(fā)現(xiàn)有歷史HLog需要處理搓茬,因此會Replay HLog中的數(shù)據(jù)到MemStore中犹赖,然后flush到StoreFiles队他,完成數(shù)據(jù)恢復

    • HMaster :
      HBase可以啟動多個HMaster卷仑,通過Zookeeper的Master Election機制保證總有一個Master在運行
      主要負責Table和Region的管理工作:
      管理用戶對表的增刪改查操作
      管理HRegionServer的負載均衡,調(diào)整Region分布Region Split后麸折,負責新Region的分布
      在HRegionServer停機后锡凝,負責失效HRegionServer上Region遷移

HBase的存儲格式

HBase中的所有數(shù)據(jù)文件都存儲在Hadoop HDFS文件系統(tǒng)上,格式主要有兩種:

  1. HFile垢啼,HBase中Key-Value數(shù)據(jù)的存儲格式窜锯,HFile是Hadoop的二進制格式文件,實際上StoreFile就是對HFile做了輕量級包裝芭析,即StoreFile底層就是HFile锚扎。
  2. HLog File,HBase中WAL(Write Ahead Log)的存儲格式馁启,物理上是Hadoop的Sequence File
hfile.jpg

HFile文件不定長驾孔,長度固定的塊只有兩個:Trailer和FileInfo
Trailer中指針指向其他數(shù)據(jù)塊的起始點
File Info中記錄了文件的一些Meta信息,例如:AVG_KEY_LEN, AVG_VALUE_LEN, LAST_KEY, COMPARATOR, MAX_SEQ_ID_KEY等
Data Index和Meta Index塊記錄了每個Data塊和Meta塊的起始點
Data Block是HBase I/O的基本單元惯疙,為了提高效率翠勉,HRegionServer中有基于LRU的Block Cache機制
每個Data塊的大小可以在創(chuàng)建一個Table的時候通過參數(shù)指定,大號的Block有利于順序Scan霉颠,小號Block利于隨機查詢
每個Data塊除了開頭的Magic以外就是一個個KeyValue對拼接而成, Magic內(nèi)容就是一些隨機數(shù)字对碌,目的是防止數(shù)據(jù)損壞
HFile里面的每個KeyValue對就是一個簡單的byte數(shù)組。這個byte數(shù)組里面包含了很多項蒿偎,并且有固定的結構

hfile_data.jpg

KeyLength和ValueLength:兩個固定的長度朽们,分別代表Key和Value的長度
Key部分:Row Length是固定長度的數(shù)值,表示RowKey的長度诉位,Row 就是RowKey
Column Family Length是固定長度的數(shù)值骑脱,表示Family的長度
接著就是Column Family,再接著是Qualifier不从,然后是兩個固定長度的數(shù)值惜姐,表示Time Stamp和Key Type(Put/Delete)
Value部分沒有這么復雜的結構,就是純粹的二進制數(shù)據(jù)

更多內(nèi)容https://blue-shadow.top

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末椿息,一起剝皮案震驚了整個濱河市歹袁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌寝优,老刑警劉巖条舔,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異乏矾,居然都是意外死亡孟抗,警方通過查閱死者的電腦和手機迁杨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來凄硼,“玉大人铅协,你說我怎么就攤上這事√粒” “怎么了狐史?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長说墨。 經(jīng)常有香客問我骏全,道長,這世上最難降的妖魔是什么尼斧? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任姜贡,我火速辦了婚禮,結果婚禮上棺棵,老公的妹妹穿的比我還像新娘楼咳。我一直安慰自己,他們只是感情好律秃,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布爬橡。 她就那樣靜靜地躺著,像睡著了一般棒动。 火紅的嫁衣襯著肌膚如雪糙申。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天船惨,我揣著相機與錄音柜裸,去河邊找鬼。 笑死粱锐,一個胖子當著我的面吹牛疙挺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播怜浅,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼铐然,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了恶座?” 一聲冷哼從身側(cè)響起搀暑,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎跨琳,沒想到半個月后自点,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡脉让,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年桂敛,在試婚紗的時候發(fā)現(xiàn)自己被綠了功炮。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡术唬,死狀恐怖薪伏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情碴开,我是刑警寧澤毅该,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站潦牛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏挡育。R本人自食惡果不足惜巴碗,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望即寒。 院中可真熱鬧橡淆,春花似錦、人聲如沸母赵。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽凹嘲。三九已至师倔,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間周蹭,已是汗流浹背趋艘。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留凶朗,地道東北人瓷胧。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像棚愤,于是被迫代替她去往敵國和親搓萧。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344