您好,登錄后才能下訂單哦!
這篇文章主要講解了“hbase快速入門知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“hbase快速入門知識(shí)點(diǎn)有哪些”吧!
Apache HBase是Hadoop數(shù)據(jù)庫,一個(gè)分布式的、可伸縮的大數(shù)據(jù)存儲(chǔ)。
當(dāng)您需要對(duì)大數(shù)據(jù)進(jìn)行隨機(jī)的、實(shí)時(shí)的讀/寫訪問時(shí),請(qǐng)使用Apache HBase。這個(gè)項(xiàng)目的目標(biāo)是在商品硬件的集群上托管非常大的表——數(shù)十億行百萬列的列。Apache HBase是一個(gè)開源的、分布式的、版本化的、非關(guān)系的數(shù)據(jù)庫,它模仿了Google的Bigtable:一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng),就像Bigtable利用Google文件系統(tǒng)提供的分布式數(shù)據(jù)存儲(chǔ)一樣,Apache HBase在Hadoop和HDFS上提供了類似于bigtable的功能
大:一個(gè)表可以有數(shù)十億行,上百萬列;
無模式:每行都有一個(gè)可排序的主鍵和任意多的列,列可以根據(jù)需要?jiǎng)討B(tài)的增加,同一張表中不同的行可以有截然不同的列;
面向列:面向列(族)的存儲(chǔ)和權(quán)限控制,列(族)獨(dú)立檢索;
稀疏:對(duì)于空(null)的列,并不占用存儲(chǔ)空間,表可以設(shè)計(jì)的非常稀疏;
數(shù)據(jù)多版本:每個(gè)單元中的數(shù)據(jù)可以有多個(gè)版本,默認(rèn)情況下版本號(hào)自動(dòng)分配,是單元格插入時(shí)的時(shí)間戳;
數(shù)據(jù)類型單一:Hbase中的數(shù)據(jù)都是字符串,沒有類型。
傳統(tǒng)行式數(shù)據(jù)庫:
數(shù)據(jù)是按行存儲(chǔ)的
沒有索引的查詢使用大量I/O
建立索引和物化視圖需要花費(fèi)大量時(shí)間和資源
面向查詢的需求,數(shù)據(jù)庫必須被大量膨脹才能滿足性能要求
列式數(shù)據(jù)庫:
數(shù)據(jù)是按列存儲(chǔ)-每一列單獨(dú)存放
數(shù)據(jù)即是索引
指訪問查詢涉及的列-大量降低系統(tǒng)I/O
每一列由一個(gè)線索來處理-查詢的并發(fā)處理
數(shù)據(jù)類型一致,數(shù)據(jù)特征相似-高效壓縮
兩者都具有良好的容錯(cuò)性和擴(kuò)展性,都可以擴(kuò)展到成百上千個(gè)節(jié)點(diǎn);
HDFS適合批處理場(chǎng)景
不支持?jǐn)?shù)據(jù)隨機(jī)查找
不適合增量數(shù)據(jù)處理
不支持?jǐn)?shù)據(jù)更新
HBase Client使用HBase的RPC機(jī)制與HMaster和HRegionServer進(jìn)行通信,對(duì)于管理類操作,Client與HMaster進(jìn)行RPC;對(duì)于數(shù)據(jù)讀寫類操作,Client與HRegionServer進(jìn)行RPC。
Zookeeper Quorum中除了存儲(chǔ)了-ROOT-表的地址和HMaster的地址,HRegionServer也會(huì)把自己以Ephemeral方式注冊(cè)到 Zookeeper中,使得HMaster可以隨時(shí)感知到各個(gè)HRegionServer的健康狀態(tài)。此外,Zookeeper也避免了HMaster的單點(diǎn)問題。
管理用戶對(duì)Table的增、刪、改、查操作;
管理HRegion Server的負(fù)載均衡,調(diào)整Region分布;
在Region Split后,負(fù)責(zé)新Region的分配;
在HRegion Server停機(jī)后,負(fù)責(zé)失效HRegion Server 上的Regions遷移。
當(dāng)表的大小超過設(shè)置值的時(shí)候,HBase會(huì)自動(dòng)地將表劃分為不同的區(qū)域,每個(gè)區(qū)域包含所有行的一個(gè)子集。對(duì)用戶來說,每個(gè)表是一堆數(shù)據(jù)的集合,靠主鍵來區(qū)分。從物理上來說,一張表被拆分成了多塊,每一塊就是一個(gè)Region。我們用表名+開始/結(jié)束主鍵,來區(qū)分每一個(gè)Region,一個(gè)Region會(huì)保存一個(gè)表里面某段連續(xù)的數(shù)據(jù),從開始主鍵到結(jié)束主鍵,一張完整的表格是保存在多個(gè)Region上面。
所有的數(shù)據(jù)庫數(shù)據(jù)一般是保存在Hadoop HDFS分布式文件系統(tǒng)上面,用戶通過一系列HRegion Server獲取這些數(shù)據(jù),一臺(tái)機(jī)器上面一般只運(yùn)行一個(gè)HRegion Server,且每一個(gè)區(qū)段的HRegion也只會(huì)被一個(gè)HRegion Server維護(hù)。下面是HRegion Server數(shù)據(jù)存儲(chǔ)關(guān)系圖。
HRegion Server主要負(fù)責(zé)響應(yīng)用戶I/O請(qǐng)求,向HDFS文件系統(tǒng)中讀寫數(shù)據(jù),是HBase中最核心的模塊。
HRegion Server內(nèi)部管理了一系列HRegion對(duì)象,每個(gè)HRegion對(duì)應(yīng)了Table中的一個(gè)Region,Region中由多個(gè)Store組成。每個(gè)Store對(duì)應(yīng)了Table中的一個(gè)Column Family的存儲(chǔ),可以看出每個(gè)Column Family其實(shí)就是一個(gè)集中的存儲(chǔ)單元,因此最好將具備共同IO特性的column放在一個(gè)Column Family中,這樣最高效。
Store存儲(chǔ)是HBase存儲(chǔ)的核心了,其中由兩部分組成,一部分是MemStore,一部分是StoreFiles。MemStore是Sorted Memory Buffer,用戶寫入的數(shù)據(jù)首先會(huì)放入MemStore,當(dāng)MemStore滿了以后會(huì)Flush成一個(gè)StoreFile(底層實(shí)現(xiàn)是HFile), 當(dāng)StoreFile文件數(shù)量增長(zhǎng)到一定閾值,會(huì)觸發(fā)Compact合并操作,將多個(gè)StoreFiles合并成一個(gè)StoreFile,合并過程中會(huì)進(jìn)行版本合并和數(shù)據(jù)刪除,因此可以看出HBase其實(shí)只有增加數(shù)據(jù),所有的更新和刪除操作都是在后續(xù)的compact過程中進(jìn)行的,這使得用戶的寫操作只要進(jìn)入內(nèi)存中就可以立即返回,保證了HBase I/O的高性能。當(dāng)StoreFiles Compact后,會(huì)逐步形成越來越大的StoreFile,當(dāng)單個(gè)StoreFile大小超過一定閾值后,會(huì)觸發(fā)Split操作,同時(shí)把當(dāng)前Region Split成2個(gè)Region,父Region會(huì)下線,新Split出的2個(gè)孩子Region會(huì)被HMaster分配到相應(yīng)的HRegionServer 上,使得原先1個(gè)Region的壓力得以分流到2個(gè)Region上。下圖描述了Compaction和Split的過程。
圖 Compaction和Split的過程
在理解了上述HStore的基本原理后,還必須了解一下HLog的功能,因?yàn)樯鲜龅腍Store在系統(tǒng)正常工作的前提下是沒有問題的,但是在分布式系統(tǒng)環(huán)境中,無法避免系統(tǒng)出錯(cuò)或者宕機(jī),因此一旦HRegion Server意外退出,MemStore中的內(nèi)存數(shù)據(jù)將會(huì)丟失,這就需要引入HLog了。每個(gè)HRegion Server中都有一個(gè)HLog對(duì)象,HLog是一個(gè)實(shí)現(xiàn)Write Ahead Log的類,在每次用戶操作寫入MemStore的同時(shí),也會(huì)寫一份數(shù)據(jù)到HLog文件中(HLog文件格式見后續(xù)),HLog文件定期會(huì)滾動(dòng)出新的,并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))。當(dāng)HRegion Server意外終止后,HMaster會(huì)通過Zookeeper感知到,HMaster首先會(huì)處理遺留的 HLog文件,將其中不同Region的Log數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)region的目錄下,然后再將失效的region重新分配,領(lǐng)取到這些region的HRegion Server在Load Region的過程中,會(huì)發(fā)現(xiàn)有歷史HLog需要處理,因此會(huì)Replay HLog中的數(shù)據(jù)到MemStore中,然后flush到StoreFiles,完成數(shù)據(jù)恢復(fù)。
HBase中的所有數(shù)據(jù)文件都存儲(chǔ)在Hadoop HDFS文件系統(tǒng)上為例,主要包括上述提出的兩種文件類型:HFile, HBase中KeyValue數(shù)據(jù)的存儲(chǔ)格式,HFile是Hadoop的二進(jìn)制格式文件,實(shí)際上StoreFile就是對(duì)HFile做了輕量級(jí)包裝,即StoreFile底層就是HFile。HLog File,HBase中WAL(Write Ahead Log) 的存儲(chǔ)格式,物理上是Hadoop的Sequence File。
用戶表的Regions元數(shù)據(jù)被存儲(chǔ)在.META.表中,隨著Region的增多,.META.表中的數(shù)據(jù)也會(huì)增大,并分裂成多個(gè)Regions。為了定位.META.表中各個(gè)Regions的位置,把.META.表中所有Regions的元數(shù)據(jù)保存在-ROOT-表中,最后由ZooKeeper記錄-ROOT-表的位置信息。所有客戶端訪問用戶數(shù)據(jù)前,需要首先訪問ZooKeeper獲得-ROOT-的位置,然后訪問-ROOT-表獲得.META.表的位置,最后根據(jù).META.表中的信息確定用戶數(shù)據(jù)存放的位置,如下圖所示。
-ROOT-表永遠(yuǎn)不會(huì)被分割,它只有一個(gè)Region,這樣可以保證最多需要三次跳轉(zhuǎn)就可以定位任意一個(gè)Region。為了加快訪問速度,.META.表的Regions全部保存在內(nèi)存中??蛻舳藭?huì)將查詢過的位置信息緩存起來,且緩存不會(huì)主動(dòng)失效。如果客戶端根據(jù)緩存信息還訪問不到數(shù)據(jù),則詢問只有相關(guān).META.表的Region服務(wù)器,試圖獲取數(shù)據(jù)的位置,如果還是失敗,則詢問-ROOT-表相關(guān)的.META.表在哪里。最后,如果前面的信息全部失效,則通過ZooKeeper重新定位Region的信息。所以如果客戶端上的緩存全部是失效,則需要進(jìn)行6次網(wǎng)絡(luò)來回,才能定位到正確的Region。
在HBase系統(tǒng)上運(yùn)行批處理運(yùn)算,最方便和實(shí)用的模型依然是MapReduce,如下圖:
HBase Table和Region的關(guān)系,比較類似HDFS File和Block的關(guān)系,HBase提供了配套的TableInputFormat和TableOutputFormat API,可以方便的將HBase Table作為Hadoop MapReduce的Source和Sink,對(duì)于MapReduce Job應(yīng)用開發(fā)人員來說,基本不需要關(guān)注HBase系統(tǒng)自身的細(xì)節(jié)。
以關(guān)系型數(shù)據(jù)的思維下會(huì)感覺,上面的表格是一個(gè)5列4行的數(shù)據(jù)表格,但是在HBase中這種理解是錯(cuò)誤的,其實(shí)在HBase中上面的表格只是一行數(shù)據(jù);
– 決定一行數(shù)據(jù)的唯一標(biāo)識(shí)
– RowKey是按照字典順序排序的。
– Row key最多只能存儲(chǔ)64k的字節(jié)數(shù)據(jù)。
– HBase表中的每個(gè)列都?xì)w屬于某個(gè)列族,列族必須作為表模式(schema) 定義的一部分預(yù)先給出。如create ‘test’, ‘course’;
– 列名以列族作為前綴,每個(gè)“列族”都可以有多個(gè)列成員(column,每個(gè)列族中可以存放幾千~上千萬個(gè)列);如 CF1:q1, CF2:qw,
新的列族成員(列)可以隨后按需、動(dòng)態(tài)加入,F(xiàn)amily下面可以有多個(gè)Qualifier,所以可以簡(jiǎn)單的理解為,HBase中的列是二級(jí)列,
也就是說Family是第一級(jí)列,Qualifier是第二級(jí)列。兩個(gè)是父子關(guān)系。
– 權(quán)限控制、存儲(chǔ)以及調(diào)優(yōu)都是在列族層面進(jìn)行的;
– HBase把同一列族里面的數(shù)據(jù)存儲(chǔ)在同一目錄下,由幾個(gè)文件保存。
– 目前為止HBase的列族能能夠很好處理最多不超過3個(gè)列族。
– 在HBase每個(gè)cell存儲(chǔ)單元對(duì)同一份數(shù)據(jù)有多個(gè)版本,根據(jù)唯一的時(shí)間 戳來區(qū)分每個(gè)版本之間的差異,不同版本的數(shù)據(jù)按照時(shí)間倒序排序,
最新的數(shù)據(jù)版本排在最前面。
– 時(shí)間戳的類型是64位整型。
– 時(shí)間戳可以由HBase(在數(shù)據(jù)寫入時(shí)自動(dòng))賦值,此時(shí)時(shí)間戳是精確到毫 秒的當(dāng)前系統(tǒng)時(shí)間。
– 時(shí)間戳也可以由客戶顯式賦值,如果應(yīng)用程序要避免數(shù)據(jù)版本沖突, 就必須自己生成具有唯一性的時(shí)間戳。
– 由行和列的坐標(biāo)交叉決定;
– 單元格是有版本的(由時(shí)間戳來作為版本);
– 單元格的內(nèi)容是未解析的字節(jié)數(shù)組(Byte[]),cell中的數(shù)據(jù)是沒有類型的,全部是字節(jié)碼形式存貯。
? 由{row key,column(= +),version}唯一確定的單元。
–列族結(jié)構(gòu)經(jīng)常調(diào)整
–高并發(fā)寫入
–結(jié)構(gòu)化數(shù)據(jù)、半結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)
–Key-Value存儲(chǔ)
–有序存儲(chǔ)
–固定集合(多版本)
–定時(shí)刪除記錄(TTL)
感謝各位的閱讀,以上就是“hbase快速入門知識(shí)點(diǎn)有哪些”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對(duì)hbase快速入門知識(shí)點(diǎn)有哪些這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。