版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
版權(quán)所有?
2015
華為技術(shù)有限公司HBase介紹版權(quán)所有?2015華為技術(shù)有第1頁前言版權(quán)所有?
2015
華為技術(shù)有限公司第1頁
HBase是一個高可靠性、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,設計目標是用來解決關(guān)系型數(shù)據(jù)庫在處理海量數(shù)據(jù)時的局限性。
本章主要介紹HBase的應用場景、功能與架構(gòu)、關(guān)鍵流程、常用命令和參數(shù)。前言版權(quán)所有?2015華為技術(shù)有限公司第1頁 HBas目標版權(quán)所有?
2015
華為技術(shù)有限公司第2頁
學完本課程后,您將能夠:
了解HBase的組成架構(gòu)
熟悉HBase的基本功能目標版權(quán)所有?2015華為技術(shù)有限公司第2頁 學完本課目錄版權(quán)所有?
2015
華為技術(shù)有限公司第3頁1. HBase應用場景HBase功能與架構(gòu)HBase關(guān)鍵流程4. HBase常用命令和參數(shù)目錄版權(quán)所有?2015華為技術(shù)有限公司第3頁1. HBa簡介版權(quán)所有?
2015
華為技術(shù)有限公司第4頁
HBase是一個開源的非關(guān)系型分布式數(shù)據(jù)庫(NoSQL),它參考了谷歌的BigTable建模,實現(xiàn)的編程語言為
Java。
HBase是一個分布式存儲系統(tǒng),具有高可靠性、高性能、面向列、可伸縮的特點。HBase利用Hadoop
HDFS作為其文件存儲系統(tǒng)簡介版權(quán)所有?2015華為技術(shù)有限公司第4頁 HBas需求場景版權(quán)所有?
2015
華為技術(shù)有限公司第5頁
HBase適合具有如下需求的應用:
海量數(shù)據(jù)(TB、PB)
高吞吐量
需要在海量數(shù)據(jù)中實現(xiàn)高效的隨機讀取
需要很好的性能伸縮能力
能夠同時處理結(jié)構(gòu)化和非結(jié)構(gòu)化的數(shù)據(jù)
不需要完全擁有傳統(tǒng)關(guān)系型數(shù)據(jù)庫所具備的ACID特性需求場景版權(quán)所有?2015華為技術(shù)有限公司第5頁 HB誰在用HBase
?版權(quán)所有?
2015
華為技術(shù)有限公司第6頁誰在用HBase?版權(quán)所有?2015華為技術(shù)有限公司第目錄版權(quán)所有?
2015
華為技術(shù)有限公司第7頁1. HBase應用場景HBase功能與架構(gòu)HBase關(guān)鍵流程4. HBase常用命令和參數(shù)目錄版權(quán)所有?2015華為技術(shù)有限公司第7頁1. HBa部署架構(gòu)
–
架構(gòu)版權(quán)所有?
2015
華為技術(shù)有限公司第8頁部署架構(gòu)–架構(gòu)版權(quán)所有?2015華為技術(shù)有限公司第8HBase模塊
–RegionRow001Row002………..Row010Row011Row012………..Row020Row021Row022………..Row030Row031………..………..………..Region-1StartKey,EndKeyRegion-2StartKey,EndKeyRegion-3StartKey,EndKeyRegion-4StartKey,EndKey
將一個數(shù)據(jù)表按Key值范圍橫向劃分為一個個的子表,實現(xiàn)分布式存儲。
這個子表,在HBase中被稱作“Region”。每一個Region都關(guān)聯(lián)一個Key值范圍,即一個使用StartKey和EndKey描述的區(qū)間。事實上,每一個Region僅僅記錄StartKey就可以了,因為它的EndKey就是下一個Region的StartKey。Region是HBase分布式存儲的最基本單元。TableName?
StartKey?Region版權(quán)所有?
2015
華為技術(shù)有限公司第9頁Row001Row002………..Row010Row011Row012………..Row020Row021Row022………..Row030Row031………..HBase模塊–RegionRow001Row002RHBase模塊
–Region與RegionServerRegionServer是HBase的數(shù)據(jù)服務進程。負責處理用戶數(shù)據(jù)的讀寫請求。Region被交由RegionServer管理。實際上,所有用戶數(shù)據(jù)的讀寫請求,都是和RegionServer上的Region進行交互。Region可以在RegionServer之間發(fā)生轉(zhuǎn)移。RegionRegionRegionServer思考:一個Region包含了一個Startkey和EndKey范圍;一條用戶數(shù)據(jù)KeyValue必然屬于一個唯一的Region;Region由RegionServer來管理,那么,這個路由信息保存在哪里呢?Region如何才可以轉(zhuǎn)移?由誰負責轉(zhuǎn)移?Region版權(quán)所有?
2015
華為技術(shù)有限公司第10頁HBase模塊–Region與RegionServerHBase模塊
–Region分類Region分為元數(shù)據(jù)Region以及用戶Region兩類。Meta
Region記錄了每一個User
Region的路由信息。讀寫Region數(shù)據(jù)的路由,包括如下幾步:找尋Meta
Region地址。再由Meta
Region找尋User
Region地址。RegionRegionRegionRegionRegionMETARegion版權(quán)所有?
2015
華為技術(shù)有限公司第11頁HBase模塊–Region分類Region分為元數(shù)據(jù)RHBase模塊
–HMasterMaster進程負責管理所有的RegionServer。新RegionServer的注冊。RegionServer
Failover處理。
負責建表/修改表/刪除表以及一些集群操作。Master進程負責所有Region的轉(zhuǎn)移操作。?
新表創(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.”版權(quán)所有?
2015
華為技術(shù)有限公司第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就可以收到相應的消息。個別場景,可充當一個微型數(shù)據(jù)庫角色例如,在ZooKeeper中存放了Region
Server的地址,此時,可以將它理解成一個微型數(shù)據(jù)庫?!癕aster-1,
Congratulations!
You
are
the
active
one!”“Sorry,
Master-2.
The
active
seat
hasbeen
taken
by
others.
Please
be
patient!”版權(quán)所有?
2015
華為技術(shù)有限公司第13頁HBase模塊–Zookeeper提供分布式鎖的服務數(shù)據(jù)結(jié)構(gòu)介紹
–
三種結(jié)構(gòu)具有固定的結(jié)構(gòu),屬性劃分,以及類型等信息。我們通常所理解的關(guān)系型數(shù)據(jù)庫中所存儲的數(shù)據(jù)信息,大多是結(jié)構(gòu)化數(shù)據(jù),
如職工信息表,擁有ID、Name、Phone、Address等屬性信息。通常直接存放在數(shù)據(jù)庫表中。數(shù)據(jù)記錄的每一個屬性對應數(shù)據(jù)表的一個字段。結(jié)構(gòu)化數(shù)據(jù)非結(jié)構(gòu)化數(shù)據(jù)版權(quán)所有?
2015
華為技術(shù)有限公司第14頁半結(jié)構(gòu)化數(shù)據(jù)無法用統(tǒng)一的結(jié)構(gòu)來表示,如文本文件、圖像、視頻、聲音、網(wǎng)頁等信息。數(shù)據(jù)記錄較小時(如KB級別),可考慮直接存放到數(shù)據(jù)庫表中(整條記錄映射到某一個列中),這樣也有利于整條記錄的快速檢索。數(shù)據(jù)較大時,通??紤]直接存放在文件系統(tǒng)中。數(shù)據(jù)庫可用來存放相關(guān)數(shù)據(jù)的索引信息。具有一定的結(jié)構(gòu),但又有一定的靈活可變性。典型如XML、HTML等數(shù)據(jù)。其實也是非結(jié)構(gòu)化數(shù)據(jù)的一種??梢钥紤]直接轉(zhuǎn)換成結(jié)構(gòu)化數(shù)據(jù)進行存儲。根據(jù)數(shù)據(jù)記錄的大小和特點,選擇合適的存儲方式。這一點與非結(jié)構(gòu)化數(shù)據(jù)的存儲類似。數(shù)據(jù)結(jié)構(gòu)介紹–三種結(jié)構(gòu)具有固定的結(jié)構(gòu),屬性劃分,以及類數(shù)據(jù)結(jié)構(gòu)介紹
–
按行存儲按列存儲IDNameAddressPhone按行存儲:數(shù)據(jù)按行存儲在底層文件系統(tǒng)中。通常,每一行會被分配固定的空間。
優(yōu)點:有利于增加/修改整行記錄等操作;有利于整行數(shù)據(jù)的讀取操作;
缺點:單列查詢時,會讀取一些不必要的數(shù)據(jù)。按列存儲:數(shù)據(jù)以列為單位,存儲在底層文件系統(tǒng)中。
優(yōu)點:有利于面向單列數(shù)據(jù)的讀取/統(tǒng)計等操作。
缺點:整行讀取時,可能需要多次I/O操作??梢钥闯?,無論是按行存儲,還是按列存儲,都有明顯的優(yōu)缺點。是否存在一種折衷的方案?版權(quán)所有?
2015
華為技術(shù)有限公司第15頁IDNamePhoneAddress數(shù)據(jù)結(jié)構(gòu)介紹–按行存儲按列存儲IDNameAddress數(shù)據(jù)結(jié)構(gòu)介紹
–
KeyValue結(jié)構(gòu)(1)IDNameAddressPhoneKeyValue具有特定的結(jié)構(gòu)。Key部分被用來快速的檢索一條數(shù)據(jù)記錄,Value部分用來存儲實際的用戶數(shù)據(jù)信息。KeyValue作為承載用戶數(shù)據(jù)的基本單元,需要保存一些對自身的描述信息,例如,時間戳,類型等等。那么,勢必會有一定的結(jié)構(gòu)化空間開銷。一個Key值對應一個Value?還是一個Key值可以對應多個Value?Value-ID01Key-01Value-Name01Key-01Value-Phone01Key-01Value-Address01Key-01版權(quán)所有?
2015
華為技術(shù)有限公司第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.數(shù)據(jù)結(jié)構(gòu)介紹–KeyValue結(jié)構(gòu)(1)IDNameAd數(shù)據(jù)結(jié)構(gòu)介紹
–
KeyValue結(jié)構(gòu)(2)初始運行階段,將Hash環(huán)劃分為幾個相等弧長的區(qū)間,每一個Hash區(qū)間對應一個Node。對用戶數(shù)據(jù)KeyValue的Key值進行Hash,落到哪個Hash區(qū)間,就屬于哪個Node。節(jié)點出現(xiàn)宕機時,將由該節(jié)點順時針方向的下一個節(jié)點接管相應的數(shù)據(jù),避免出現(xiàn)大范圍的Re-
Hash操作。新節(jié)點加入時,從上一個節(jié)點到新節(jié)點之間的數(shù)據(jù),需要Re-Hash到新的節(jié)點中。一致性Hash盡管一定程度上可以保證負載的均勻性,但在節(jié)點頻繁宕機,或頻繁重啟的情形下,可能會導致負載的極不均勻。版權(quán)所有?
2015
華為技術(shù)有限公司第17頁KeyValue型數(shù)據(jù)庫數(shù)據(jù)分區(qū)方式-一致性Hash分區(qū)數(shù)據(jù)結(jié)構(gòu)介紹–KeyValue結(jié)構(gòu)(2)初始運行階段,數(shù)據(jù)結(jié)構(gòu)介紹
–
KeyValue結(jié)構(gòu)(3)0102050603040708091011121314151601050206091310140307111504081216數(shù)據(jù)按照RowKey的范圍(按一定的排序算法排序的結(jié)果,如按RowKey的字典順序),劃分為一個個的子區(qū)間。每一個子區(qū)間都是一個分布式存儲的基本單元版權(quán)所有?
2015
華為技術(shù)有限公司第18頁Node1Node2Node3Node4KeyValue型數(shù)據(jù)庫數(shù)據(jù)分區(qū)方式-按Key值連續(xù)范圍分區(qū)數(shù)據(jù)結(jié)構(gòu)介紹–KeyValue結(jié)構(gòu)(3)01020506HBase數(shù)據(jù)模型
–
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面向列存儲?版權(quán)所有?
2015
華為技術(shù)有限公司第19頁HBase數(shù)據(jù)模型–ColumnFamily/hbasHBase數(shù)據(jù)模型
–
KeyVaueHBase的底層數(shù)據(jù)都是以KeyValue的形式存在的。KeyValue具有特定的格式。KeyValue中擁有時間戳、類型等關(guān)鍵信息。同一個Key值可以關(guān)聯(lián)多個KeyValue,每一個KeyValue都擁有一個Qualifier標識。即使是Key值相同,Qualifier也相同的多個KeyValue,也可能有多個,此時使用時間戳來區(qū)分,這就是同一條數(shù)據(jù)記錄的多版本。/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版權(quán)所有?
2015
華為技術(shù)有限公司第20頁HBase數(shù)據(jù)模型–KeyVaueHBase的底層數(shù)據(jù)HBase數(shù)據(jù)模型
–
HFile從HFile文件中讀取數(shù)據(jù)的流程:Trailer版權(quán)所有?
2015
華為技術(shù)有限公司第21頁RootData
IndexMeta
IndexFileInfoLeafData
IndexLeafData
IndexLeafData
IndexData
BlockData
BlockData
BlockHBase數(shù)據(jù)模型–HFile從HFile文件中讀取數(shù)據(jù)目錄版權(quán)所有?
2015
華為技術(shù)有限公司第22頁1.
HBase應用場景2. HBase功能與架構(gòu)3.
HBase關(guān)鍵流程4.
HBase常用命令和參數(shù)目錄版權(quán)所有?2015華為技術(shù)有限公司第22頁1. HB寫流程
–
涉及的關(guān)鍵角色RegionRegionServerZooKeeperClient版權(quán)所有?
2015
華為技術(shù)有限公司第23頁寫流程–涉及的關(guān)鍵角色RegionRegionServe寫流程
–
客戶端發(fā)起寫數(shù)據(jù)請求Client客戶端寫數(shù)據(jù)代碼示例://
初始化配置信息Configurationconf
=
HBaseConfiguration.create();//
插入一行數(shù)據(jù)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);版權(quán)所有?
2015
華為技術(shù)有限公司第24頁構(gòu)建Put對象:一個Put對象代表一行數(shù)據(jù)記錄,可以添加多個列的數(shù)據(jù)。如上例所示,RowKey為“012005000201”,包含3個列:name,gender,address。Put
or
PutList?HBase提供了兩個主要的寫數(shù)據(jù)接口,一個可以寫入單行數(shù)據(jù),即Put接口,另一個可以批量寫入多行數(shù)據(jù),即PutList接口。事實上,Put僅是PutList的一種特殊情形。因此,后面的流程介紹僅僅涉及PutList。寫流程–客戶端發(fā)起寫數(shù)據(jù)請求Client客戶端寫數(shù)據(jù)代碼寫流程
–
定位RegionUserRegionMETARegionRegionLocation版權(quán)所有?
2015
華為技術(shù)有限公司第25頁寫流程–定位RegionUserRegionMETAR寫流程
–
數(shù)據(jù)分組整個數(shù)據(jù)分組,涉及到兩步“分籃子”操作:
將所有的記錄按Region劃分。將所有的記錄按RegionServer劃分。每個RegionServer上的數(shù)據(jù)會一起發(fā)送,這樣,發(fā)送的數(shù)據(jù)中,都是已經(jīng)按照Region分好組了。版權(quán)所有?
2015
華為技術(shù)有限公司第26頁寫流程–數(shù)據(jù)分組整個數(shù)據(jù)分組,涉及到兩步“分籃子”操作:寫流程
–
往RegionServer發(fā)送寫數(shù)據(jù)請求利用HBase自身封裝的RPC框架,來完成數(shù)據(jù)發(fā)送操作。往多個RegionServer發(fā)送請求是并行操作。客戶端發(fā)送完寫數(shù)據(jù)請求后,會自動等待請求處理結(jié)果。如果客戶端沒有捕獲到任何的異常,則認為所有的數(shù)據(jù)都已經(jīng)被寫入成功。如果全部寫入失敗,或者部分寫入失敗,客戶端能夠獲知詳細的失敗Key值列表。從這里也可以看出,PutList操作是不保證原子性的。版權(quán)所有?
2015
華為技術(shù)有限公司第27頁寫流程–往RegionServer發(fā)送寫數(shù)據(jù)請利用HB寫流程
–
Region寫數(shù)據(jù)流程獲取Region操作鎖依次獲取各行行鎖寫入到MemStore中寫數(shù)據(jù)到WAL中釋放已獲取的行鎖釋放Region鎖讀寫鎖既然是Write-
Ahead-Log,為何先寫內(nèi)存再寫WAL?一個內(nèi)存排序集合版權(quán)所有?
2015
華為技術(shù)有限公司第28頁HBase提供了一個MVCC機制,來保障寫數(shù)據(jù)階段的數(shù)據(jù)可見性。先寫MemStore再寫WAL,是為了一些特殊場景下,內(nèi)存中的數(shù)據(jù)能夠更及時的可見。如果寫WAL失敗的話,MemStore中的數(shù)據(jù)會被回滾。寫流程–Region寫數(shù)據(jù)流程獲取Region操作鎖依次寫流程
–
HBase
LSMTree
將Put/Delete的數(shù)據(jù)暫時保存在每個Region的內(nèi)存中,即MemStore中。寫內(nèi)存,避免多Region情形下帶來的過多的分散IO操作。
數(shù)據(jù)在寫入到MemStore之后,也會順序?qū)懭氲紿Log中,來保證數(shù)據(jù)的安全。版權(quán)所有?
2015
華為技術(shù)有限公司第29頁寫流程–HBaseLSMTree將Put/Del寫流程
–
FlushRegionMemStore-1(ColumnFamily-1)MemStore-2(ColumnFamily-2)HFileHFile存在如下兩種場景,會觸發(fā)一個Region的Flush操作:該Region的MemStore的總大小,達到了預設的Flush
Size閾值。這種場景下的Flush操作,通常僅瞬間堵塞用戶的讀寫操作。但如果超出預設Flush
Size閾值過多的話,也可能會引起較長時間的堵塞。
RegionServer的總內(nèi)存大小超出了預設的閾值大小。這種場景下,在總內(nèi)存沒有降低到預設的閾值以下之前,可能會較長時間堵塞。版權(quán)所有?
2015
華為技術(shù)有限公司第30頁寫流程–FlushRegionMemStore-1Mem寫流程
–
多HFile的影響隨著時間的不斷遷移,HFile文件數(shù)目越來越多,讀取時延也越來越大!版權(quán)所有?
2015
華為技術(shù)有限公司第31頁寫流程–多HFile的影響隨著時間的不斷遷移,HFile寫流程
–
CompactionCompaction的主要目的,是為了減少同一個Region同一個ColumnFamily
下面的小文件數(shù)目,從而提升讀取的性能。Compaction分為Minor、Major兩類:Minor:小范圍的Compaction。有最少和最大文件數(shù)目限制。通常會選擇一些連續(xù)時間范圍的小文件進行合并。Major:涉及該Region該ColumnFamily下面的所有的HFile文件。Major
Compaction過程中,會清理被刪除的數(shù)據(jù)。Minor
Compaction選取文件時,遵循一定的算法。HFileHFileHFileHFile
HFile
HFileMinor
CompactionHFileMemStoreputHFileHFileHFileHFileMajor
CompactionFlushWrite版權(quán)所有?
2015
華為技術(shù)有限公司第32頁寫流程–CompactionCompaction的主要目寫流程
–
SplitDaughterRegion-1DaughterRegion-2
普通的Region
Split操作,是指集群運行期間,某一個Region的數(shù)據(jù)大小超出了預設的閾值,則需要將該Region自動分裂成為兩個子Region。
分裂過程中,被分裂的Region會暫停一些讀寫服務。由于分裂過程中,父Region的數(shù)據(jù)文件并不會真正的分裂并重寫到兩個子Region中,而是僅僅通過在新Region中創(chuàng)建引用文件的方式,來實現(xiàn)快速的分裂。因此,Region暫停服務的時間會比較短暫。
客戶端側(cè)所緩存的父Region的路由信息需要被更新。思考:普通的Region
Split操作,為何僅僅將一個Region分裂成兩個Region?能否分裂成多個?ParentRegion版權(quán)所有?
2015
華為技術(shù)有限公司第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值的情形下,讀取單行用戶數(shù)據(jù)Scan操作代碼示例:HTable
table
=
null;ResultScannerrScanner
=
null;try
{table
=
new
HTable(conf,
tableName);Scanscan
=
new
Scan();scan.setStartRow(startRow);scan.setStopRow(stopRow);//
重要參數(shù):每次RPC從服務端取回的記錄數(shù)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值范圍內(nèi)的用戶數(shù)據(jù)版權(quán)所有?
2015
華為技術(shù)有限公司第34頁讀流程–GetorScanRegionGetGet操讀流程
–
OpenScannerRegionColumnFamily-1
MemStoreHFile-11
HFile-12
HFile-13ColumnFamily-2
MemStoreHFile-21
HFile-22
HFile-23思考:一個Region可能有多個列族…一個列族,可能包含有多個HFile文件,同時,還有部分數(shù)據(jù)存在于MemStore中,尚未固化…如何讀取,才可以讀到想要的用戶數(shù)據(jù)?OpenScanner的過程,會為MemStore,以及各個HFile創(chuàng)建所對應的Scanner:版權(quán)所有?
2015
華為技術(shù)有限公司第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.版權(quán)所有?
2015
華為技術(shù)有限公司第36頁
每一個Scanner中,都有一個指針,指向接下來要讀取的用戶數(shù)據(jù)KeyValue是哪一個。
同一級的Scanner,被放在同一個優(yōu)先級隊列中。通過不斷的對比每一個Scanner的指針所指向的KeyValue,將這些Scanner進行排序。
每一次next請求,都是從該優(yōu)先級隊列中,Poll出一個Scanner,然后,讀取該Scanner的當前指針所指向的KeyValue即可。
每一次讀完一個Scanner,指針都會往下移一個KeyValue。而后,該Scanner被返還到隊列中。如果已經(jīng)讀完,則直接關(guān)閉。nextnext讀流程–NextScannerACurrentKe讀流程
–
FilterScan過程中使用Filter代碼示例:Scans=
new
Scan();//
前綴過濾器,查找RowKey以“132”開頭的行s.setFilter(new
PrefixFilter(Bytes.toBytes("132")));//
查找符合條件的6行數(shù)據(jù)s.setFilter(new
PageFilter(6));//
多個過濾器結(jié)合使用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過程中,設定一定的過濾條件。符合條件的用戶數(shù)據(jù)才返回。
當前包含的一些典型的Filter有:RowFilter版權(quán)所有?
2015
華為技術(shù)有限公司第37頁?SingleColumnValueFilterKeyOnlyFilterFilterList? ………
使用Filter時,可能會掃描大量的用戶數(shù)據(jù),才可以找到所期望的滿足條件的數(shù)據(jù)。因此,一些場景下的性能是不可預估的。Satisfied
RowSatisfied
RowSatisfied
Row讀流程–FilterScan過程中使用Filter代碼示讀流程
–
BloomFilter
BloomFilter被用來優(yōu)化一些隨機讀取的場景,即Get場景。
它可以被用來快速的判斷一條用戶數(shù)據(jù)在一個大的數(shù)據(jù)集合(該數(shù)據(jù)集合的大部分數(shù)據(jù)都沒法被加載到內(nèi)存中)中是否存在。右圖給出了BloomFilter的基礎(chǔ)原理。
BloomFilter在判斷一個數(shù)據(jù)是否存在時,擁有一定的誤判率。但對于“用戶數(shù)據(jù)
XXXX不存在”的判斷結(jié)果是可信的。HBase的BloomFilter的相關(guān)數(shù)據(jù),被保存在HFile中。數(shù)據(jù)寫入階段,對用戶數(shù)據(jù)進行N次Hash,并且將映射到的對應的位改為1版權(quán)所有?
2015
華為技術(shù)有限公司第38頁數(shù)據(jù)讀取階段,對用戶數(shù)據(jù)進行N次Hash,判斷對應的位是否為1讀流程–BloomFilterBloomFilt目錄版權(quán)所有?
2015
華為技術(shù)有限公司第39頁1. HBase應用場景HBase功能與架構(gòu)HBase關(guān)鍵流程4. HBase常用命令和參數(shù)目錄版權(quán)所有?2015華為技術(shù)有限公司第39頁1. HB常用接口版權(quán)所有?
2015
華為技術(shù)有限公司第40頁客戶端使用主要方式:HBaseShellHBase的命令行工具,最簡單的接口,適合HBase管理使用。Java
API
HBase客戶端程序通過底層RPC接口與HBase集群進行通信,客戶程序直接集成HBase的Java包,通過調(diào)用相關(guān)API即可完成操作。其余接口:REST
接口REST(Representational
State
Transfer)表述性狀態(tài)轉(zhuǎn)移接口。Thrift接口Thrift
是一個基于靜態(tài)代碼生成的跨語言的RPC協(xié)議棧實現(xiàn),它可以生成包括C++,
Java,
Python,
Ruby,
PHP
等主流語言的代碼,這些代碼實現(xiàn)了
RPC
的協(xié)議層和傳輸層功能,從而讓用戶可以集中精力于服務的調(diào)用和實現(xiàn)。Avro接口Avro是一個數(shù)據(jù)序列化系統(tǒng),設計用于支持大批量數(shù)據(jù)交換的應用。常用接口版權(quán)所有?2015華為技術(shù)有限公司第40頁客戶端HBase
Shell
–連接通過/hbase
shell來連接正在運行的HBase
Shell客戶端用法:版權(quán)所有?
2015
華為技術(shù)有限公司第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)建表時,可以選擇多個參數(shù),但表名和列族名是必須的參數(shù),其它參數(shù)還包括版本數(shù)、TTL
以及預分Region建表的key數(shù)組等用法: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'}版權(quán)所有?
2015
華為技術(shù)有限公司第42頁HBaseShell–創(chuàng)建表創(chuàng)建表時,可以選擇多個參數(shù)HBase
Shell
–插入一行數(shù)據(jù)PutPut數(shù)據(jù)時,必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時間戳用法:hbase>put
't1',
'r1','c1',
'value',
ts1例如,向表test中put三條數(shù)據(jù),并通過count命令計算test表中的數(shù)據(jù)的條數(shù)示例://向表test中put數(shù)據(jù),RowKey為rowkey1,列族名為cf,列名為qualifier1,值為value1版權(quán)所有?
2015
華為技術(shù)有限公司第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–插入一行數(shù)據(jù)PutPut數(shù)據(jù)時,HBase
Shell
–讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時,必選參數(shù)是表名和RowKey,可選參數(shù)包括列名(包括列族和列名)、時間戳、版本數(shù)等用法:版權(quán)所有?
2015
華為技術(shù)有限公司第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–讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時HBase
Shell
–讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選參數(shù)是表名,可選參數(shù)包括列名(包括列族和列名)、起止Key、Filter用法://查詢元表版權(quán)所有?
2015
華為技術(shù)有限公司第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–讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù)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)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湖北省2023-2024學年普通高中學業(yè)水平合格性考試仿真模擬卷英語試卷
- 中國車座墊行業(yè)市場調(diào)查研究及投資前景預測報告
- 四年級數(shù)學(四則混合運算)計算題專項練習與答案
- 桁架式電動升降雷達塔 7米高透波玻璃鋼避雷針 玻璃纖維照明燈桿
- 餐飲知識類培訓課件圖片
- 年產(chǎn)80萬套制動鼓輪轂提質(zhì)升級項目可行性研究報告模板-立項備案
- 樹立正確職業(yè)心態(tài)
- 車床數(shù)控知識培訓課件
- 生成式人工智能的教育應用與展望-以ChatGPT 系統(tǒng)為例
- 臨床類風濕關(guān)節(jié)炎疾病概述、臨床表現(xiàn)、治療原則、要護理問題、相關(guān)因素、護理重點及健康指導
- 代縣雁門光伏升壓站~寧遠220kV線路工程環(huán)評報告
- 承諾函(支付寶)
- 危險化學品目錄2023
- FZ/T 81024-2022機織披風
- GB/T 24123-2009電容器用金屬化薄膜
- 艾滋病梅毒乙肝實驗室檢測
- 國鐵橋梁人行道支架制作及安裝施工要點課件
- 領(lǐng)導科學全套精講課件
- 粵教版地理七年級下冊全冊課件
- 小學科學蘇教版六年級上冊全冊精華知識點(2022新版)
- 萎縮性胃炎共識解讀
評論
0/150
提交評論