大數據培訓Module06HBase架構原理課件_第1頁
大數據培訓Module06HBase架構原理課件_第2頁
大數據培訓Module06HBase架構原理課件_第3頁
大數據培訓Module06HBase架構原理課件_第4頁
大數據培訓Module06HBase架構原理課件_第5頁
已閱讀5頁,還剩109頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

版權所有?

2015

華為技術有限公司HBase介紹版權所有?2015華為技術有第1頁前言版權所有?

2015

華為技術有限公司第1頁

HBase是一個高可靠性、高性能、面向列、可伸縮的分布式數據庫,設計目標是用來解決關系型數據庫在處理海量數據時的局限性。

本章主要介紹HBase的應用場景、功能與架構、關鍵流程、常用命令和參數。前言版權所有?2015華為技術有限公司第1頁 HBas目標版權所有?

2015

華為技術有限公司第2頁

學完本課程后,您將能夠:

了解HBase的組成架構

熟悉HBase的基本功能目標版權所有?2015華為技術有限公司第2頁 學完本課目錄版權所有?

2015

華為技術有限公司第3頁1. HBase應用場景HBase功能與架構HBase關鍵流程4. HBase常用命令和參數目錄版權所有?2015華為技術有限公司第3頁1. HBa簡介版權所有?

2015

華為技術有限公司第4頁

HBase是一個開源的非關系型分布式數據庫(NoSQL),它參考了谷歌的BigTable建模,實現(xiàn)的編程語言為

Java。

HBase是一個分布式存儲系統(tǒng),具有高可靠性、高性能、面向列、可伸縮的特點。HBase利用Hadoop

HDFS作為其文件存儲系統(tǒng)簡介版權所有?2015華為技術有限公司第4頁 HBas需求場景版權所有?

2015

華為技術有限公司第5頁

HBase適合具有如下需求的應用:

海量數據(TB、PB)

高吞吐量

需要在海量數據中實現(xiàn)高效的隨機讀取

需要很好的性能伸縮能力

能夠同時處理結構化和非結構化的數據

不需要完全擁有傳統(tǒng)關系型數據庫所具備的ACID特性需求場景版權所有?2015華為技術有限公司第5頁 HB誰在用HBase

?版權所有?

2015

華為技術有限公司第6頁誰在用HBase?版權所有?2015華為技術有限公司第目錄版權所有?

2015

華為技術有限公司第7頁1. HBase應用場景HBase功能與架構HBase關鍵流程4. HBase常用命令和參數目錄版權所有?2015華為技術有限公司第7頁1. HBa部署架構

架構版權所有?

2015

華為技術有限公司第8頁部署架構–架構版權所有?2015華為技術有限公司第8HBase模塊

–RegionRow001Row002………..Row010Row011Row012………..Row020Row021Row022………..Row030Row031………..………..………..Region-1StartKey,EndKeyRegion-2StartKey,EndKeyRegion-3StartKey,EndKeyRegion-4StartKey,EndKey

將一個數據表按Key值范圍橫向劃分為一個個的子表,實現(xiàn)分布式存儲。

這個子表,在HBase中被稱作“Region”。每一個Region都關聯(lián)一個Key值范圍,即一個使用StartKey和EndKey描述的區(qū)間。事實上,每一個Region僅僅記錄StartKey就可以了,因為它的EndKey就是下一個Region的StartKey。Region是HBase分布式存儲的最基本單元。TableName?

StartKey?Region版權所有?

2015

華為技術有限公司第9頁Row001Row002………..Row010Row011Row012………..Row020Row021Row022………..Row030Row031………..HBase模塊–RegionRow001Row002RHBase模塊

–Region與RegionServerRegionServer是HBase的數據服務進程。負責處理用戶數據的讀寫請求。Region被交由RegionServer管理。實際上,所有用戶數據的讀寫請求,都是和RegionServer上的Region進行交互。Region可以在RegionServer之間發(fā)生轉移。RegionRegionRegionServer思考:一個Region包含了一個Startkey和EndKey范圍;一條用戶數據KeyValue必然屬于一個唯一的Region;Region由RegionServer來管理,那么,這個路由信息保存在哪里呢?Region如何才可以轉移?由誰負責轉移?Region版權所有?

2015

