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

下載本文檔

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

文檔簡介

1、版權所有 2015 華為技術有限公司HBase介紹第1頁.前言.第1頁HBase是一個高可靠性、高性能、面向列、可伸縮的分布式 數(shù)據(jù)庫,設計目標是用來解決關系型數(shù)據(jù)庫在處理海量數(shù)據(jù) 時的局限性。本章主要介紹HBase的應用場景、功能與架構、關鍵流程、 常用命令和參數(shù)。目標.第2頁學完本課程后,您將能夠:了解HBase的組成架構熟悉HBase的基本功能目錄.第3頁1.HBase應用場景HBase功能與架構HBase關鍵流程4.HBase常用命令和參數(shù)簡介.第4頁HBase是一個開源的非關系型分布式數(shù)據(jù)庫(NoSQL),它 參考了谷歌的BigTable建模,實現(xiàn)的編程語言為 Java。HBase是

2、一個分布式存儲系統(tǒng),具有高可靠性、高性能、面向列、可伸縮的特點。HBase利用Hadoop HDFS作為其文件存儲系統(tǒng)需求場景.第5頁HBase適合具有如下需求的應用:海量數(shù)據(jù)(TB、PB)高吞吐量需要在海量數(shù)據(jù)中實現(xiàn)高效的隨機讀取需要很好的性能伸縮能力能夠同時處理結構化和非結構化的數(shù)據(jù)不需要完全擁有傳統(tǒng)關系型數(shù)據(jù)庫所具備的ACID特性誰在用HBase ?.第6頁目錄.第7頁1.HBase應用場景HBase功能與架構HBase關鍵流程4.HBase常用命令和參數(shù)部署架構 架構.第8頁HBase模塊 RegionRow001 Row002.Row010Row011 Row012.Row020Ro

3、w021Row022. Row030Row031.Region-1StartKey,EndKeyRegion-2StartKey,EndKeyRegion-3StartKey,EndKeyRegion-4StartKey,EndKey 將一個數(shù)據(jù)表按Key值范圍橫向劃分為一個個 的子表,實現(xiàn)分布式存儲。 這個子表,在HBase中被稱作“Region”。每一個Region都關聯(lián)一個Key值范圍,即一個 使用StartKey和EndKey描述的區(qū)間。事實上,每 一個Region僅僅記錄StartKey就可以了,因為它 的EndKey就是下一個Region的StartKey。Region是HBase

4、分布式存儲的最基本單元。TableName? StartKey?Region.第9頁Row001Row002.Row010Row011Row012.Row020Row021Row022.Row030Row031.HBase模塊 Region與RegionServerRegionServer是HBase的數(shù)據(jù)服務進程。負責處理 用戶數(shù)據(jù)的讀寫請求。Region被交由RegionServer管理。實際上,所有 用戶數(shù)據(jù)的讀寫請求,都是和RegionServer上的 Region進行交互。Region可以在RegionServer之間發(fā)生轉移。RegionRegionRegionServer思考:一

5、個Region包含了一個Startkey和EndKey范圍;一條用戶數(shù)據(jù)KeyValue必然屬于一個唯一的Region; Region由RegionServer來管理,那么,這個路由信 息保存在哪里呢?Region如何才可以轉移?由誰負責轉移?Region.第10頁HBase模塊 Region分類Region分為元數(shù)據(jù)Region以及用 戶Region兩類。Meta Region記錄了每一個User Region的路由信息。讀寫Region數(shù)據(jù)的路由,包括如下 幾步:找尋Meta Region地址。再由Meta Region找尋User Region地址。RegionRegionRegionR

6、egionRegionMETARegion.第11頁HBase模塊 HMasterMaster進程負責管理所有的RegionServer。新RegionServer的注冊。RegionServer Failover處理。 負責建表/修改表/刪除表以及一些集群操作。Master進程負責所有Region的轉移操作。 新表創(chuàng)建時的Region分配。 運行期間的負載均衡保障。RegionServer Failover后的Region接管。 Master進程有主備角色。集群可以配置多個 Master角色,集群啟動時,這些Master角色通過競 爭獲得主Master角色。主Master只能有一個,所有 的

