什么是HBase

這篇文章主要介紹了什么是HBase,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

在涼州等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站建設(shè)、網(wǎng)站制作 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站制作,涼州網(wǎng)站建設(shè)費(fèi)用合理。

一、什么是HBase

HBase 是一個(gè)高可靠、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用Hbase技術(shù)可在廉價(jià)PC Server上搭建 大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。

HBase 是Google Bigtable 的開源實(shí)現(xiàn),與Google Bigtable 利用GFS作為其文件存儲(chǔ)系統(tǒng)類似, HBase 利用Hadoop HDFS 作為其文件存儲(chǔ)系統(tǒng);Google 運(yùn)行MapReduce 來(lái)處理Bigtable中的海量數(shù)據(jù), HBase 同樣利用Hadoop MapReduce來(lái)處理HBase中的海量數(shù)據(jù);Google Bigtable 利用Chubby作為協(xié)同服務(wù), HBase 利用Zookeeper作為對(duì)應(yīng)。

二、HBase 設(shè)計(jì)模型

HBase 中的每一張表就是所謂的 BigTable。BigTable 會(huì)存儲(chǔ)一系列的行記錄,行記錄有三個(gè)基本類型的定義:Row Key、Time Stamp、Column。

1、Row Key 是行在 BigTable 中的唯一標(biāo)識(shí)。

2、Time Stamp 是每次數(shù)據(jù)操作對(duì)應(yīng)關(guān)聯(lián)的時(shí)間戳,可以看做 SVN 的版本。

3、Column 定義為< family>:< label>,通過(guò)這兩部分可以指定唯一的數(shù)據(jù)的存儲(chǔ)列,family 的定義和修改需要 對(duì) HBase 進(jìn)行類似于 DB 的 DDL 操作,而 label ,不需要定義直接可以使用,這也為動(dòng)態(tài)定制列提供了一種手段 。family 另一個(gè)作用體現(xiàn)在物理存儲(chǔ)優(yōu)化讀寫操作上,同 family 的數(shù)據(jù)物理上保存的會(huì)比較臨近,因此在業(yè)務(wù)設(shè)計(jì)的過(guò)程中可以利用這個(gè)特性。

1、邏輯存儲(chǔ)模型

HBase 以表的形式存儲(chǔ)數(shù)據(jù)。表由行和列組成。列劃分為若干個(gè)列族(row family),如下圖所示。
          什么是HBase

下面是對(duì)表中元素的詳細(xì)解析:
Row Key

與NoSql數(shù)據(jù)庫(kù)們一樣,row key是用來(lái)檢索記錄的主鍵。訪問(wèn)hbase table中的行,只有三種方式:

1 通過(guò)單個(gè)row key訪問(wèn)

2 通過(guò)row key的range

3 全表掃描

Row key行鍵 (Row key)可以是任意字符串(最大長(zhǎng)度是 64KB,實(shí)際應(yīng)用中長(zhǎng)度一般為 10-100bytes),在hbase內(nèi)部,row key保存為字節(jié)數(shù)組。

存儲(chǔ)時(shí),數(shù)據(jù)按照Row key的字典序(byte order)排序存儲(chǔ)。設(shè)計(jì)key時(shí),要充分排序存儲(chǔ)這個(gè)特性,將經(jīng)常一起讀取的行存儲(chǔ)放到一起。(位置相關(guān)性)

注意:
  1、字典序?qū)nt排序的結(jié)果是1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,…,9,91,92,93,94,95,96,97,98,99。要保持整形的自然序,行鍵必須用0作左填充。
  2、行的一次讀寫是原子操作 (不論一次讀寫多少列)。

列族

hbase表中的每個(gè)列,都?xì)w屬與某個(gè)列族。列族是表的chema的一部分(而列不是),必須在使用表之前定義。列名都以列族作為前綴。例如courses:history , courses:math 都屬于 courses 這個(gè)列族。

訪問(wèn)控制、磁盤和內(nèi)存的使用統(tǒng)計(jì)都是在列族層面進(jìn)行的。實(shí)際應(yīng)用中,列族上的控制權(quán)限能 幫助我們管理不同類型的應(yīng)用:我們?cè)试S一些應(yīng)用可以添加新的基本數(shù)據(jù)、一些應(yīng)用可以讀取基本數(shù)據(jù)并創(chuàng)建繼承的列族、一些應(yīng)用則只允許瀏覽數(shù)據(jù)(甚至可能因 為隱私的原因不能瀏覽所有數(shù)據(jù))。

時(shí)間戳