華為技術有限公司第10頁HBase模塊–Region與RegionServerHBase模塊

–Region分類Region分為元數據Region以及用戶Region兩類。Meta

Region記錄了每一個User

Region的路由信息。讀寫Region數據的路由,包括如下幾步:找尋Meta

Region地址。再由Meta

Region找尋User

Region地址。RegionRegionRegionRegionRegionMETARegion版權所有?

2015

華為技術有限公司第11頁HBase模塊–Region分類Region分為元數據RHBase模塊

–HMasterMaster進程負責管理所有的RegionServer。新RegionServer的注冊。RegionServer

Failover處理。

負責建表/修改表/刪除表以及一些集群操作。Master進程負責所有Region的轉移操作。?

新表創(chuàng)建時的Region分配。?

運行期間的負載均衡保障。RegionServer

Failover后的Region接管。

Master進程有主備角色。集群可以配置多個Master角色,集群啟動時,這些Master角色通過競爭獲得主Master角色。主Master只能有一個,所有的備Master進程在集群運行期間處于休眠狀態(tài),不干涉任何集群事務。疑問:主備Master進程角色是如何進行裁決的?RegionServerRegionServerRegionServer“Hey,Region-A!

Please

move

to

RegionServer2!”“RegionServer1

was

gone!

Let

others

take

control

of

it!”“Good!

1

new

RegionServer

iscoming.”版權所有?

2015

華為技術有限公司第12頁HBase模塊–HMasterMaster進程負責管理所HBase模塊

–Zookeeper

提供分布式鎖的服務例如,多個Master進程競爭主Master角色時,怎么樣保證僅有一個Active角色存在?這就需要一個分布式的鎖機制來保證。多個Master進程都嘗試著去ZooKeeper中寫入一個對應的節(jié)點,該節(jié)點只能被一個Master進程創(chuàng)建成功,創(chuàng)建成功的Master進程就是Active角色。提供了事件監(jiān)聽機制例如,主Master進程宕掉之后,其它的備Master如何能夠快速的接管?這個過程中,備Master在監(jiān)聽那個對應的ZooKeeper節(jié)點。主Master進程宕掉之后,該節(jié)點會被刪除,那么,其它的備Master就可以收到相應的消息。個別場景,可充當一個微型數據庫角色例如,在ZooKeeper中存放了Region

Server的地址,此時,可以將它理解成一個微型數據庫?!癕aster-1,

Congratulations!

You

are

the

active

one!”“Sorry,

Master-2.

The

active

seat

hasbeen

taken

by

others.

Please

be

patient!”版權所有?

2015

華為技術有限公司第13頁HBase模塊–Zookeeper提供分布式鎖的服務數據結構介紹

三種結構具有固定的結構,屬性劃分,以及類型等信息。我們通常所理解的關系型數據庫中所存儲的數據信息,大多是結構化數據,

如職工信息表,擁有ID、Name、Phone、Address等屬性信息。通常直接存放在數據庫表中。數據記錄的每一個屬性對應數據表的一個字段。結構化數據非結構化數據版權所有?

2015

華為技術有限公司第14頁半結構化數據無法用統(tǒng)一的結構來表示,如文本文件、圖像、視頻、聲音、網頁等信息。數據記錄較小時(如KB級別),可考慮直接存放到數據庫表中(整條記錄映射到某一個列中),這樣也有利于整條記錄的快速檢索。數據較大時,通??紤]直接存放在文件系統(tǒng)中。數據庫可用來存放相關數據的索引信息。具有一定的結構,但又有一定的靈活可變性。典型如XML、HTML等數據。其實也是非結構化數據的一種??梢钥紤]直接轉換成結構化數據進行存儲。根據數據記錄的大小和特點,選擇合適的存儲方式。這一點與非結構化數據的存儲類似。數據結構介紹–三種結構具有固定的結構,屬性劃分,以及類數據結構介紹

按行存儲按列存儲IDNameAddressPhone按行存儲:數據按行存儲在底層文件系統(tǒng)中。通常,每一行會被分配固定的空間。

優(yōu)點:有利于增加/修改整行記錄等操作;有利于整行數據的讀取操作;

缺點:單列查詢時,會讀取一些不必要的數據。按列存儲:數據以列為單位,存儲在底層文件系統(tǒng)中。