7、備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.”.第12頁HBase模塊 Zookeeper 提供分布式鎖的服務例如,多個Master進程競爭主Master角色時,怎么樣 保證僅有一

8、個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的地址, 此時,可以將

9、它理解成一個微型數(shù)據(jù)庫?!癕aster-1, Congratulations! You are the active one!”“Sorry, Master-2. The active seat has been taken by others. Please be patient!”.第13頁數(shù)據(jù)結構介紹 三種結構具有固定的結構,屬性劃分,以及類型等信息。我們通常所理解的關系 型數(shù)據(jù)庫中所存儲的數(shù)據(jù)信息,大多是結構化數(shù)據(jù), 如職工信息表,擁 有ID、Name、Phone、Address等屬性信息。通常直接存放在數(shù)據(jù)庫表中。數(shù)據(jù)記錄的每一個屬性對應數(shù)據(jù)表的一個 字段。結構化數(shù)據(jù)非結構化數(shù)據(jù).第

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

11、件系統(tǒng)中。通常,每一 行會被分配固定的空間。 優(yōu)點:有利于增加/修改整行記錄等操作; 有利于整行數(shù)據(jù)的讀取操作; 缺點:單列查詢時,會讀取一些不必要 的數(shù)據(jù)。按列存儲:數(shù)據(jù)以列為單位,存儲在底層文件系統(tǒng)中。 優(yōu)點:有利于面向單列數(shù)據(jù)的讀取/統(tǒng)計等操作。 缺點:整行讀取時,可能需要多次I/O操 作。可以看出,無論是按行存儲,還是按列存儲,都有明顯的優(yōu)缺點。是否存在一種折衷的方案?.第15頁IDNamePhoneAddress數(shù)據(jù)結構介紹 KeyValue結構(1)IDNameAddressPhoneKeyValue具有特定的結構。Key部分被用來快速的檢索一條數(shù)據(jù)記錄,Value部分用來存儲實際

12、的用戶數(shù)據(jù)信息。KeyValue作為承載用戶數(shù)據(jù)的基本單元,需要保存一些對自身的描述信息,例如,時間戳,類型等等。那么,勢必 會有一定的結構化空間開銷。一個Key值對應一個Value?還是一個Key值可以對應多個Value?Value-ID01Key-01Value-Name01Key-01Value-Phone01Key-01Value-Address01Key-01.第16頁Relational DatabaseKeyValue DatabaseDatabase contains tables, tables contain columns and rows, and rows are m

13、ade up of column values. Rows within a table all have the same schema.The data model is well defined in advance. A schema is strongly typed and it has constraints and relationships that enforce data integrity.The data model is based on a “natural” representation of the data it contains, not on an ap

14、plications functionality.The data model is normalized to remove data duplication. Normalization establishes table relationships.Relationships associate data between tables.Domains can initially be thought of like a table, but unlike a table you dont define any schema for a domain. A Domain is basica

15、lly a bucket that you put items into. Items within a single domain can have differing schemas.Items are identified by keys, and a given item can have a dynamic set of attributes attached to it.In some implementations, attributes are all of a string type. In other implementations, attributes have sim

16、pletypes that reflect code types, such as ints, string arrays, and lists.No relationships are explicitly defined between domains or within a given domain.數(shù)據(jù)結構介紹 KeyValue結構(2)初始運行階段,將Hash環(huán)劃分為幾個相等弧長 的區(qū)間,每一個Hash區(qū)間對應一個Node。對用戶數(shù)據(jù)KeyValue的Key值進行Hash,落到 哪個Hash區(qū)間,就屬于哪個Node。節(jié)點出現(xiàn)宕機時,將由該節(jié)點順時針方向的下 一個節(jié)點接管相應的數(shù)據(jù),避

17、免出現(xiàn)大范圍的Re- Hash操作。新節(jié)點加入時,從上一個節(jié)點到新節(jié)點之間的 數(shù)據(jù),需要Re-Hash到新的節(jié)點中。一致性Hash盡管一定程度上可以保證負載的均 勻性,但在節(jié)點頻繁宕機,或頻繁重啟的情形下, 可能會導致負載的極不均勻。.第17頁KeyValue型數(shù)據(jù)庫數(shù)據(jù)分區(qū)方式-一致性Hash分區(qū)數(shù)據(jù)結構介紹 KeyValue結構(3)0102050603040708091011121314151601050206091310140307111504081216數(shù)據(jù)按照RowKey的范圍(按一定的排序算法排序的結果,如按RowKey的字典順序),劃分為一個個的子區(qū)間。每 一個子區(qū)間都是一個分

