溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

hbase快速入門知識(shí)點(diǎn)有哪些

發(fā)布時(shí)間:2021-12-09 11:56:27 來源:億速云 閱讀:159 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“hbase快速入門知識(shí)點(diǎn)有哪些”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“hbase快速入門知識(shí)點(diǎn)有哪些”吧!

1.Hbase是什么

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的功能

1).Hbase的特點(diǎn)

大:一個(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ù)都是字符串,沒有類型。

2).Hbase與關(guān)系型數(shù)據(jù)庫的對(duì)比

hbase快速入門知識(shí)點(diǎn)有哪些

傳統(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ù)特征相似-高效壓縮

3).Hbase與HDFS的對(duì)比

hbase快速入門知識(shí)點(diǎn)有哪些

兩者都具有良好的容錯(cuò)性和擴(kuò)展性,都可以擴(kuò)展到成百上千個(gè)節(jié)點(diǎn);

HDFS適合批處理場(chǎng)景

不支持?jǐn)?shù)據(jù)隨機(jī)查找

不適合增量數(shù)據(jù)處理

不支持?jǐn)?shù)據(jù)更新

2.Hbase的體系結(jié)構(gòu)

hbase快速入門知識(shí)點(diǎn)有哪些

1).Client

 HBase Client使用HBase的RPC機(jī)制與HMasterHRegionServer進(jìn)行通信,對(duì)于管理類操作,Client與HMaster進(jìn)行RPC;對(duì)于數(shù)據(jù)讀寫類操作,Client與HRegionServer進(jìn)行RPC。

2).Zookeeper

 Zookeeper Quorum中除了存儲(chǔ)了-ROOT-表的地址和HMaster的地址,HRegionServer也會(huì)把自己以Ephemeral方式注冊(cè)到 Zookeeper中,使得HMaster可以隨時(shí)感知到各個(gè)HRegionServer的健康狀態(tài)。此外,Zookeeper也避免了HMaster的單點(diǎn)問題。

3).Hmaster
  • 管理用戶對(duì)Table的增、刪、改、查操作;

  • 管理HRegion Server的負(fù)載均衡,調(diào)整Region分布;

  • 在Region Split后,負(fù)責(zé)新Region的分配;

  • 在HRegion Server停機(jī)后,負(fù)責(zé)失效HRegion Server 上的Regions遷移。

4).Region

hbase快速入門知識(shí)點(diǎn)有哪些

 當(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上面。

5).HRegion Server

 所有的數(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)系圖。

hbase快速入門知識(shí)點(diǎ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è)RegionRegion中由多個(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,一部分是StoreFilesMemStore是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 Split2個(gè)Region,父Region會(huì)下線,新Split出的2個(gè)孩子Region會(huì)被HMaster分配到相應(yīng)的HRegionServer 上,使得原先1個(gè)Region的壓力得以分流到2個(gè)Region上。下圖描述了Compaction和Split的過程。

hbase快速入門知識(shí)點(diǎn)有哪些

   圖 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ù)。

6).Hbase的存儲(chǔ)格式

 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。

7).ROOT表和META表

 用戶表的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ù)存放的位置,如下圖所示。

hbase快速入門知識(shí)點(diǎn)有哪些

 -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快速入門知識(shí)點(diǎn)有哪些

8).MapReduce On HBase

 在HBase系統(tǒng)上運(yùn)行批處理運(yùn)算,最方便和實(shí)用的模型依然是MapReduce,如下圖:

hbase快速入門知識(shí)點(diǎn)有哪些

 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é)。

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

hbase快速入門知識(shí)點(diǎn)有哪些

 以關(guān)系型數(shù)據(jù)的思維下會(huì)感覺,上面的表格是一個(gè)5列4行的數(shù)據(jù)表格,但是在HBase中這種理解是錯(cuò)誤的,其實(shí)在HBase中上面的表格只是一行數(shù)據(jù);

1).Row Key:

 – 決定一行數(shù)據(jù)的唯一標(biāo)識(shí)

 – RowKey是按照字典順序排序的。

 – Row key最多只能存儲(chǔ)64k的字節(jié)數(shù)據(jù)。

2).Column Family列族(CF1、CF2、CF3) & qualifier列:

 – 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è)列族。

3).Timestamp時(shí)間戳:

 – 在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í)間戳。

4).Cell單元格:

 – 由行和列的坐標(biāo)交叉決定;

 – 單元格是有版本的(由時(shí)間戳來作為版本);

 – 單元格的內(nèi)容是未解析的字節(jié)數(shù)組(Byte[]),cell中的數(shù)據(jù)是沒有類型的,全部是字節(jié)碼形式存貯。

 ? 由{row key,column(= +),version}唯一確定的單元。

4.Hbase應(yīng)用介紹
  • –列族結(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)注!

向AI問一下細(xì)節(jié)

免責(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)容。

AI