優(yōu)點:有利于面向單列數據的讀取/統(tǒng)計等操作。

缺點:整行讀取時,可能需要多次I/O操作??梢钥闯觯瑹o論是按行存儲,還是按列存儲,都有明顯的優(yōu)缺點。是否存在一種折衷的方案?版權所有?

2015

華為技術有限公司第15頁IDNamePhoneAddress數據結構介紹–按行存儲按列存儲IDNameAddress數據結構介紹

KeyValue結構(1)IDNameAddressPhoneKeyValue具有特定的結構。Key部分被用來快速的檢索一條數據記錄,Value部分用來存儲實際的用戶數據信息。KeyValue作為承載用戶數據的基本單元,需要保存一些對自身的描述信息,例如,時間戳,類型等等。那么,勢必會有一定的結構化空間開銷。一個Key值對應一個Value?還是一個Key值可以對應多個Value?Value-ID01Key-01Value-Name01Key-01Value-Phone01Key-01Value-Address01Key-01版權所有?

2015

華為技術有限公司第16頁Relational

DatabaseKeyValue

DatabaseDatabase

contains

tables,

tablescontain

columns

and

rows,

and

rows

aremade

up

of

column

values.

Rows

withina

table

all

have

the

same

schema.The

data

model

is

well

defined

inadvance.

A

schema

is

strongly

typed

andit

has

constraints

and

relationships

thatenforce

data

integrity.The

datamodel

is

based

on

a

“natural”representation

of

the

data

it

contains,not

on

anapplication’sfunctionality.The

data

model

is

normalized

toremove

data

duplication.

Normalizationestablishes

table

relationships.Relationships

associate

data

betweentables.Domains

can

initially

be

thought

of

likeatable,

but

unlike

a

tableyou

don’tdefine

any

schema

for

a

domain.

ADomain

is

basically

a

bucket

that

you

putitems

into.

Items

within

a

single

domaincan

have

differing

schemas.Items

are

identified

by

keys,

and

agiven

item

can

have

a

dynamic

set

ofattributes

attached

to

it.In

some

implementations,

attributesare

all

of

a

string

type.

In

otherimplementations,

attributes

have

simpletypes

that

reflect

code

types,

such

as

ints,string

arrays,

and

lists.No

relationships

are

explicitly

definedbetween

domains

or

within

a

givendomain.數據結構介紹–KeyValue結構(1)IDNameAd數據結構介紹

KeyValue結構(2)初始運行階段,將Hash環(huán)劃分為幾個相等弧長的區(qū)間,每一個Hash區(qū)間對應一個Node。對用戶數據KeyValue的Key值進行Hash,落到哪個Hash區(qū)間,就屬于哪個Node。節(jié)點出現(xiàn)宕機時,將由該節(jié)點順時針方向的下一個節(jié)點接管相應的數據,避免出現(xiàn)大范圍的Re-

Hash操作。新節(jié)點加入時,從上一個節(jié)點到新節(jié)點之間的數據,需要Re-Hash到新的節(jié)點中。一致性Hash盡管一定程度上可以保證負載的均勻性,但在節(jié)點頻繁宕機,或頻繁重啟的情形下,可能會導致負載的極不均勻。版權所有?

2015

華為技術有限公司第17頁KeyValue型數據庫數據分區(qū)方式-一致性Hash分區(qū)數據結構介紹–KeyValue結構(2)初始運行階段,數據結構介紹

KeyValue結構(3)0102050603040708091011121314151601050206091310140307111504081216數據按照RowKey的范圍(按一定的排序算法排序的結果,如按RowKey的字典順序),劃分為一個個的子區(qū)間。每一個子區(qū)間都是一個分布式存儲的基本單元版權所有?

2015

華為技術有限公司第18頁Node1Node2Node3Node4KeyValue型數據庫數據分區(qū)方式-按Key值連續(xù)范圍分區(qū)數據結構介紹–KeyValue結構(3)01020506HBase數據模型

Column