18、布式存儲的基本單元.第18頁Node1Node2Node3Node4KeyValue型數(shù)據(jù)庫數(shù)據(jù)分區(qū)方式-按Key值連續(xù)范圍分區(qū)HBase數(shù)據(jù)模型 Column Family/hbase/table/region-1/region-2/region-3HDFSColumnFamily是Region的一個物理存儲單元。同一個Region下面的多個ColumnFamily,位于不同的路徑下面。ColumnFamily信息是表級別的配置。也就是說,同一個表的多個Region,都擁有相同的ColumnFamily信息(例如,都有兩個ColumnFamily,且不同Region的同一個ColumnFam

19、ily配置信息相同)/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面向列存儲?.第19頁HBase數(shù)據(jù)模型 KeyVaueHBase的底層數(shù)據(jù)都是以KeyValue的形式存在的。KeyValue具有特定的格式。KeyValue中擁有時間戳、

20、類型等關鍵信息。同一個Key值可以關聯(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.第20頁HBase數(shù)據(jù)模

21、型 HFile從HFile文件中讀取數(shù)據(jù)的流程:Trailer.第21頁Root Data IndexMeta IndexFileInfoLeaf Data IndexLeaf Data IndexLeaf Data IndexData BlockData BlockData Block目錄.第22頁1.HBase應用場景2.HBase功能與架構3.HBase關鍵流程4.HBase常用命令和參數(shù)寫流程 涉及的關鍵角色RegionRegionServerZooKeeperClient.第23頁寫流程 客戶端發(fā)起寫數(shù)據(jù)請求Client客戶端寫數(shù)據(jù)代碼示例:/ 初始化配置信息Configuratio

22、n conf = 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.t

23、oBytes(廣東省深圳市);table.put(put);.第24頁構建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。寫流程 定位RegionUser RegionMETARegionRegion Location.第25

24、頁寫流程 數(shù)據(jù)分組整個數(shù)據(jù)分組,涉及到兩步“分籃子”操作: 將所有的記錄按Region劃分。將所有的記錄按RegionServer劃分。每個RegionServer上的數(shù)據(jù)會一起發(fā)送,這 樣,發(fā)送的數(shù)據(jù)中,都是已經(jīng)按照Region分 好組了。.第26頁寫流程 往RegionServer發(fā)送寫數(shù)據(jù)請求利用HBase自身封裝的RPC框架,來完成數(shù)據(jù)發(fā)送操作。往多個RegionServer發(fā)送請求是并行 操作??蛻舳税l(fā)送完寫數(shù)據(jù)請求后,會自動 等待請求處理結果。如果客戶端沒有捕獲到任何的異常,則認為所有的數(shù)據(jù)都已經(jīng)被寫入成功。如果全部寫入失敗,或者部分寫入失敗,客戶端能夠獲知詳細的失敗Key值列表。

25、從這里也可以看出,PutList操作是不 保證原子性的。.第27頁寫流程 Region寫數(shù)據(jù)流程獲取Region操作鎖依次獲取各行行鎖寫入到MemStore中寫數(shù)據(jù)到WAL中釋放已獲取的行鎖釋放Region鎖讀寫鎖既然是Write- Ahead-Log,為何 先寫內存再寫WAL?一個內存排序集合.第28頁HBase提供了一個MVCC機制,來保障寫數(shù)據(jù)階段的 數(shù)據(jù)可見性。先寫MemStore再寫WAL,是為了一些 特殊場景下,內存中的數(shù)據(jù)能夠更及時的可見。如 果寫WAL失敗的話,MemStore中的數(shù)據(jù)會被回滾。寫流程 HBase LSM Tree 將Put/Delete的數(shù)據(jù)暫時保存在每個Re

26、gion的內存中,即MemStore中。寫內存,避免多Region情形下帶來的過多 的分散IO操作。 數(shù)據(jù)在寫入到MemStore之后,也會順序 寫入到HLog中,來保證數(shù)據(jù)的安全。.第29頁寫流程 FlushRegionMemStore-1(ColumnFamily-1)MemStore-2(ColumnFamily-2)HFileHFile存在如下兩種場景,會觸發(fā)一個Region的Flush操作:該Region的MemStore的總大小,達到了預設的Flush Size閾值。這種場景下的 Flush操作,通常僅瞬間堵塞用戶的讀寫操作。但如果超出預設Flush Size閾值 過多的話,也可能

27、會引起較長時間的堵塞。 RegionServer的總內存大小超出了預設的閾值大小。這種場景下,在總內存沒 有降低到預設的閾值以下之前,可能會較長時間堵塞。.第30頁寫流程 多HFile的影響隨著時間的不斷遷移,HFile文件數(shù)目越來越多,讀取時延也越來越大!.第31頁寫流程 CompactionCompaction的主要目的,是為了減少同一個Region同一個ColumnFamily 下面的小文件數(shù)目,從而提升讀取的性能。Compaction分為Minor、Major兩類:Minor:小范圍的Compaction。有最 少和最大文件數(shù)目限制。通常會選擇 一些連續(xù)時間范圍的小文件進行合并。Maj

28、or:涉及該Region該ColumnFamily下面的所有的HFile文件。Major Compaction過程中,會清理被 刪除的數(shù)據(jù)。Minor Compaction選取文件時,遵 循一定的算法。HFileHFileHFileHFileHFileHFileMinor CompactionHFileMemStoreputHFileHFileHFileHFileMajor CompactionFlushWrite.第32頁寫流程 SplitDaughter Region-1Daughter Region-2 普通的Region Split操作,是指集群運行期間,某一 個Region的數(shù)據(jù)大小

29、超出了預設的閾值,則需要將該 Region自動分裂成為兩個子Region。 分裂過程中,被分裂的Region會暫停一些讀寫服務。 由于分裂過程中,父Region的數(shù)據(jù)文件并不會真正的 分裂并重寫到兩個子Region中,而是僅僅通過在新 Region中創(chuàng)建引用文件的方式,來實現(xiàn)快速的分裂。 因此,Region暫停服務的時間會比較短暫。 客戶端側所緩存的父Region的路由信息需要被更新。思考:普通的Region Split操作,為何僅僅將一 個Region分裂成兩個Region?能否分裂成 多個?Parent Region.第33頁讀流程 Get or ScanRegionScanGetGet操

30、作代碼示例: 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.ge

31、tQualifier() + + kv.getTimestamp() + + kv.getValue() + ); catch (IOException e) / TODO finally if (null != table) try table.close(); catch (IOException e) / TODOscan.setCaching(1000);Get操作在提供精確的Key值的情形下,讀取單行用戶數(shù)據(jù)Scan操作代碼示例:HTable table = null; ResultScanner rScanner = null; try table = new HTable(con

32、f, tableName); Scan scan = 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 (IOException e) / TODO finally if (null != rScanne

33、r) rScanner.close();if (null != table) try table.close(); catch (IOException e) / TODOScan操作是為了批量掃描限定Key值范圍內的用戶數(shù)據(jù).第34頁讀流程 OpenScannerRegionColumnFamily-1 MemStoreHFile-11 HFile-12 HFile-13ColumnFamily-2 MemStoreHFile-21 HFile-22 HFile-23思考:一個Region可能有多個列族一個列族,可能包含有多個HFile文件,同時,還有部分數(shù)據(jù)存在于MemStore中,尚未固

