您好,登錄后才能下訂單哦!
HBase是一個分布式的、面向列的開源數(shù)據(jù)庫,該技術來源于 Fay Chang 所撰寫的Google論文“Bigtable:一個結(jié)構化數(shù)據(jù)的分布式存儲系統(tǒng)”。就像Bigtable利用了Google文件系統(tǒng)(File System)所提供的分布式數(shù)據(jù)存儲一樣,HBase在Hadoop之上提供了類似于Bigtable的能力。HBase是Apache的Hadoop項目的子項目。HBase不同于一般的關系數(shù)據(jù)庫,它是一個適合于非結(jié)構化數(shù)據(jù)存儲的數(shù)據(jù)庫。另一個不同的是HBase基于列的而不是基于行的模式。
一、Hbase獲取查詢條件結(jié)果的過程
1、兩張?zhí)厥獗恚?/span>-ROOT- & .META.
.META. 記錄用戶表的Region信息,同時,.META.也可以有多個region
-ROOT- 記錄.META.表的Region信息,但是,-ROOT-只有一個region
Zookeeper 中記錄了-ROOT-表的location
2、客戶端訪問數(shù)據(jù)的流程:
Client -> Zookeeper -> -ROOT- -> .META. -> 用戶數(shù)據(jù)表
3、多次網(wǎng)絡操作,不過client端有cache緩存
二、Hbase架構
組成部件說明
1、Client:
使用HBase RPC機制與HMaster和HRegionServer進行通信
Client與HMaster進行通信進行管理類操作
Client與HRegionServer進行數(shù)據(jù)讀寫類操作
2、Zookeeper:
Zookeeper Quorum存儲-ROOT-表地址、HMaster地址
HRegionServer把自己以Ephedral方式注冊到Zookeeper中,HMaster隨時感知各個HRegionServer的健康狀況
Zookeeper避免HMaster單點問題
3、HMaster:
HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master在運行,主要負責Table和Region的管理工作:
3.1 管理用戶對表的增刪改查操作
3.2 管理HRegionServer的負載均衡,調(diào)整Region分布
3.3 Region Split后,負責新Region的分布
3.4 在HRegionServer停機后,負責失效HRegionServer上Region遷移
4、HRegionServer:
HBase中最核心的模塊,主要負責響應用戶I/O請求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù)。
任何一項新技術并非救命稻草,一抹一擦立馬藥到病除的百寶箱,并非使用Spring或者NOSQL的產(chǎn)品就神乎其神+五光十色,如果那樣基本是扯淡。同類型產(chǎn)品中不管那種技術最終要達到的目的是一樣的,通過新的技術手段你往往可能避諱了當前你所需要面對的問題,但過后新的問題又來了。也許回過頭來看看還不如在原來的基礎上多動動腦筋想想辦法做些改良可以得到更高的回報。
傳統(tǒng)數(shù)據(jù)庫是以數(shù)據(jù)塊來存儲數(shù)據(jù),簡單來說,你的表字段越多,占用的數(shù)據(jù)空間就越多,那么查詢有可能就要跨數(shù)據(jù)塊,將會導致查詢的速度變慢。在大型系統(tǒng)中一張表上百個字段,并且表中的數(shù)據(jù)上億條這是完全是有可能的。因此會帶來數(shù)據(jù)庫查詢的瓶頸。我們都知道一個常識數(shù)據(jù)庫中表記錄的多少對查詢的性能有非常大的影響,此時你很有可能想到分表、分庫的做法來分載數(shù)據(jù)庫運算的壓力,那么又會帶來新的問題,例如:分布式事務、全局唯一ID的生成、跨數(shù)據(jù)庫查詢等,依舊會讓你面對棘手的問題。如果打破這種按照行存儲的模式,采用一種基于列存儲的模式,對于大規(guī)模數(shù)據(jù)場景這樣情況有可能發(fā)生一些好轉(zhuǎn)。由于查詢中的選擇規(guī)則是通過列來定義的,因此整個數(shù)據(jù)庫是自動索引化的。按列存儲每個字段的數(shù)據(jù)聚集存儲,可以動態(tài)增加,并且列為空就不存儲數(shù)據(jù),節(jié)省存儲空間。每個字段的數(shù)據(jù)按照聚集存儲,能大大減少讀取的數(shù)據(jù)量,查詢時指哪打哪,來的更直接。無需考慮分庫、分表 Hbase將對存儲的數(shù)據(jù)自動切分數(shù)據(jù),并支持高并發(fā)讀寫操作,使得海量數(shù)據(jù)存儲自動具有更強的擴展性。Java中的HashMap是Key/Value的結(jié)構,你也可以把HBase的數(shù)據(jù)結(jié)構看做是一個Key/Value的體系,話說HBase的區(qū)域由表名和行界定的。在HBase區(qū)域每一個"列族"都由一個名為HStore的對象管理。每個HStore由一個或多個MapFiles(Hadoop中的一個文件類型)組成。MapFiles的概念類似于Google的SSTable。 在Hbase里面有以下兩個主要的概念,Row key 和 Column Family,其次是Cell qualifier和Timestamp tuple,Column family我們通常稱之為“列族”,訪問控制、磁盤和內(nèi)存的使用統(tǒng)計都是在列族層面進行的。列族Column family是之前預先定義好的數(shù)據(jù)模型,每一個Column Family都可以根據(jù)“限定符”有多個column。在HBase每個cell存儲單元對同一份數(shù)據(jù)有多個版本,根據(jù)唯一的時間戳來區(qū)分每個版本之間的差異,最新的數(shù)據(jù)版本排在最前面 。
以上為Hbase的基本需要掌握的知識點。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。