Family/hbase/table/region-1/region-2/region-3HDFSColumnFamily是Region的一個物理存儲單元。同一個Region下面的多個ColumnFamily,位于不同的路徑下面。ColumnFamily信息是表級別的配置。也就是說,同一個表的多個Region,都擁有相同的ColumnFamily信息(例如,都有兩個ColumnFamily,且不同Region的同一個ColumnFamily配置信息相同)/hbase/table/region-1/ColumnFamily-1/region-1/ColumnFamily-2/region-2/ColumnFamily-1/region-2/ColumnFamily-2/region-3/ColumnFamily-1/region-3/ColumnFamily-2RegionRegionRegionRegion思考:ColumnFamily

=

HBase面向列存儲?版權所有?

2015

華為技術有限公司第19頁HBase數據模型–ColumnFamily/hbasHBase數據模型

KeyVaueHBase的底層數據都是以KeyValue的形式存在的。KeyValue具有特定的格式。KeyValue中擁有時間戳、類型等關鍵信息。同一個Key值可以關聯(lián)多個KeyValue,每一個KeyValue都擁有一個Qualifier標識。即使是Key值相同,Qualifier也相同的多個KeyValue,也可能有多個,此時使用時間戳來區(qū)分,這就是同一條數據記錄的多版本。/hbase/table/region-1/ColumnFamily-1/region-1/ColumnFamily-2/region-2/ColumnFamily-1/region-2/ColumnFamily-2/region-3/ColumnFamily-1/region-3/ColumnFamily-2HFile版權所有?

2015

華為技術有限公司第20頁HBase數據模型–KeyVaueHBase的底層數據HBase數據模型

HFile從HFile文件中讀取數據的流程:Trailer版權所有?

2015

華為技術有限公司第21頁RootData

IndexMeta

IndexFileInfoLeafData

IndexLeafData

IndexLeafData

IndexData

BlockData

BlockData

BlockHBase數據模型–HFile從HFile文件中讀取數據目錄版權所有?

2015

華為技術有限公司第22頁1.

HBase應用場景2. HBase功能與架構3.

HBase關鍵流程4.

HBase常用命令和參數目錄版權所有?2015華為技術有限公司第22頁1. HB寫流程

涉及的關鍵角色RegionRegionServerZooKeeperClient版權所有?

2015

華為技術有限公司第23頁寫流程–涉及的關鍵角色RegionRegionServe寫流程

客戶端發(fā)起寫數據請求Client客戶端寫數據代碼示例://

初始化配置信息Configurationconf

=

HBaseConfiguration.create();//

插入一行數據HTable

table

=

new

HTable(conf,

tableName);Put

put=

new

Put(Bytes.toBytes("012005000201"));put.add(FAMILIES,

Bytes.toBytes("name"),

Bytes.toBytes("張三"));put.add(FAMILIES,

Bytes.toBytes("gender"),

Bytes.toBytes("男"));put.add(FAMILIES,

Bytes.toBytes("address"),

Bytes.toBytes("廣東省深圳市"));table.put(put);版權所有?

2015

華為技術有限公司第24頁構建Put對象:一個Put對象代表一行數據記錄,可以添加多個列的數據。如上例所示,RowKey為“012005000201”,包含3個列:name,gender,address。Put

or

PutList?HBase提供了兩個主要的寫數據接口,一個可以寫入單行數據,即Put接口,另一個可以批量寫入多行數據,即PutList接口。事實上,Put僅是PutList的一種特殊情形。因此,后面的流程介紹僅僅涉及PutList。寫流程–客戶端發(fā)起寫數據請求Client客戶端寫數據代碼寫流程

定位RegionUserRegionMETARegionRegionLocation版權所有?

2015

華為技術有限公司第25頁寫流程–定位RegionUserRegionMETAR寫流程

數據分組整個數據分組,涉及到兩步“分籃子”操作:

將所有的記錄按Region劃分。將所有的記錄按RegionServer劃分。每個RegionServer上的數據會一起發(fā)送,這樣,發(fā)送的數據中,都是已經按照Region分好組了。版權所有?

2015

華為技術有限公司第26頁寫流程–數據分組整個數據分組,涉及到兩步“分籃子”操作:寫流程

往RegionServer發(fā)送寫數據請求利用HBase自身封裝的RPC框架,來完成數據發(fā)送操作。往多個RegionServer發(fā)送請求是并行操作。客戶端發(fā)送完寫數據請求后,會自動等待請求處理結果。如果客戶端沒有捕獲到任何的異常,則認為所有的數據都已經被寫入成功。如果全部寫入失敗,或者部分寫入失敗,客戶端能夠獲知詳細的失敗Key值列表。從這里也可以看出,PutList操作是不保證原子性的。版權所有?