HBase中通過(guò)row和columns確定的為一個(gè)存貯單元稱為cell。每個(gè) cell都保存著同一份數(shù)據(jù)的多個(gè)版本。版本通過(guò)時(shí)間戳來(lái)索引。時(shí)間戳的類型是 64位整型。時(shí)間戳可以由hbase(在數(shù)據(jù)寫入時(shí)自動(dòng) )賦值,此時(shí)時(shí)間戳是精確到毫秒的當(dāng)前系統(tǒng)時(shí)間。時(shí)間戳也可以由客戶顯式賦值。如果應(yīng)用程序要避免數(shù)據(jù)版本沖突,就必須自己生成具有唯一性的時(shí)間戳。每個(gè) cell中,不同版本的數(shù)據(jù)按照時(shí)間倒序排序,即最新的數(shù)據(jù)排在最前面。

為了避免數(shù)據(jù)存在過(guò)多版本造成的的管理 (包括存貯和索引)負(fù)擔(dān),hbase提供了兩種數(shù)據(jù)版本回收方式。一是保存數(shù)據(jù)的最后n個(gè)版本,二是保存最近一段時(shí)間內(nèi)的版本(比如最近七天)。用戶可以針對(duì)每個(gè)列族進(jìn)行設(shè)置。

Cell

由{row key, column( = +), version} 唯一確定的單元。cell中的數(shù)據(jù)是沒(méi)有類型的,全部是字節(jié)碼形式存貯。

2、物理存儲(chǔ)模型

Table 在行的方向上分割為多個(gè)HRegion,每個(gè)HRegion分散在不同的RegionServer中。
          什么是HBase
每個(gè)HRegion由多個(gè)Store構(gòu)成,每個(gè)Store由一個(gè)memStore和0或多個(gè)StoreFile組成,每個(gè)Store保存一個(gè)Columns Family 
      什么是HBase

StoreFile以HFile格式存儲(chǔ)在HDFS中。

三、HBase 存儲(chǔ)架構(gòu)

從HBase的架構(gòu)圖上可以看出,HBase中的存儲(chǔ)包括HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等, 以下是 HBase 存儲(chǔ)架構(gòu)圖:

什么是HBase

HBase中的每張表都通過(guò)行鍵按照一定的范圍被分割成多個(gè)子表(HRegion),默認(rèn)一個(gè)HRegion超過(guò)256M就要被分割成兩個(gè),這個(gè)過(guò)程由HRegionServer管理,而HRegion的分配由HMaster管理。

HMaster的作用:
          1、 為Region server分配region。
          
         2、 負(fù)責(zé)Region server的負(fù)載均衡。

3、發(fā)現(xiàn)失效的Region server并重新分配其上的region。

4、 HDFS上的垃圾文件回收。

  5、 處理schema更新請(qǐng)求。

HRegionServer作用:

   1、 維護(hù)master分配給他的region,處理對(duì)這些region的io請(qǐng)求。

   2、 負(fù)責(zé)切分正在運(yùn)行過(guò)程中變的過(guò)大的region。

   可以看到,client訪問(wèn)hbase上的數(shù)據(jù)并不需要master參與(尋址訪問(wèn)zookeeper和region server,數(shù)據(jù)讀寫訪問(wèn)region server),master僅僅維護(hù)table和region的元數(shù)據(jù)信息(table的元數(shù)據(jù)信息保存在zookeeper上),負(fù)載很低。 HRegionServer存取一個(gè)子表時(shí),會(huì)創(chuàng)建一個(gè)HRegion對(duì)象,然后對(duì)表的每個(gè)列族創(chuàng)建一個(gè)Store實(shí)例,每個(gè)Store都會(huì)有一個(gè)MemStore和0個(gè)或多個(gè)StoreFile與之對(duì)應(yīng),每個(gè)StoreFile都會(huì)對(duì)應(yīng)一個(gè)HFile, HFile就是實(shí)際的存儲(chǔ)文件。因此,一個(gè)HRegion有多少個(gè)列族就有多少個(gè)Store。 一個(gè)HRegionServer會(huì)有多個(gè)HRegion和一個(gè)HLog。

HRegion

table在行的方向上分隔為多個(gè)Region。Region是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元,即不同的region可以分別在不同的Region Server上,但同一個(gè)Region是不會(huì)拆分到多個(gè)server上。

Region按大小分隔,每個(gè)表一般是只有一個(gè)region。隨著數(shù)據(jù)不斷插入表,region不斷增大,當(dāng)region的某個(gè)列族達(dá)到一個(gè)閾值(默認(rèn)256M)時(shí)就會(huì)分成兩個(gè)新的region。

   1、< 表名,startRowkey,創(chuàng)建時(shí)間>

2、由目錄表(-ROOT-和.META.)記錄該region的endRowkey

HRegion定位:Region被分配給哪個(gè)Region Server是完全動(dòng)態(tài)的,所以需要機(jī)制來(lái)定位Region具體在哪個(gè)region server。
HBase使用三層結(jié)構(gòu)來(lái)定位region:

1、 通過(guò)zk里的文件/hbase/rs得到-ROOT-表的位置。-ROOT-表只有一個(gè)region。

2、通過(guò)-ROOT-表查找.META.表的第一個(gè)表中相應(yīng)的region的位置。其實(shí)-ROOT-表是.META.表的第一個(gè)region;.META.表中的每一個(gè)region在-ROOT-表中都是一行記錄。

3、通過(guò).META.表找到所要的用戶表region的位置。用戶表中的每個(gè)region在.META.表中都是一行記錄。

-ROOT-表永遠(yuǎn)不會(huì)被分隔為多個(gè)region,保證了最多需要三次跳轉(zhuǎn),就能定位到任意的region。client會(huì)將查詢的位置信息保存緩存起來(lái),緩存不會(huì)主動(dòng)失效,因此如果client上的緩存全部失效,則需要進(jìn)行6次網(wǎng)絡(luò)來(lái)回,才能定位到正確的region,其中三次用來(lái)發(fā)現(xiàn)緩存失效,另外三次用來(lái)獲取位置信息。
 
Store

每一個(gè)region由一個(gè)或多個(gè)store組成,至少是一個(gè)store,hbase會(huì)把一起訪問(wèn)的數(shù)據(jù)放在一個(gè)store里面,即為每個(gè)ColumnFamily建一個(gè)store,如果有幾個(gè)ColumnFamily,也就有幾個(gè)Store。一個(gè)Store由一個(gè)memStore和0或者多個(gè)StoreFile組成。 HBase以store的大小來(lái)判斷是否需要切分region?!?br/>
MemStore

memStore 是放在內(nèi)存里的。保存修改的數(shù)據(jù)即keyValues。當(dāng)memStore的大小達(dá)到一個(gè)閥值(默認(rèn)64MB)時(shí),memStore會(huì)被flush到文件,即生成一個(gè)快照。目前hbase 會(huì)有一個(gè)線程來(lái)負(fù)責(zé)memStore的flush操作。
     
StoreFile

memStore內(nèi)存中的數(shù)據(jù)寫到文件后就是StoreFile,StoreFile底層是以HFile的格式保存。
HFile

HBase中KeyValue數(shù)據(jù)的存儲(chǔ)格式,是hadoop的二進(jìn)制格式文件。 首先HFile文件是不定長(zhǎng)的,長(zhǎng)度固定的只有其中的兩塊:Trailer和FileInfo。Trailer中有指針指向其他數(shù)據(jù)塊的起始點(diǎn),F(xiàn)ileInfo記錄了文件的一些meta信息。 Data Block是hbase io的基本單元,為了提高效率,HRegionServer中有基于LRU的block cache機(jī)制。每個(gè)Data塊的大小可以在創(chuàng)建一個(gè)Table的時(shí)候通過(guò)參數(shù)指定(默認(rèn)塊大小64KB),大號(hào)的Block有利于順序Scan,小號(hào)的Block利于隨機(jī)查詢。每個(gè)Data塊除了開頭的Magic以外就是一個(gè)個(gè)KeyValue對(duì)拼接而成,Magic內(nèi)容就是一些隨機(jī)數(shù)字,目的是防止數(shù)據(jù)損壞,結(jié)構(gòu)如下。
什么是HBase
HFile結(jié)構(gòu)圖如下:
什么是HBase

Data Block段用來(lái)保存表中的數(shù)據(jù),這部分可以被壓縮。 Meta Block段(可選的)用來(lái)保存用戶自定義的kv段,可以被壓縮。 FileInfo段用來(lái)保存HFile的元信息,不能被壓縮,用戶也可以在這一部分添加自己的元信息。 Data Block Index段(可選的)用來(lái)保存Meta Blcok的索引。 Trailer這一段是定長(zhǎng)的。保存了每一段的偏移量,讀取一個(gè)HFile時(shí),會(huì)首先讀取Trailer,Trailer保存了每個(gè)段的起始位置(段的Magic Number用來(lái)做安全check),然后,DataBlock Index會(huì)被讀取到內(nèi)存中,這樣,當(dāng)檢索某個(gè)key時(shí),不需要掃描整個(gè)HFile,而只需從內(nèi)存中找到key所在的block,通過(guò)一次磁盤io將整個(gè) block讀取到內(nèi)存中,再找到需要的key。DataBlock Index采用LRU機(jī)制淘汰。 HFile的Data Block,Meta Block通常采用壓縮方式存儲(chǔ),壓縮之后可以大大減少網(wǎng)絡(luò)IO和磁盤IO,隨之而來(lái)的開銷當(dāng)然是需要花費(fèi)cpu進(jìn)行壓縮和解壓縮。(備注: DataBlock Index的缺陷。    a) 占用過(guò)多內(nèi)存 b) 啟動(dòng)加載時(shí)間緩慢)