34、 化如何讀取,才可以讀到想要的用戶數(shù)據(jù)?OpenScanner的過程,會為MemStore,以及各個HFile創(chuàng)建所對應的Scanner:.第35頁MemStore對應的Scanner為MemStoreScanner。HFile對應的Scanner為StoreFileScanner。讀流程 NextScanner A Current KeyValue: Row01,FamiA:col1Scanner B Current KeyValue: Row01,FamiB:col1Scanner C Current KeyValue: Row01,FamiC:col1Scanner D Current

35、KeyValue: Row01,FamiD:col1Scanner AScanner B Current KeyValue: Row01,FamiB:col1Scanner C Current KeyValue: Row01,FamiC:col1Scanner D Current KeyValue: Row01,FamiD:col1PollFinished?YcloseThis is a PriorityQueue, it uses a Comparator to sort all elements.Scanner A Current KeyValue: Row01,FamiA:col2Sca

36、nner B Current KeyValue: Row01,FamiB:col1Scanner C Current KeyValue: Row01,FamiC:col1Scanner D Current KeyValue: Row01,FamiD:col1Suppose the scanning for Row01 is not finished in Scanner A. So this scanner will still present at the first place of the QueueScanner A Current KeyValue: Row02,FamiA:col1

37、N: Put backScanner AFinished?YcloseN: Put backPollSuppose the scanning for Row01 is finished in Scanner A. So this scanner will be put at the end of the Queue.第36頁 每一個Scanner中,都有一個指 針,指向接下來要讀取的用戶數(shù)據(jù) KeyValue是哪一個。 同一級的Scanner,被放在同一 個優(yōu)先級隊列中。通過不斷的對比 每一個Scanner的指針所指向的 KeyValue,將這些Scanner進行排 序。 每一次next請求,