2015

華為技術有限公司第27頁寫流程–往RegionServer發(fā)送寫數據請利用HB寫流程

Region寫數據流程獲取Region操作鎖依次獲取各行行鎖寫入到MemStore中寫數據到WAL中釋放已獲取的行鎖釋放Region鎖讀寫鎖既然是Write-

Ahead-Log,為何先寫內存再寫WAL?一個內存排序集合版權所有?

2015

華為技術有限公司第28頁HBase提供了一個MVCC機制,來保障寫數據階段的數據可見性。先寫MemStore再寫WAL,是為了一些特殊場景下,內存中的數據能夠更及時的可見。如果寫WAL失敗的話,MemStore中的數據會被回滾。寫流程–Region寫數據流程獲取Region操作鎖依次寫流程

HBase

LSMTree

將Put/Delete的數據暫時保存在每個Region的內存中,即MemStore中。寫內存,避免多Region情形下帶來的過多的分散IO操作。

數據在寫入到MemStore之后,也會順序寫入到HLog中,來保證數據的安全。版權所有?

2015

華為技術有限公司第29頁寫流程–HBaseLSMTree將Put/Del寫流程

FlushRegionMemStore-1(ColumnFamily-1)MemStore-2(ColumnFamily-2)HFileHFile存在如下兩種場景,會觸發(fā)一個Region的Flush操作:該Region的MemStore的總大小,達到了預設的Flush

Size閾值。這種場景下的Flush操作,通常僅瞬間堵塞用戶的讀寫操作。但如果超出預設Flush

Size閾值過多的話,也可能會引起較長時間的堵塞。

RegionServer的總內存大小超出了預設的閾值大小。這種場景下,在總內存沒有降低到預設的閾值以下之前,可能會較長時間堵塞。版權所有?

2015

華為技術有限公司第30頁寫流程–FlushRegionMemStore-1Mem寫流程

多HFile的影響隨著時間的不斷遷移,HFile文件數目越來越多,讀取時延也越來越大!版權所有?

2015

華為技術有限公司第31頁寫流程–多HFile的影響隨著時間的不斷遷移,HFile寫流程

CompactionCompaction的主要目的,是為了減少同一個Region同一個ColumnFamily

下面的小文件數目,從而提升讀取的性能。Compaction分為Minor、Major兩類:Minor:小范圍的Compaction。有最少和最大文件數目限制。通常會選擇一些連續(xù)時間范圍的小文件進行合并。Major:涉及該Region該ColumnFamily下面的所有的HFile文件。Major

Compaction過程中,會清理被刪除的數據。Minor

Compaction選取文件時,遵循一定的算法。HFileHFileHFileHFile

HFile

HFileMinor

CompactionHFileMemStoreputHFileHFileHFileHFileMajor

CompactionFlushWrite版權所有?

2015

華為技術有限公司第32頁寫流程–CompactionCompaction的主要目寫流程

SplitDaughterRegion-1DaughterRegion-2

普通的Region

Split操作,是指集群運行期間,某一個Region的數據大小超出了預設的閾值,則需要將該Region自動分裂成為兩個子Region。

分裂過程中,被分裂的Region會暫停一些讀寫服務。由于分裂過程中,父Region的數據文件并不會真正的分裂并重寫到兩個子Region中,而是僅僅通過在新Region中創(chuàng)建引用文件的方式,來實現(xiàn)快速的分裂。因此,Region暫停服務的時間會比較短暫。

客戶端側所緩存的父Region的路由信息需要被更新。思考:普通的Region

Split操作,為何僅僅將一個Region分裂成兩個Region?能否分裂成多個?ParentRegion版權所有?

2015

華為技術有限公司第33頁寫流程–SplitDaughterRegion-1Da讀流程

Getor

ScanRegionScanGetGet操作代碼示例:HTable

table

=

null;try

