目錄
一隘击、HBase存儲結(jié)構(gòu)詳解
二侍芝、HBase寫流程
三、HBase讀流程
Hbase是bigtable的開源山寨版本埋同。是建立的hdfs之上竭贩,提供高可靠性、高性能莺禁、列存儲、可伸縮窄赋、實時讀寫的數(shù)據(jù)庫系統(tǒng)哟冬。
它介于nosql和RDBMS之間,僅能通過主鍵(row key)和主鍵的range來檢索數(shù)據(jù)忆绰,僅支持單行事務(wù)(可通過hive支持來實現(xiàn)多表join等復(fù)雜操作)浩峡。主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。
與hadoop一樣错敢,Hbase目標主要依靠橫向擴展翰灾,通過不斷增加廉價的商用服務(wù)器缕粹,來增加計算和存儲能力。
HBase 中的表一般有這樣的特點:
1纸淮、大:一個表可以有上十億行平斩,上百萬列;
2咽块、面向列:面向列(族)的存儲和權(quán)限控制绘面,列(族)獨立檢索侈沪;
3揭璃、稀疏:對于為空(null)的列,并不占用存儲空間亭罪,因此瘦馍,表可以設(shè)計的非常稀疏。
一应役、HBase儲存結(jié)構(gòu)詳解
目錄
1.1情组、HDFS
1.2、HMaster
1.3扛吞、HRegionServer
1.4呻惕、HRegion
1.4.1、Region/Store/StoreFile/Hfile之間的關(guān)系
從上面的架構(gòu)圖可以看出HBase是建立在hadoop之上的,HBase底層依賴于HDFS滥比。HBase有3個重要的組件:Zookeeper亚脆、HMaster、HRegionServer盲泛。
Zookeeper為整個HBase集群提供協(xié)助的服務(wù)濒持,HMaster主要用于監(jiān)控和操作集群的所有RegionServer。RegionServer主要用于服務(wù)和管理分區(qū)(Regions)
1.1寺滚、HDFS
HBase底層依賴于HDFS的
1.2柑营、HMaster
HMaster是HBase集群架構(gòu)中的主節(jié)點,通常一個HBase集群存在多個HMaster節(jié)點,其中一個為Active Master,其余為Backup Master村视。
Hbase每時每刻只有一個HMaster主服務(wù)器程序在運行官套,HMaster將region分配給HRegionServer,協(xié)調(diào)HRegionServer的負載并維護集群的狀態(tài)蚁孔。Hmaster不會對外提供數(shù)據(jù)服務(wù)奶赔,而是由HRegionServer負責所有regions的讀寫請求及操作。
由于HMaster只維護表和region的元數(shù)據(jù)杠氢,負責Region的分配及數(shù)據(jù)庫的創(chuàng)建和刪除等操作而不參與數(shù)據(jù)的輸入/輸出過程站刑,HMaster失效僅僅會導(dǎo)致所有的元數(shù)據(jù)無法被修改,但表的數(shù)據(jù)讀/寫還是可以正常進行的鼻百。
備注:region,HRegionServer職責與功能下面內(nèi)容中會講解
1.2.1HMaster的作用:
A绞旅、調(diào)控Region server的工作
為Region server分配region,
負責HRegionServer的負載均衡,,
監(jiān)控集群中的Region server的工作狀態(tài), 發(fā)現(xiàn)失效的HRegionServer并重新分配其上的Hregion(通過監(jiān)聽zookeeper對于ephemeral node狀態(tài)的通知)摆尝。
備注:
HRegion,習(xí)慣把它稱為region,表的意思
HRegionServer,習(xí)慣把它稱為Region server,HRegionServer是HBase集群架構(gòu)中的從節(jié)點
B、管理數(shù)據(jù)庫
提供創(chuàng)建因悲,刪除或者更新表格的接口堕汞。
1.3、HRegionServer
HRegionServer是HBase集群架構(gòu)中的從節(jié)點囤捻,HBase中的表是根據(jù)row key的值水平分割成所謂的region的臼朗。一個region包含表中所有row key位于region的起始鍵值和結(jié)束鍵值之間的行。
集群中負責管理Region的結(jié)點叫做Region server蝎土。Region server負責數(shù)據(jù)的讀寫视哑。每一個Region server大約可以管理1000個region。
備注:HRegionServer,習(xí)慣把它稱為Region server,HRegionServer是HBase集群架構(gòu)中的從節(jié)點誊涯。(一些文章寫的是Region server挡毅、一些寫的是HRegionServer,兩個意思都是一樣的)
1.3.1暴构、HRegionServer由如下幾個部分組成
一個HRegionServer會有多個HRegion和一個HLog跪呈。
HLog:預(yù)寫入日志,防止內(nèi)存中數(shù)據(jù)丟失
HRegion:表,一個HRegionServer可以維護多個HRegion(習(xí)慣稱為一個Region Server可以維護多個Region)
1.3.2取逾、HRegionServer的職責
維護HMaster分配給它的HRegion耗绿,處理對這些HRegion的IO請求,也就是說客戶端直接和HRegionServer打交道砾隅。
參考文章:HBase深入分析之RegionServerhttps
1.4误阻、HRegion
概述
Region是HBase數(shù)據(jù)管理的基本單位,每個HRegion由多個Store構(gòu)成晴埂,每個Store保存一個列族(Columns Family)究反,表有幾個列族,則有幾個Store儒洛,每個Store由一個MemStore和多個StoreFile組成精耐,MemStore是Store在內(nèi)存中的內(nèi)容,寫到文件后就是StoreFile琅锻,StoreFile底層是以HFile的格式保存卦停。
Region相當于數(shù)據(jù)庫中的表
1.4.1、Region/Store/StoreFile/Hfile之間的關(guān)系
以下內(nèi)容轉(zhuǎn)載自文章:Hbase中Region/Store/StoreFile/Hfile之間的關(guān)系 恼蓬,這篇文章寫的超級好沫浆,擔心原文刪除,將文章內(nèi)容摘錄到本篇文章滚秩。
1.4.1.1、 Region
table在行的方向上分隔為多個Region淮捆。Region是HBase中分布式存儲和負載均衡的最小單元郁油,即不同的region可以分別在不同的Region Server上本股,但同一個Region是不會拆分到多個server上。
Region按大小分隔桐腌,表中每一行只能屬于一個region拄显。隨著數(shù)據(jù)不斷插入表,region不斷增大案站,當region的某個列族達到一個閾值(默認256M)時就會分成兩個新的region躬审。
1.4.1.2、 Store
每一個region有一個或多個store組成蟆盐,至少是一個store承边,hbase會把一起訪問的數(shù)據(jù)放在一個store里面,即為每個ColumnFamily建一個store(即有幾個ColumnFamily石挂,也就有幾個Store)博助。一個Store由一個memStore和0或多個StoreFile組成。
HBase以store的大小來判斷是否需要切分region痹愚。
store的數(shù)據(jù)存儲在兩個地方MemStore和StoreFile
1.4.1.3富岳、 MemStore
寫緩存,memStore 是放在內(nèi)存里的拯腮。由于 HFile 中的數(shù)據(jù)要求是有序的窖式,所以數(shù)據(jù)是先存儲在 MemStore 中,排好序后动壤,等到達刷寫時機才會刷寫到 HFile(當memStore的大小達到一個閥值【默認64MB】時萝喘,memStore會被flush到文件)
,每次刷寫都會形成一個新的 HFile狼电。
1.4.1.4蜒灰、StoreFile
memStore內(nèi)存中的數(shù)據(jù)寫到文件后就是StoreFile(即memstore的每次flush操作都會生成一個新的StoreFile),StoreFile底層是以HFile的格式保存肩碟。
1.4.1.5强窖、HFile
HFile是HBase中KeyValue數(shù)據(jù)的存儲格式,是hadoop的二進制格式文件削祈。一個StoreFile對應(yīng)著一個HFile翅溺。而HFile是存儲在HDFS之上的。
二髓抑、HBase寫流程
1咙崎、客戶端先訪問zookeeper,獲取Meta表位于那個region server
2吨拍、訪問Meta表對應(yīng)的region server服務(wù)器褪猛,根據(jù)請求的信息(namespace:table/rowkey)
,在meta表中查詢出目標數(shù)據(jù)位于哪個region server的哪個region中。
并將該表的region信息以及meta表的位置信息緩存到客戶端的meta cache羹饰,方便下次訪問伊滋。
3碳却、與目標數(shù)據(jù)的region server進行通訊
4、將數(shù)據(jù)寫入到WAL中
5笑旺、將數(shù)據(jù)寫入到對應(yīng)的memstore中昼浦,
6、向客戶端發(fā)送寫入成功的信息
7筒主、等達到memstore的刷寫時機后关噪,將數(shù)據(jù)刷寫到HFILE中
參考文章:查看hbase:meta 表位于哪個 Region Server
三、HBase讀流程
1乌妙、Client客戶端先訪問zookeeper,獲取 hbase:meta 表位于哪個Region Server
2使兔、訪問hbase:meta 表對應(yīng)的region server服務(wù)器,根據(jù)請求的信息(namespace,table,rowkey)
冠胯,查詢出目標表位于哪個Region Server中的哪個region火诸。
并將該表的region信息,以及meta表的位置信息緩存在客戶端的緩存中荠察,以便下次訪問置蜀。
3、與目標表所在的region server 進行通訊
4悉盆、分別在Block Cache(讀緩存)盯荤,MemStore和 Store File查詢目標數(shù)據(jù),并將查到的數(shù)據(jù)進行合并焕盟,此處所有數(shù)據(jù)是指同一條數(shù)據(jù)的不同版本(time stamp)或者不同的類型(Put/Delete)
5秋秤、 將從文件中查詢到的數(shù)據(jù)塊緩存到block cache
6、 將合并后的數(shù)據(jù)返回給客戶端