HBase核心知識點總結(jié)_第1頁
HBase核心知識點總結(jié)_第2頁
HBase核心知識點總結(jié)_第3頁
HBase核心知識點總結(jié)_第4頁
HBase核心知識點總結(jié)_第5頁
已閱讀5頁,還剩12頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

HBase核心知識點總結(jié)

一、HBase介紹

1、基本概念

HBase是一種Hadoop數(shù)據(jù)庫,經(jīng)常被描述為一種稀疏的,分

布式的,持久化的,多維有序映射,它基于行鍵、列鍵和時

間戳建立索引,是一個可以隨機訪問的存儲和檢索數(shù)據(jù)的平

臺。HBase不限制存儲的數(shù)據(jù)的種類,允許動態(tài)的、靈活的

數(shù)據(jù)模型,不用SQL語言,也不強調(diào)數(shù)據(jù)之間的關系。HBase

被設計成在一個服務器集群上運行,可以相應地橫向擴展。

2、HBase使用場景和成功案例

?互聯(lián)網(wǎng)搜索問題:爬蟲收集網(wǎng)頁,存儲到BigTable里,M

apReduce計算作業(yè)掃描全表生成搜索索引,從BigTable

中查詢搜索結(jié)果,展示給用戶。

?抓取增量數(shù)據(jù):例如,抓取監(jiān)控指標,抓取用戶交互數(shù)據(jù),

遙測技術,定向投放廣告等

?內(nèi)容服務

?信息交互

3、HBaseShell命令行交互:

啟動Shell$hbaseshell

列出所有的表hbase>list

創(chuàng)建名為mytable的表,含有一個列族hbhbase>create

'mytable','hb'

在'mytable'表的'first'行中的'hb:data'列對應的數(shù)