{table

=

new

HTable(conf,

tableName);Get

get

=

new

Get(rowKey.getBytes());//

設定列族名和列名get.addColumn(family,

qualifier);//

設定列族名get.addFamily(family);Result

result

=

table.get(get);for

(KeyValue

kv

:

result.raw())

{System.out.println(kv.getRow()

+"

"

+

(kv.getFamily())

+"

"+

(kv.getQualifier())

+

"

"

+

kv.getTimestamp()

+

"

"+

kv.getValue()

+"

");}}

catch

(IOException

e)

{//

TODO}

finally

{if

(null

!=

table)

{try

{table.close();}

catch

(IOException

e)

{//

TODO}}}scan.setCaching(1000);{}}}Get操作在提供精確的Key值的情形下,讀取單行用戶數據Scan操作代碼示例:HTable

table

=

null;ResultScannerrScanner

=

null;try

{table

=

new

HTable(conf,

tableName);Scanscan

=

new

Scan();scan.setStartRow(startRow);scan.setStopRow(stopRow);//

重要參數:每次RPC從服務端取回的記錄數rScanner

=

table.getScanner(scan);for

(Result

r

=

rScanner.next();

r

!=

null;

r

=

rScanner.next())for

(KeyValue

kv

:

r.raw())

{//

TODO}}}

catch

(IOExceptione)

{//

TODO}

finally