HLog
HLog(WAL log):WAL意為write ahead log,用來(lái)做災(zāi)難恢復(fù)使用,HLog記錄數(shù)據(jù)的所有變更,一旦region server 宕機(jī),就可以從log中進(jìn)行恢復(fù)。
LogFlusher
定期的將緩存中信息寫入到日志文件中
LogRoller 
    對(duì)日志文件進(jìn)行管理維護(hù)

四、Hbase 的單機(jī)部署安裝步驟

HBase 需要再 Hadoop 環(huán)境運(yùn)行,因此安裝HBase 的前提是必須安裝 Hadoop 環(huán)境。

Hadoop版本:hadoop-2.6.0-cdh6.7.0

下載地址:http://archive.cloudera.com/cdh6/cdh/5/hadoop-2.6.0-cdh6.7.0.tar.gz

HBase版本:hbase-1.2.0-cdh6.7.0

下載地址:http://archive.cloudera.com/cdh6/cdh/5/hbase-1.2.0-cdh6.7.0.tar.gz

HBase 的安裝步驟如下所示:

步驟一 、解壓hbase-1.2.0-cdh6.7.0.tar.gz 到指定的目錄下(這里是在/home/hadoop/app/)。

[hadoop@hadoop001 software]$ ll hbase-1.2.0-cdh6.7.0.tar.gz 
-rw-rw-r--. 1 hadoop hadoop 156854981 Apr  1  2016 hbase-1.2.0-cdh6.7.0.tar.gz
[hadoop@hadoop001 software]$ tar -zxvf hbase-1.2.0-cdh6.7.0.tar.gz -C /home/hadoop/app/
[hadoop@hadoop001 software]$ cd ../app/
[hadoop@hadoop001 app]$ ll
drwxr-xr-x. 32 hadoop hadoop 4096 Sep 27 15:21 hbase-1.2.0-cdh6.7.0

步驟二、配置 HBase 的環(huán)境變量到 ~/.bash_profile  文件中。

[hadoop@hadoop001 app]$ vi ~/.bash_profile 
export HBASE_HOME=/home/hadoop/appase-1.2.0-cdh6.7.0
export PATH=$HBASE_HOME/bin:$PATH

使配置文件立即生效:

[hadoop@hadoop001 app]$ source ~/.bash_profile

步驟三 、修改 conf/hbase-env.sh。

       1) 去掉 JAVA_HOME 前的 “#”,并將其修改成自己安裝的 Java 路徑。

export JAVA_HOME=/home/hadoop/appk1.8.0_45

       2) 去掉 HBASE_MANAGES_ZK 前的 “#”,并設(shè)置其值為 true(HBase 管理自己的 ZooKeeper,這樣就不需要安裝 ZooKeeper)。

export HBASE_MANAGES_ZK=true

步驟四、 打開 conf/hbase-site.xml,添加如下內(nèi)容。

        hbase.rootdir     需要與之前安裝的 Hadoop 目錄下 conf/core-site.xml 文件中的 fs.default.name 屬性值對(duì)應(yīng)。

        fs.default.name  設(shè)置為hdfs://hadoop001:9000/

        hbase.rootdir     設(shè)置為hdfs://hadoop001:9000/hbase

        hbase.ZooKeeper.quorum 設(shè)置為 默認(rèn)是:localhost  也可以設(shè)置為:hadoop001

        hbase.tmp.dir     設(shè)置為之前創(chuàng)建的 tmp 目錄:/usr/java/hbase/tmp 

代碼如下:

<configuration>
        <property>
                <name>fs.default.name</name>
                <value>hdfs://hadoop001:9000</value>
        </property>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://hadoop001:9000/hbase</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>localhost</value>
        </property>
        <property>
                <name>hbase.tmp.dir</name>
                <value>/home/hadoop/app/hbase-1.2.0-cdh6.7.0/hbase-tmp</value>
        </property>
</configuration>

步驟五 、啟動(dòng)HBase(前提已經(jīng)啟動(dòng) Hadoop)。

[hadoop@hadoop001 bin]$ ./start-hbase.sh 
starting master, logging to /home/hadoop/app/hbase-1.2.0-cdh6.7.0/logs/hbase-hadoop-master-hadoop001.out
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
[hadoop@hadoop001 bin]$

 步驟六 、在Hbase啟動(dòng)成功之后,在瀏覽器中輸入網(wǎng)址 http://hadoop001:60010

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“什么是HBase”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來(lái)學(xué)習(xí)!

當(dāng)前題目:什么是HBase
本文鏈接:http://bm7419.com/article0/pcoiio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、App開發(fā)、網(wǎng)站制作、搜索引擎優(yōu)化、用戶體驗(yàn)、靜態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開發(fā)