38、都是從該優(yōu) 先級隊列中,Poll出一個Scanner, 然后,讀取該Scanner的當前指針 所指向的KeyValue即可。 每一次讀完一個Scanner,指針 都會往下移一個KeyValue。而后, 該Scanner被返還到隊列中。如果 已經(jīng)讀完,則直接關閉。nextnext讀流程 FilterScan過程中使用Filter代碼示例:Scan s = new Scan();/ 前綴過濾器,查找RowKey以“132”開頭的行s.setFilter(new PrefixFilter(Bytes.toBytes(132);/ 查找符合條件的6行數(shù)據(jù)s.setFilter(new PageFilt

39、er(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過程中,設定一定的過濾條件。符合條件的用戶數(shù)據(jù)才返回。當前包含的一些典型的Filter有:RowFilter.第37頁SingleColumnValu

40、eFilterKeyOnlyFilterFilterList使用Filter時,可能會掃描大量的用戶數(shù)據(jù),才可以找到所期望的滿足條件的數(shù)據(jù)。因此,一些場景下的性能是不可預估的。Satisfied RowSatisfied RowSatisfied Row讀流程 BloomFilter BloomFilter被用來優(yōu)化一些隨機讀取的場景, 即Get場景。 它可以被用來快速的判斷一條用戶數(shù) 據(jù)在一個大的數(shù)據(jù)集合(該數(shù)據(jù)集合的大部分數(shù)據(jù) 都沒法被加載到內存中)中是否存在。右圖給出了BloomFilter的基礎原理。 BloomFilter在判斷一個數(shù)據(jù)是否存在時,擁有 一定的誤判率。但對于“用戶數(shù)據(jù)

41、 XXXX不存在” 的判斷結果是可信的。HBase的BloomFilter的相關數(shù)據(jù),被保存在 HFile中。數(shù)據(jù)寫入階段,對用戶數(shù)據(jù)進行N次Hash,并且將映射到的對應的位改為1.第38頁數(shù)據(jù)讀取階段,對用戶數(shù)據(jù)進行N次Hash,判斷對應的位是否為1目錄.第39頁1.HBase應用場景HBase功能與架構HBase關鍵流程4.HBase常用命令和參數(shù)常用接口.第40頁客戶端使用主要方式:HBase ShellHBase的命令行工具,最簡單的接口,適合 HBase管理使用。Java API HBase客戶端程序通過底層RPC接口與HBase集群進行通信,客戶程序直接集成HBase的Java包,

42、通過調用相關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是一個數(shù)據(jù)序列化系統(tǒng),設計用于支持大批量數(shù)據(jù)交換 的應用。HBase Shell 連接通過/hbase shell來連接正在運行的HBase Shell客戶端用法:.第4

43、1頁# .bin/hbase shellHBase Shell; enter help for list of supported Type exit to leave the HBase ShellVersion 0.94.0, r, Sun Aug 26 22:12:56 CST 2012commands.hbase(main):001:0HBase Shell 創(chuàng)建表創(chuàng)建表時,可以選擇多個參數(shù),但表名和列族名是必須的參數(shù),其它參數(shù)還包括版本數(shù)、TTL 以及預分Region建表的key數(shù)組等用法:hbase create t1, NAME = f1, VERSIONS = 5hbase c

44、reate t1, NAME = f1, NAME = f2, NAME = f3hbase # The above in shorthand would be the following: hbase create t1, f1, f2, f3hbase create t1, NAME = f1, VERSIONS = 1, TTL = 2592000, BLOCKCACHE = true hbase create t1, f1, SPLITS = 10, 20, 30, 40hbase create t1, f1, SPLITS_FILE = splits.txt hbase # Opti

45、onally pre-split the table into NUMREGIONS, usinghbase # SPLITALGO (HexStringSplit, UniformSplit or classname)hbase create t1, f1, NUMREGIONS = 15, SPLITALGO = HexStringSplit.第42頁HBase Shell 插入一行數(shù)據(jù)PutPut數(shù)據(jù)時,必選參數(shù)是表名、RowKey、列名(包括列族和列名)和值,可選參數(shù)包括時間戳用法:hbase put t1, r1, c1, value, ts1例如,向表test中put三條數(shù)據(jù),并通

46、過count命令計算test表中的數(shù)據(jù)的條數(shù) 示例:/向表test中put數(shù)據(jù),RowKey為rowkey1,列族名為cf,列名為qualifier1,值為value1.第43頁hbase(main):002:0 0 row(s) in 0.5940 hbase(main):003:0 0 row(s) in 0.0080/指定時間戳為3 hbase(main):011:0 0 row(s) in 0.0510 hbase(main):013:0 3 row(s) in 0.0160put test,rowkey1,cf:qualifier1,value1 secondsput test,ro

47、wkey2,cf:qualifier2,value2 secondsput test,rowkey3,cf:qualifier3,value3,3 secondscount test secondsHBase Shell 讀取一行數(shù)據(jù)Get查詢一行數(shù)據(jù)時,必選參數(shù)是表名和RowKey,可選參數(shù)包括列名(包括列族和列名)、時間戳、版本數(shù)等用法:.第44頁hbase hbase hbase hbase hbase hbaseget t1,get t1,get t1,get t1,get t1,get t1,r1 r1,r1,r1,r1,r1,TIMERANGE= ts1, ts2= c1= c1,

48、 c2, c3=COLUMNCOLUMNCOLUMNCOLUMNc1,c1,TIMESTAMP TIMERANGE= ts1= ts1,ts2,VERSIONS = 4hbase get VERSIONS = 4t1,r1,COLUMN = c1,c1c1, c2c1, c2TIMESTAMP= ts1,hbase hbase hbaseget t1,get t1,get t1,r1,r1,r1,HBase Shell 讀取多行數(shù)據(jù)Scan查詢多行數(shù)據(jù),必選參數(shù)是表名,可選參數(shù)包括列名(包括列族和列名)、起止Key、Filter用法:/查詢元表.第45頁hbase hbase hbase hb

49、ase hbasescan scan scan scan scan.META.META., COLUMNS = info:regioninfot1,t1,t1,COLUMNS = c1, c2, LIMIT = 10, STARTROW = xyzCOLUMNS = c1, TIMERANGE = 1303668804, 1303668904FILTER = (PrefixFilter (row2) AND (QualifierFilter s(=,binary:xyz)AND (TimestampsFilter hbase scan t1,( 123, 456)FILTER =org.apa

50、che.hadoop.hbase.filter.ColumnPaginationFilter.new(1, 0) hbase scan t1, COLUMNS = c1, c2, CACHE_BLOCKS = false hbase scan t1, RAW = true, VERSIONS = 10HBase Shell 其他常用命令HBase還提供了一些其它的Shell API,包括general、ddl、dml、tools、replication和security六組,每 組又包括多個Shell命令。每組命令和每個命令的用法均可以通過help查詢其用法COMMAND GROUPS:Group name: gen

溫馨提示

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

評論

0/150

提交評論