{if

(null

!=

rScanner)

{rScanner.close();}if

(null

!=

table)

{try

{table.close();}

catch

(IOException

e)

{//

TODOScan操作是為了批量掃描限定Key值范圍內的用戶數據版權所有?

2015

華為技術有限公司第34頁讀流程–GetorScanRegionGetGet操讀流程

OpenScannerRegionColumnFamily-1

MemStoreHFile-11

HFile-12

HFile-13ColumnFamily-2

MemStoreHFile-21

HFile-22

HFile-23思考:一個Region可能有多個列族…一個列族,可能包含有多個HFile文件,同時,還有部分數據存在于MemStore中,尚未固化…如何讀取,才可以讀到想要的用戶數據?OpenScanner的過程,會為MemStore,以及各個HFile創(chuàng)建所對應的Scanner:版權所有?

2015

華為技術有限公司第35頁MemStore對應的Scanner為MemStoreScanner。HFile對應的Scanner為StoreFileScanner。讀流程–OpenScannerRegionColumnF讀流程

NextScannerA

CurrentKeyValue:Row01,FamiA:col1ScannerBCurrentKeyValue:Row01,FamiB:col1ScannerCCurrentKeyValue:Row01,FamiC:col1ScannerD

CurrentKeyValue:Row01,FamiD:col1ScannerAScannerBCurrentKeyValue:Row01,FamiB:col1ScannerCCurrentKeyValue:Row01,FamiC:col1ScannerD

CurrentKeyValue:Row01,FamiD:col1PollFinished?YcloseThisisaPriorityQueue,itusesaComparatortosortallelements.ScannerA

CurrentKeyValue:Row01,FamiA:col2ScannerBCurrentKeyValue:Row01,FamiB:col1ScannerCCurrentKeyValue:Row01,FamiC:col1ScannerD

CurrentKeyValue:Row01,FamiD:col1SupposethescanningforRow01isnotfinishedinScannerA.SothisscannerwillstillpresentatthefirstplaceoftheQueueScannerA

CurrentKeyValue:Row02,FamiA:col1N:PutbackScannerA

Finished?

Y

closeN:PutbackPollSupposethescanningforRow01isfinishedinScannerA.SothisscannerwillbeputattheendoftheQueue.版權所有?

2015

華為技術有限公司第36頁

每一個Scanner中,都有一個指針,指向接下來要讀取的用戶數據KeyValue是哪一個。

同一級的Scanner,被放在同一個優(yōu)先級隊列中。通過不斷的對比每一個Scanner的指針所指向的KeyValue,將這些Scanner進行排序。

每一次next請求,都是從該優(yōu)先級隊列中,Poll出一個Scanner,然后,讀取該Scanner的當前指針所指向的KeyValue即可。

每一次讀完一個Scanner,指針都會往下移一個KeyValue。而后,該Scanner被返還到隊列中。如果已經讀完,則直接關閉。nextnext讀流程–NextScannerACurrentKe讀流程

FilterScan過程中使用Filter代碼示例:Scans=

new

Scan();//

前綴過濾器,查找RowKey以“132”開頭的行s.setFilter(new

PrefixFilter(Bytes.toBytes("132")));//

查找符合條件的6行數據s.setFilter(new

PageFilter(6));//

多個過濾器結合使用FilterList

list

=

new

FilterList(Operator.MUST_PASS_ALL);list.addFilter(new

SingleColumnValueFilter(family,qualifier,CompareOp.EQUAL,value));list.addFilter(new

PageFilter(6));s.setFilter(list);

Filter允許在Scan過程中,設定一定的過濾條件。符合條件的用戶數據才返回。

當前包含的一些典型的Filter有:RowFilter版權所有?

2015

華為技術有限公司第37頁?SingleColumnValueFilterKeyOnlyFilterFilterList? ………

使用Filter時,可能會掃描大量的用戶數據,才可以找到所期望的滿足條件的數據。因此,一些場景下的性能是不可預估的。Satisfied

RowSatisfied

RowSatisfied

Row讀流程–FilterScan過程中使用Filter代碼示讀流程

BloomFilter

BloomFilter被用來優(yōu)化一些隨機讀取的場景,即Get場景。

它可以被用來快速的判斷一條用戶數據在一個大的數據集合(該數據集合的大部分數據都沒法被加載到內存中)中是否存在。右圖給出了BloomFilter的基礎原理。

BloomFilter在判斷一個數據是否存在時,擁有一定的誤判率。但對于“用戶數據

XXXX不存在”的判斷結果是可信的。HBase的BloomFilter的相關數據,被保存在HFile中。數據寫入階段,對用戶數據進行N次Hash,并且將映射到的對應的位改為1版權所有?

2015

華為技術有限公司第38頁數據讀取階段,對用戶數據進行N次Hash,判斷對應的位是否為1讀流程–BloomFilterBloomFilt目錄版權所有?

2015

華為技術有限公司第39頁1. HBase應用場景HBase功能與架構HBase關鍵流程4. HBase常用命令和參數目錄版權所有?2015華為技術有限公司第39頁1. HB常用接口版權所有?

2015

華為技術有限公司第40頁客戶端使用主要方式:HBaseShellHBase的命令行工具,最簡單的接口,適合HBase管理使用。Java

API

HBase客戶端程序通過底層RPC接口與HBase集群進行通信,客戶程序直接集成HBase的Java包,通過調用相關API即可完成操作。其余接口:REST

接口REST(Representational

State

Transfer)表述性狀態(tài)轉移接口。Thrift接口Thrift

是一個基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實現(xiàn),它可以生成包括C++,

Java,

Python,

Ruby,

PHP

等主流語言的代碼,這些代碼實現(xiàn)了

RPC

的協(xié)議層和傳輸層功能,從而讓用戶可以集中精力于服務的調用和實現(xiàn)。Avro接口Avro是一個數據序列化系統(tǒng),設計用于支持大批量數據交換的應用。常用接口版權所有?2015華為技術有限公司第40頁客戶端HBase

Shell

–連接通過/hbase

shell來連接正在運行的HBase

Shell客戶端用法:版權所有?

2015

華為技術有限公司第41頁#

.bin/hbase

shellHBase

Shell;

enter

'help<RETURN>'

for

list

ofsupportedType

"exit<RETURN>"

toleave

the

HBaseShellVersion

0.94.0,

r,

SunAug

2622:12:56CST

2012commands.hbase(main):001:0>HBaseShell–連接通過/hbaseshellHBase

Shell

–創(chuàng)建表創(chuàng)建表時,可以選擇多個參數,但表名和列族名是必須的參數,其它參數還包括版本數、TTL

以及預分Region建表的key數組等用法:hbase>

create

't1',

{NAME

=>

'f1',

VERSIONS

=>

5}hbase>

create

't1',

{NAME

=>

'f1'},{NAME

=>

'f2'},

{NAME

=>

'f3'}hbase>

#

The

above

in

shorthand

would

be

the

following:hbase>

create

't1',

'f1',

'f2',

'f3'hbase>

create

't1',

{NAME

=>

'f1',

VERSIONS

=>

1,

TTL

=>

2592000,

BLOCKCACHE

=>

true}hbase>

create

't1',

'f1',

{SPLITS

=>

['10',

'20',

'30',

'40']}hbase>

create

't1',

'f1',

{SPLITS_FILE

=>

'splits.txt'}hbase>

#

Optionally

pre-split

the

table

into

NUMREGIONS,

usinghbase>

#

SPLITALGO

("HexStringSplit",

"UniformSplit"

or

classname)hbase>

create

't1',

'f1',

{NUMREGIONS

=>

15,

SPLITALGO=>

'HexStringSplit'}版權所有?

2015

華為技術有限公司第42頁HBaseShell–創(chuàng)建表創(chuàng)建表時,可以選擇多個參數HBase

Shell

–插入一行數據PutPut數據時,必選參數是表名、RowKey、列名(包括列族和列名)和值,可選參數包括時間戳用法:hbase>put

't1',

'r1','c1',

'value',

ts1例如,向表test中put三條數據,并通過count命令計算test表中的數據的條數示例://向表test中put數據,RowKey為rowkey1,列族名為cf,列名為qualifier1,值為value1版權所有?

2015

華為技術有限公司第43頁hbase(main):002:0>0

row(s)in

0.5940hbase(main):003:0>0

row(s)in

0.0080//指定時間戳為3hbase(main):011:0>0

row(s)in

0.0510hbase(main):013:0>3

row(s)in

0.0160put'test','rowkey1','cf:qualifier1','value1'secondsput'test','rowkey2','cf:qualifier2','value2'secondsput'test','rowkey3','cf:qualifier3','value3',3secondscount'test'secondsHBaseShell–插入一行數據PutPut數據時,HBase

Shell

–讀取一行數據Get查詢一行數據時,必選參數是表名和RowKey,可選參數包括列名(包括列族和列名)、時間戳、版本數等用法:版權所有?

2015

華為技術有限公司第44頁hbase>hbase>hbase>hbase>hbase>hbase>get

't1',get

't1',get

't1',get

't1',get

't1',get

't1','r1''r1','r1','r1','r1','r1',{TIMERANGE=>[ts1,

ts2]}=>

'c1'}=>

['c1',

'c2',

'c3']}=>=>{COLUMN{COLUMN{COLUMN{COLUMN'c1','c1',TIMESTAMPTIMERANGE=>ts1}=>[ts1,ts2],VERSIONS=>

4}hbase>getVERSIONS=>

4}'t1','r1',{COLUMN

=>

'c1','c1''c1','c2'['c1',

'c2']TIMESTAMP=>ts1,hbase>hbase>hbase>get

't1',get

't1',get

't1','r1','r1','r1',HBaseShell–讀取一行數據Get查詢一行數據時HBase

Shell

–讀取多行數據Scan查詢多行數據,必選參數是表名,可選參數包括列名(包括列族和列名)、起止Key、Filter用法://查詢元表版權所有?

2015

華為技術有限公司第45頁hbase>hbase>hbase>hbase>hbase>scanscanscanscanscan'.META.''.META.',

{COLUMNS

=>

'info:regioninfo'}'t1','t1','t1',{COLUMNS

=>

['c1','c2'],LIMIT

=>10,

STARTROW

=>'xyz'}{COLUMNS

=>

'c1',

TIMERANGE

=>

[1303668804,

1303668904]}{FILTER

=>"(PrefixFilter

('row2')AND

(QualifierFilters(>=,'binary:xyz')))AND(TimestampsFilterhbase>scan't1',(

123,

456))"}{FILTER

=>org.apache.hadoop.hbase.filter.ColumnPaginationFilter.new(1,

0)}hbase>scan't1',

{COLUMNS

=>

['c1','c2'],CACHE_BLOCKS

=>false}hbase>

scan't1',

{RAW=>true,VERSIONS

=>10}HBaseShell–讀取多行數據Scan查詢多行數據HBase

Shell

–其他常用命令HBase還提供了一些其它的Shell

API,包括general、ddl、dml、tools、replication和security六組,每組又包括多個Shell命令。每組命令和每個命令的用法均可以通過help查詢其用法COMMAND

GROUPS:Group

name:generalCommands:

status,

version,

whoamiGroup

name:

ddlCommands:

alter,

alter_async,

alter_status,create,

describe,

disable,

disable_all,

drop,drop_all,

enable,

enable_all,

exists,

is_disabled,

is_enabled,

list,show_filtersGroup

name:dmlCommands:

count,

delete,

del

溫馨提示

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

評論

0/150

提交評論