據(jù)單元中插入字節(jié)數(shù)組(helloHBase,

hbase>put'mytable','first','hb:data','hello

HBase'

讀取mytable表'first'行的內(nèi)容hbase>get'mytable'

'first'

讀取mytable表所有的內(nèi)容hbase>scanmytable'

二、入門

1、API

和數(shù)據(jù)操作有關的HBaseAPI有5個,分別是Get(讀),

Put(寫),Delete(刪),Scan(掃描)和Increment(列值遞增)

2、操作表

首先要創(chuàng)建一個configuration對象

Configurationconf=HBaseConfiguration.create();

使用eclipse時的話還必須將配置文件添加進來。

conf.addResource(newPath("E:\\share\\hbase-site

.xml"));

conf.addResource(newPathC'E:\\share\\core-site.

xml"));

conf.addResource(newPath("E:\\share\\hdfs-site.x

ml"));

使用連接池創(chuàng)建一張表。

HTablePoolpool=newHTablePool(conf,1);

HTablelnterfaceusersTable=

pool.getTable("users");

3、寫操作

用來存儲數(shù)據(jù)的命令是put,往表里存儲數(shù)據(jù),需要創(chuàng)

建Put實例。并制定要加入的行

Putput=newPut(byte[]row);

Put的add方法用來添加數(shù)據(jù),分別設定列族,限定符

以及單元格的指

put.add(byte[]family,byte[]qualifier,byte[]

value);

最后提交命令給表

usersTable.put(put);

usersTable.close();

修改數(shù)據(jù),只需重新提交一次最新的數(shù)據(jù)即可。

HBase寫操作的工作機制:

WmegoesIoIheE.ahMd

tog(WAL)aswelastfwinffwmory

writeboltercaMtheMemSiOfe

Ctontsdon、imeractdroctiywththe

undedymgHFiiMduringwmes.

MomSloregotofluaMdtodtskIoform

anewHTiteMedupwNhwrtM

HBase每次執(zhí)行寫操作都會寫入兩個地方:預寫式日志

(write-aheadlog,也稱HLog)和MemStore(寫入緩沖區(qū)),

以保證數(shù)據(jù)持久化,只有當這兩個地方的變化信息都寫入并

確認后,才認為寫動作完成。MemStore是內(nèi)存里的寫入緩沖

區(qū),HBase中數(shù)據(jù)在永久寫入硬盤之前在這里累積,當

MemStore填滿后,其中的數(shù)據(jù)會刷寫到硬盤,生成一個HFile。

4、讀操作

創(chuàng)建一個Get命令實例,包含要查詢的行

Getget=newGet(byte[]row);

執(zhí)行addColumn()或addFamily()可以設置限制條件。

將get實例提交到表會返回一個包含數(shù)據(jù)的Result實例,

實例中包含行中所有列族的所有列。

Resultr=usersTable.get(get);

可以對result實例檢索特定的值

byte[]b=r.getValue(byte[]family,byte[]

qualifier);

工作機制:

BlockCache用來保存從HFile中讀入內(nèi)存的頻繁訪問的數(shù)據(jù),

避免硬盤讀,每個列族都有自己的BlockCache。從HBase中

讀出一行,首先會檢查MemStore等待修改的隊列,然后檢

查BlockCache看包含該行的Block是否最近被訪問過,最

后訪問硬盤上的對應HFileo

5、刪除操作

創(chuàng)建一個Delete實例,指定要刪除的行。

Deletedelete=newDelete(byte[]row);

可以通過deleteFamily()和deleteColumn()方法指定刪除

行的一部分。

6表掃描操作

Scanscan=newScan()可以指定起始行和結(jié)束行。

setStartRow(),setStopRowO,setFilter()方法可以用

來限制返回的數(shù)據(jù)。

addColumn()和addFamily()方法還可以指定列和列族。

HBase模式的數(shù)據(jù)模型包括:

表:HBase用表來組織數(shù)據(jù)。

行:在表里,數(shù)據(jù)按行存儲,行由行鍵唯一標識。行鍵沒有

數(shù)據(jù)類型,為字節(jié)數(shù)組byte口。

列族:行里的數(shù)據(jù)按照列族分組,列族必須事先定義并且不

輕易修改。表中每行擁有相同的列族。

列限定符:列族里的數(shù)據(jù)通過列限定符或列來定位,列限定

符不必事先定義。

單元:存儲在單元里的數(shù)據(jù)稱為單元值,值是字節(jié)數(shù)組。單

元由行鍵,列族或列限定符一起確定。

時間版本:單元值有時間版本,是一個long類型。

一個HBase數(shù)據(jù)坐標的例子:

typicallyrepresentedbythetwnestamp

dwhentheyworeinsertedintothetable

(ts2>ts1)

Rgure2.4ThecoordinatesusedtoidentifydatainanHBasetablearerowkey,columnfamily,

columnqualifier,andversion.

HBase可以看做是一個鍵值數(shù)據(jù)庫。HBase的設計是面向半

結(jié)構(gòu)化數(shù)據(jù)的,數(shù)據(jù)記錄可能包含不一致的列,不確定大小

等。

三、分布式的HBase、HDFS和MapReduce

1、分布式模式的HBase

HBase將表會切分成小的數(shù)據(jù)單位叫region,分配到多臺服

務器。托管region的服務器叫做RegionServero一般情況

下,RgionServer和HDFSDataNode并列配置在同一物理硬

件上,RegionServer本質(zhì)上是HDFS客戶端,在上面存儲訪

問數(shù)據(jù),HMaster分配region給RegionServer,每個

RegionServer托管多個region。

HBase中的兩個特殊的表,-ROOT-和.META.,用來查找各種

表的region位置在哪。-ROOT-指向.META.表的region,.META.

表指向托管待查找的region的RegionServer0

一次客戶端查找過程的3層分布式B+樹如下圖:

HBase頂層結(jié)構(gòu)圖:

>Zcokeeper?—HMaster

(MemStofe)||Store(MemG詞

fl11)tUlTl1】…DFSGienlDFSClient

rapni

OataNode-y;zOdtaNctte"□畫曲□加口S

zookeeper負責跟蹤region服務器,保存rootregion的地

址。

Client負責與zookeeper子集群以及HRegionServer聯(lián)系。

HMaster負責在啟動HBase時,把所有的region分配到每個

HRegionServer±,也包括-ROOT-和.META.表。

HRegionServer負責打開region,并創(chuàng)建對應的HRegion實

例。HRegion被打開后,它為每個表的HColumnFamily創(chuàng)建

一個Store實例。每個Store實例包含一個或多個StoreFile

實例,它們是實際數(shù)據(jù)存儲文件HFile的輕量級封裝。每個

Store有其對應的一個MemStore,一個HRegionServer共享

一個HLog實例。

一次基本的流程:

a、客戶端通過zookeeper獲取含有-ROOT-的region服務

器名。

b、通過含有-ROOT-的region服務器查詢含有.META.表中

對應的region服務器名。

c、查詢.META.服務器獲取客戶端查詢的行鍵數(shù)據(jù)所在的

region服務器名。

d、通過行鍵數(shù)據(jù)所在的region服務器獲取數(shù)據(jù)。

HFile結(jié)構(gòu)圖:

Trailer有指向其他塊的指針,Index塊記錄Data和Meta

塊的偏移量,Data和Meta塊存儲數(shù)據(jù)。默認大小是64KB。

每個塊包含一個Magic頭部和一定數(shù)量的序列化的KeyValue

實例。

KeyValue格式:

該結(jié)構(gòu)以兩個分別表示鍵長度和值長度的定長數(shù)字開始,鍵

包含了行鍵,列族名和列限定符,時間戳等。

預寫日志W(wǎng)AL:

每次更新都會寫入日志,只有寫入成功才會通知客戶端操作

成功,然后服務器可以按需自由地批量處理或聚合內(nèi)存中的

數(shù)據(jù)。

編輯流在memstore和WAL之間分流的過程:

處理過程:客戶端通過RPC調(diào)用將KeyValue對象實例發(fā)送

到含有匹配region的HRegionServero接著這些實例被發(fā)送

到管理相應行的HRegion實例,數(shù)據(jù)被寫入到WAL,然后被

放入到實際擁有記錄的存儲文件的MemStore中。當memstore

中的數(shù)據(jù)達到一定的大小以后,數(shù)據(jù)會異步地連續(xù)寫入到文

件系統(tǒng)中,WAL能保證這一過程的數(shù)據(jù)不會丟失。

2、HBase和MapReduce

從MapReduce應用訪問HBase有3種方式:

作業(yè)開始時可以用HBase作為數(shù)據(jù)源,作業(yè)結(jié)束時可以用

HBase接收數(shù)據(jù),任務過程中用HBase共享資源。

?使用HBase作為數(shù)據(jù)源

階段map

protectedvoidmap(ImmutableBytesWritable

rowkey,Resultresult,Contextcontext){

);

從HBase表中讀取的作業(yè)以Lrowkey:scanresult]格式接收

鍵值對,對應的類型是ImmutableBytesWritable和

Resulto

創(chuàng)建實例掃描表中所有的行

Scanscan=newScan();

scan.addColumn(?,,);

接下來在MapReduce中使用Scan實例。

TabieMapReduceUti1,initTableMapperJob(tablename,sea

n,map.class,

輸出鍵的類型.class,輸出值的類型.class,job);

?使用HBase接收數(shù)據(jù)

reduce階段

protectedvoidreduce(

ImmutableBytesWritable

rowkey,Iterable<put>values,Contextcontext){

};

把reducer填入到作業(yè)配置中,

TabieMapReduceUti1,initTableReducerJob(tablename,re

duce.class,job);

3、HBase實現(xiàn)可靠性和可用性

HDFS作為底層存儲,為集群里的所有RegionServer提供單

一命名空間,一個RegionServer讀寫數(shù)據(jù)可以為其它所有

RegionServer讀寫。如果一個RegionServer出現(xiàn)故障,任

何其他RegionServer都可以從底層文件系統(tǒng)讀取數(shù)據(jù),基

于保存在HDFS里的HFile開始提供服務。接管這個

RegionServerz服務的region。

四、優(yōu)化HBase

1、隨機讀密集型

優(yōu)化方向:高效利用緩存和更好的索引

?增加緩存使用的堆的百分比,通過參數(shù)hfile.block.ca

che.size配置。

?減少MemStore占用的百分比,通過hbase.regionserver,

global,memstore.lowerLimit和hbase.regionserver,g

lobal.memstore.upperLimit來調(diào)節(jié)。

?使用更小的數(shù)據(jù)塊,使索引的粒度更細。

?打開布隆過濾器,以減少為查找指定行的KeyValue對象

而讀取的HFile的數(shù)量。

?設置激進緩存,可以提升隨機讀性能。

?關閉沒有被用到隨機讀的列族,提升緩存命中率。

2、順序讀密集型

優(yōu)化方向:減少使用緩存。

?增大數(shù)據(jù)塊的大小,使每次硬盤尋道時間取出的數(shù)據(jù)更多。

?設置較高的掃描器緩存值,以便在執(zhí)行大規(guī)模順序讀時每

次RPC請求掃描器可以取回更多行。參數(shù)hbase.clien

t.scanner,caching定義了在掃描器上調(diào)用next方法時

取回的行的數(shù)量。

?關閉數(shù)據(jù)塊的緩存,避免翻騰緩存的次數(shù)太多。通過Sea

n.setCacheBlocks(false)設置。

?關閉

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論