版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第5章分布式數(shù)據(jù)庫(kù)HBase《大數(shù)據(jù)技術(shù)基礎(chǔ)教程》學(xué)習(xí)目標(biāo)/Target掌握HBase的數(shù)據(jù)模型和系統(tǒng)架構(gòu)掌握HBase的讀寫(xiě)流程掌握HBase相關(guān)的shell命令和API編程章節(jié)概述/
SummaryHBase是目前非常熱門(mén)的一款分布式KV(KeyValue,鍵值)數(shù)據(jù)庫(kù)系統(tǒng),無(wú)論是互聯(lián)網(wǎng)行業(yè),還是其他傳統(tǒng)IT行業(yè)都在大量使用。尤其是近幾年隨著國(guó)內(nèi)大數(shù)據(jù)理念的普及,HBase憑借其高可靠、易擴(kuò)展、高性能以及成熟的社區(qū)支持,受到越來(lái)越多企業(yè)的青睞。許多大數(shù)據(jù)系統(tǒng)都將HBase作為底層數(shù)據(jù)存儲(chǔ)服務(wù)本章將簡(jiǎn)要介紹HBase簡(jiǎn)介、HBase數(shù)據(jù)模型、HBase系統(tǒng)架構(gòu)、HBase數(shù)據(jù)讀寫(xiě)流程和HBase編程實(shí)踐。目錄/Contents01020304HBase簡(jiǎn)介HBase數(shù)據(jù)模型HBase系統(tǒng)架構(gòu)HBase讀寫(xiě)流程05HBase編程實(shí)踐HBase簡(jiǎn)介5.15.1HBase簡(jiǎn)介5.1.1Hbase的發(fā)展及現(xiàn)狀2003年Google在SOSP會(huì)議上發(fā)表了大數(shù)據(jù)歷史上第一篇公認(rèn)的革命性論文——《GFS:TheGoogleFileSystem》2004年,Google又發(fā)表了另一篇非常重要的論文——《MapReduce:SimplefiedDataProcessingonLargeClusters》2006年,Google發(fā)布了第三篇重要論文——《BigTable:ADistributedStorageSystemforStructuredData》,用于解決Google內(nèi)部海量結(jié)構(gòu)化數(shù)據(jù)的存儲(chǔ)以及高效讀寫(xiě)問(wèn)題5.1HBase簡(jiǎn)介5.1.1Hbase的發(fā)展及現(xiàn)狀Google的三篇論文論證了在大量廉價(jià)機(jī)器上存儲(chǔ)、處理海量數(shù)據(jù)(結(jié)構(gòu)化數(shù)據(jù)、非結(jié)構(gòu)化數(shù)據(jù))是可行的,遺憾的是,Yahoo并沒(méi)有給出開(kāi)源方案。2004年,DougCutting和MikeCafarella在為他們的搜索引擎爬蟲(chóng)(Nutch)實(shí)現(xiàn)分布式架構(gòu)的時(shí)候看到了Google的上述兩篇論文。他們?cè)谥蟮膸讉€(gè)月里按照論文,實(shí)現(xiàn)出一個(gè)簡(jiǎn)易版的HDFS和MapReduce,這也就是Hadoop的最早起源。5.1HBase簡(jiǎn)介5.1.2Hbase應(yīng)用場(chǎng)景Facebook用戶交互數(shù)據(jù)淘寶TLog小米云服務(wù)用戶行為數(shù)據(jù)存儲(chǔ)HBase數(shù)據(jù)模型5.25.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖NameSpace:命名空間,類似于關(guān)系型數(shù)據(jù)庫(kù)的database概念,每個(gè)命名空間下有多個(gè)表,HBASE有兩個(gè)自帶的命名空間,分別是HBASE和default,HBASE中存放的是HBASE內(nèi)置的表(系統(tǒng)內(nèi)建表,包含namespace和meta表:存的是用戶表或系統(tǒng)表位置信息),default表是用戶默認(rèn)的使用的命名空間(用戶建表時(shí)未指定namespace的表都創(chuàng)建在此)。Region(表的切片):HBase表的分片,HBase表會(huì)根據(jù)RowKey值被切分成不同的region存儲(chǔ)在RegionServer中,在一個(gè)RegionServer中可以有多個(gè)不同的region。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖table:表,一個(gè)表包含多行數(shù)據(jù)。row:行,在HBase表里,每一行數(shù)據(jù)代表一個(gè)數(shù)據(jù)對(duì)象,每一行都有一個(gè)行鍵(RowKey)來(lái)進(jìn)行唯一標(biāo)識(shí)(不可分割的字節(jié)數(shù)組,且按照字典排序[ASCII碼]由低到高存儲(chǔ)),每一行都有一個(gè)rowkey和多個(gè)column(列)組成。在HBase中針對(duì)行鍵建立索引,提高檢索數(shù)據(jù)的速度。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖column:列,與關(guān)系型數(shù)據(jù)庫(kù)中的列不同,HBase中的column由columnfamily(列簇)以及qualifier(列名)兩部分組成,兩者中間使用":"相連。比如contents:html,其中contents為列簇,html為列簇下具體的一列。columnfamily在表創(chuàng)建的時(shí)候需要指定,用戶不能隨意增減。一個(gè)columnfamily下可以設(shè)置任意多個(gè)qualifier,因此可以理解為HBase中的列可以動(dòng)態(tài)增加,理論上甚至可以擴(kuò)展到上百萬(wàn)列。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖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組成。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖timestamp:時(shí)間戳,每個(gè)cell在寫(xiě)入HBase的時(shí)候都會(huì)默認(rèn)分配一個(gè)時(shí)間戳作為該cell的版本,當(dāng)然,用戶也可以在寫(xiě)入的時(shí)候自帶時(shí)間戳。HBase支持多版本特性,即同一rowkey、column下可以有多個(gè)value存在,這些value使用timestamp作為版本號(hào),版本越大,表示數(shù)據(jù)越新。cell:?jiǎn)卧?,由五元組(row,column,timestamp,type,value)組成的結(jié)構(gòu),其中type表示Put/Delete這樣的操作類型,timestamp代表這個(gè)cell的版本。這個(gè)結(jié)構(gòu)在數(shù)據(jù)庫(kù)中實(shí)際是以KV結(jié)構(gòu)存儲(chǔ)的,其中(row,column,timestamp,type)是K,value字段對(duì)應(yīng)KV結(jié)構(gòu)的V。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖HBase引入了列簇的概念,列簇下的列可以動(dòng)態(tài)擴(kuò)展。另外,HBase使用時(shí)間戳實(shí)現(xiàn)了數(shù)據(jù)的多版本支持5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖HBase是一個(gè)多維、稀疏、排序的表。多維:HBase中的Map與普通Map最大的不同在于,key是一個(gè)復(fù)合數(shù)據(jù)結(jié)構(gòu),由多維元素構(gòu)成,包括rowkey、columnfamily、qualifier、type以及timestamp。稀疏:在其他數(shù)據(jù)庫(kù)中,對(duì)于空值的處理一般都會(huì)填充null,而對(duì)于HBase,空值不需要任何填充。這個(gè)特性為什么重要?因?yàn)镠Base的列在理論上是允許無(wú)限擴(kuò)展的,對(duì)于成百萬(wàn)列的表來(lái)說(shuō),通常都會(huì)存在大量的空值,如果使用填充null的策略,勢(shì)必會(huì)造成大量空間的浪費(fèi)。因此稀疏性是HBase的列可以無(wú)限擴(kuò)展的一個(gè)重要條件。5.2HBase數(shù)據(jù)模型5.2.1HBase邏輯視圖HBase是一個(gè)多維、稀疏、排序、分布式存儲(chǔ)的表。排序:構(gòu)成HBase的KV在同一個(gè)文件中都是有序的,但規(guī)則并不是僅僅按照rowkey排序,而是按照KV中的key進(jìn)行排序—先比較rowkey,rowkey小的排在前面;如果rowkey相同,再比較column,即columnfamily:qualifier,column小的排在前面;如果column還相同,再比較時(shí)間戳timestamp,即版本信息,timestamp大的排在前面。這樣的多維元素排序規(guī)則對(duì)于提升HBase的讀取性能至關(guān)重要,在后面讀取章節(jié)會(huì)詳細(xì)分析。分布式:構(gòu)成HBase的所有Map并不集中在某臺(tái)機(jī)器上,而是分布在整個(gè)集群中。5.2HBase數(shù)據(jù)模型5.2.2HBase物理視圖與大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)不同,HBase中的數(shù)據(jù)是按照列簇存儲(chǔ)的,即將數(shù)據(jù)按照列簇分別存儲(chǔ)在不同的目錄中。列簇anchor的所有數(shù)據(jù)存儲(chǔ)在一起形成5.2HBase數(shù)據(jù)模型5.2.2HBase物理視圖與大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)不同,HBase中的數(shù)據(jù)是按照列簇存儲(chǔ)的,即將數(shù)據(jù)按照列簇分別存儲(chǔ)在不同的目錄中。列簇contents的所有數(shù)據(jù)存儲(chǔ)在一起形成:5.2HBase數(shù)據(jù)模型5.2.3行式存儲(chǔ)、列式存儲(chǔ)、列簇式存儲(chǔ)為什么HBase要將數(shù)據(jù)按照列簇分別存儲(chǔ)?行式存儲(chǔ):行式存儲(chǔ)系統(tǒng)會(huì)將一行數(shù)據(jù)存儲(chǔ)在一起,一行數(shù)據(jù)寫(xiě)完之后再接著寫(xiě)下一行,最典型的如MySQL這類關(guān)系型數(shù)據(jù)庫(kù)5.2HBase數(shù)據(jù)模型5.2.3行式存儲(chǔ)、列式存儲(chǔ)、列簇式存儲(chǔ)為什么HBase要將數(shù)據(jù)按照列簇分別存儲(chǔ)?列式存儲(chǔ):列式存儲(chǔ)理論上會(huì)將一列數(shù)據(jù)存儲(chǔ)在一起,不同列的數(shù)據(jù)分別集中存儲(chǔ),最典型的如Kudu、ParquetonHDFS等系統(tǒng)(文件格式)5.2HBase數(shù)據(jù)模型5.2.3行式存儲(chǔ)、列式存儲(chǔ)、列簇式存儲(chǔ)為什么HBase要將數(shù)據(jù)按照列簇分別存儲(chǔ)?列簇式存儲(chǔ):從概念上來(lái)說(shuō),列簇式存儲(chǔ)介于行式存儲(chǔ)和列式存儲(chǔ)之間,可以通過(guò)不同的設(shè)計(jì)思路在行式存儲(chǔ)和列式存儲(chǔ)兩者之間相互切換。比如,一張表只設(shè)置一個(gè)列簇,這個(gè)列簇包含所有用戶的列。HBase中一個(gè)列簇的數(shù)據(jù)是存儲(chǔ)在一起的,因此這種設(shè)計(jì)模式就等同于行式存儲(chǔ)。再比如,一張表設(shè)置大量列族,每個(gè)列簇下僅有一列,很顯然這種設(shè)計(jì)模式就等同于列式存儲(chǔ)。HBase系統(tǒng)架構(gòu)5.35.3HBase系統(tǒng)架構(gòu)離線分析系統(tǒng)HBase體系結(jié)構(gòu)借鑒了BigTable論文,是典型的Master-Slave模型。系統(tǒng)中有一個(gè)管理集群的Master節(jié)點(diǎn)以及大量實(shí)際服務(wù)用戶讀寫(xiě)的RegionServer節(jié)點(diǎn)。除此之外,HBase中所有數(shù)據(jù)最終都存儲(chǔ)在HDFS系統(tǒng)中,這與BigTable實(shí)際數(shù)據(jù)存儲(chǔ)在GFS中相對(duì)應(yīng);系統(tǒng)中還有一個(gè)ZooKeeper節(jié)點(diǎn),協(xié)助Master對(duì)集群進(jìn)行管理。5.3HBase系統(tǒng)架構(gòu)5.3.1ClientHBase客戶端(Client)提供了Shell命令行接口、原生JavaAPI編程接口、Thrift/RESTAPI編程接口以及MapReduce編程接口。HBase客戶端支持所有常見(jiàn)的DML操作以及DDL操作,即數(shù)據(jù)的增刪改查和表的日常維護(hù)等。其中Thrift/RESTAPI主要用于支持非Java的上層業(yè)務(wù)需求,MapReduce接口主要用于批量數(shù)據(jù)導(dǎo)入以及批量數(shù)據(jù)讀取。5.3HBase系統(tǒng)架構(gòu)5.3.2ZookeeperZooKeeper(ZK)也是ApacheHadoop的一個(gè)頂級(jí)項(xiàng)目,基于Google的Chubby開(kāi)源實(shí)現(xiàn),主要用于協(xié)調(diào)管理分布式應(yīng)用程序。在HBase系統(tǒng)中,ZooKeeper扮演著非常重要的角色。實(shí)現(xiàn)Master高可用管理系統(tǒng)核心元數(shù)據(jù)
參與RegionServer宕機(jī)恢復(fù)。實(shí)現(xiàn)分布式表鎖5.3HBase系統(tǒng)架構(gòu)5.3.3HMasteHBase集群中有若干臺(tái)計(jì)算機(jī),其中有一臺(tái)是“主機(jī)(Master)”,其余的都是“從機(jī)(Slaver)”。一般在生產(chǎn)系統(tǒng)中,還會(huì)有一臺(tái)“備用主機(jī)(backupmaster)”。這個(gè)HMaster進(jìn)程,就是運(yùn)行在“主機(jī)”上的。準(zhǔn)確的說(shuō),應(yīng)該是HMaster在哪一臺(tái)計(jì)算機(jī)上運(yùn)行,哪一臺(tái)計(jì)算機(jī)就是“主機(jī)”.
分發(fā)Region
監(jiān)控HRegionServer
管理元數(shù)據(jù)5.3HBase系統(tǒng)架構(gòu)5.3.4HRegeionServeRegionServer主要用來(lái)響應(yīng)用戶的IO請(qǐng)求,是HBase中最核心的模塊,由WAL(HLog)、BlockCache以及多個(gè)Region構(gòu)成.WAL(HLog):HLog在HBase中有兩個(gè)核心作用:其一,用于實(shí)現(xiàn)數(shù)據(jù)的高可靠性,HBase數(shù)據(jù)隨機(jī)寫(xiě)入時(shí),并非直接寫(xiě)入HFile數(shù)據(jù)文件,而是先寫(xiě)入緩存,再異步刷新落盤(pán)。為了防止緩存數(shù)據(jù)丟失,數(shù)據(jù)寫(xiě)入緩存之前需要首先順序?qū)懭際Log,這樣,即使緩存數(shù)據(jù)丟失,仍然可以通過(guò)HLog日志恢復(fù);其二,用于實(shí)現(xiàn)HBase集群間主從復(fù)制,通過(guò)回放主集群推送過(guò)來(lái)的HLog日志實(shí)現(xiàn)主從復(fù)制。5.3HBase系統(tǒng)架構(gòu)5.3.4HRegeionServeRegionServer主要用來(lái)響應(yīng)用戶的IO請(qǐng)求,是HBase中最核心的模塊,由WAL(HLog)、BlockCache以及多個(gè)Region構(gòu)成.BlockCache:HBase系統(tǒng)中的讀緩存??蛻舳藦拇疟P(pán)讀取數(shù)據(jù)之后通常會(huì)將數(shù)據(jù)緩存到系統(tǒng)內(nèi)存中,后續(xù)訪問(wèn)同一行數(shù)據(jù)可以直接從內(nèi)存中獲取而不需要訪問(wèn)磁盤(pán)。對(duì)于帶有大量熱點(diǎn)讀的業(yè)務(wù)請(qǐng)求來(lái)說(shuō),緩存機(jī)制會(huì)帶來(lái)極大的性能提升。5.3HBase系統(tǒng)架構(gòu)5.3.4HRegeionServeRegion:數(shù)據(jù)表的一個(gè)分片,當(dāng)數(shù)據(jù)表大小超過(guò)一定閾值就會(huì)“水平切分”,分裂為兩個(gè)Region。Region是集群負(fù)載均衡的基本單位。通常一張表的Region會(huì)分布在整個(gè)集群的多臺(tái)RegionServer上,一個(gè)RegionServer上會(huì)管理多個(gè)Region,當(dāng)然,這些Region一般來(lái)自不同的數(shù)據(jù)表。HBase表結(jié)構(gòu)設(shè)計(jì)5.45.4HBase表結(jié)構(gòu)設(shè)計(jì)5.4.1命名空間設(shè)計(jì)針對(duì)hbase使用較多數(shù)據(jù)量較大的業(yè)務(wù),可以將數(shù)據(jù)放在單獨(dú)的namespace中單獨(dú)管理,入庫(kù)的時(shí)候tablename使用namespace:tablename的方式來(lái)處理。針對(duì)hbase使用較少數(shù)據(jù)量較少的業(yè)務(wù),可以將數(shù)據(jù)放在default的namespace中統(tǒng)一管理,入庫(kù)的時(shí)候直接單獨(dú)使用tablename方式來(lái)處理。5.4HBase表結(jié)構(gòu)設(shè)計(jì)5.4.2rowkey設(shè)計(jì)rowkey設(shè)計(jì)根本上還是需要解決或者避免可能出現(xiàn)的各種問(wèn)題getorscan?如何避免數(shù)據(jù)熱點(diǎn)?如何優(yōu)化HBase硬盤(pán)占用量?對(duì)于時(shí)序數(shù)據(jù),如何能快速的取到最新一條?5.4HBase表結(jié)構(gòu)設(shè)計(jì)5.4.2rowkey設(shè)計(jì)table預(yù)分區(qū)
按照Hash對(duì)table進(jìn)行預(yù)分區(qū)
按照業(yè)務(wù)標(biāo)識(shí)字段進(jìn)行預(yù)分區(qū)Rowkey盡可能設(shè)計(jì)的短
Rowkey最大長(zhǎng)度64kb,但是實(shí)際應(yīng)用中一般為10-100bytes5.4HBase表結(jié)構(gòu)設(shè)計(jì)5.4.3列族設(shè)計(jì)列族是設(shè)計(jì)是在建表階段需要完成的,也是表屬性需要集中配置的維度,主要有下面的內(nèi)容供參考:(1)VERSIONS(2)BLOOMFILTER(3)TTL(TimeToLive)(4)COMPRESSION&DATA_BLOCK_ENCODING(5)BLOCKSIZE(6)DFS_REPLICATION(7)IN_MEMORY5.4HBase表結(jié)構(gòu)設(shè)計(jì)5.4.4列設(shè)計(jì)由于HBase是弱schema的結(jié)構(gòu),所以列相關(guān)的配置不在建表時(shí)指定,而是在數(shù)據(jù)寫(xiě)入的時(shí)候自動(dòng)指定。而HBase的稀疏存儲(chǔ)更是支持業(yè)務(wù)上定義大量的列,然后查詢的時(shí)候指定列名進(jìn)行精確查詢,取到需要的數(shù)據(jù)。這種設(shè)計(jì)很符合HBase的特點(diǎn)以及設(shè)計(jì)理念。但是按照上文所說(shuō),HBase底層是按照cell存儲(chǔ)的,cell的越多,rowkey以及columnfamily的冗余存儲(chǔ)就越大,浪費(fèi)了緩存資源和硬盤(pán)資源,所以給出的建議是在充分發(fā)揮HBase的特點(diǎn)的同時(shí)盡量減少列的數(shù)量。HBase數(shù)據(jù)讀寫(xiě)流程5.55.5HBase數(shù)據(jù)讀寫(xiě)流程5.5.1HBase數(shù)據(jù)寫(xiě)流程(1)客戶端處理階段:客戶端將用戶的寫(xiě)入請(qǐng)求進(jìn)行預(yù)處理,并根據(jù)集群元數(shù)據(jù)定位寫(xiě)入數(shù)據(jù)所在的RegionServer,將請(qǐng)求發(fā)送給對(duì)應(yīng)的RegionServer。(2)Region寫(xiě)入階段:RegionServer接收到寫(xiě)入請(qǐng)求之后將數(shù)據(jù)解析出來(lái),首先寫(xiě)入HLog,再寫(xiě)入對(duì)應(yīng)Region列簇的MemStore。(3)MemStoreFlush階段:當(dāng)Region中MemStore容量超過(guò)一定閾值,系統(tǒng)會(huì)異步執(zhí)行flush操作,將內(nèi)存中的數(shù)據(jù)寫(xiě)入文件,形成HFile。5.5HBase數(shù)據(jù)讀寫(xiě)流程5.5.1HBase數(shù)據(jù)寫(xiě)流程HBase寫(xiě)入流程5.5HBase數(shù)據(jù)讀寫(xiě)流程5.5.2HBase數(shù)據(jù)讀流程首先從ZooKeeper中讀取-ROOT-表所在的RegionServer然后從該HRegionServer中根據(jù)請(qǐng)求的TableName,RowKey讀取.META.表所在的HRegionServer最后從該HRegionServer中讀取.META.表的內(nèi)容而獲取此次請(qǐng)求需要訪問(wèn)的HRegion所在的位置,然后訪問(wèn)該HRegionServer獲取請(qǐng)求的數(shù)據(jù)三層尋址5.5HBase數(shù)據(jù)讀寫(xiě)流程5.5.2HBase數(shù)據(jù)讀流程(1)用戶通過(guò)查找zk(zookeeper)的/hbase/meta-region-server節(jié)點(diǎn)查詢哪臺(tái)RegionServer上有hbase:meta表。(2)客戶端連接含有hbase:meta表的RegionServer。Hbase:meta表存儲(chǔ)了所有Region的行鍵范圍信息,通過(guò)這個(gè)表就可以查詢出你要存取的rowkey屬于哪個(gè)Region的范圍里面,以及這個(gè)Region又是屬于哪個(gè)RegionServer。5.5HBase數(shù)據(jù)讀寫(xiě)流程5.5.2HBase數(shù)據(jù)讀流程(3)獲取這些信息后,客戶端就可以直連其中一臺(tái)擁有你要存取的rowkey的RegionServer,并直接對(duì)其操作。(4)客戶端會(huì)把meta信息緩存起來(lái),下次操作就不需要進(jìn)行以上加載HBase:meta的步驟了。HBase編程實(shí)踐5.65.6HBase編程實(shí)踐5.6.1HBase常用shell命令HBaseShell常用命令命名描述語(yǔ)法help‘命名名’查看命令的使用描述help‘命令名’whoami我是誰(shuí)whoamiversion返回hbase版本信息versionstatus返回hbase集群的狀態(tài)信息statustable_help查看如何操作表table_helpcreate創(chuàng)建表create‘表名’,‘列族名1’,‘列族名2’,‘列族名N’alter修改列族添加一個(gè)列族:alter‘表名’,‘列族名’刪除列族:alter‘表名’,{NAME=>‘列族名’,METHOD=>‘delete’}5.6HBase編程實(shí)踐5.6.1HBase常用shell命令HBaseShell常用命令命名描述語(yǔ)法describe顯示表相關(guān)的詳細(xì)信息describe‘表名’list列出hbase中存在的所有表listexists測(cè)試表是否存在exists‘表名’put添加或修改的表的值
put‘表名’,‘行鍵’,‘列族名’,‘列值’put‘表名’,‘行鍵’,‘列族名:列名’,‘列值’scan通過(guò)對(duì)表的掃描來(lái)獲取對(duì)用的值scan‘表名’掃描某個(gè)列族:scan‘表名’,{COLUMN=>‘列族名’}掃描某個(gè)列族的某個(gè)列:scan‘表名’,{COLUMN=>‘列族名:列名’}查詢同一個(gè)列族的多個(gè)列:scan‘表名’,{COLUMNS=>[‘列族名1:列名1’,‘列族名1:列名2’,…]}get獲取行或單元(cell)的值get‘表名’,‘行鍵’
get‘表名’,‘行鍵’,‘列族名’count統(tǒng)計(jì)表中行的數(shù)量count‘表名’5.6HBase編程實(shí)踐5.6.1HBase常用shell命令HBaseShell常用命令命名描述語(yǔ)法incr增加指定表行或列的值incr‘表名’,‘行鍵’,‘列族:列名’,步長(zhǎng)值get_counter獲取計(jì)數(shù)器get_counter‘表名’,‘行鍵’,‘列族:列名’delete刪除指定對(duì)象的值(可以為表,行,列對(duì)應(yīng)的值,另外也可以指定時(shí)間戳的值)刪除列族的某個(gè)列:delete‘表名’,‘行鍵’,‘列族名:列名’deleteall刪除指定行的所有元素值deleteall‘表名’,‘行鍵’truncate重新創(chuàng)建指定表truncate‘表名’enable使表有效enable‘表名’is_enabled是否啟用is_enabled‘表名’disable使表無(wú)效disable‘表名’is_disabled是否無(wú)效is_disabled‘表名’drop刪除表drop的表必須是disable的5.6HBase編程實(shí)踐5.6.2HBase常用JavaAPI及示例HBase提供了豐富的JavaAPI接口供用戶使用,可以通過(guò)HBaseJavaAPI完成和HBaseShell相同的功能。(1)連接HBaseJava連接HBase需要兩個(gè)類:HBaseConfiguration和ConnectionFactory
Configurationconfig=HBaseConfiguration.create();
//使用create()靜態(tài)方法就可以得到Configuration對(duì)象通過(guò)ConnectionFactory(連接工廠)的方法我們就能獲取到Connection(連接對(duì)象)了。具體用法:Connectionconnection=ConnectionFactory.createConnection(config);//config為前文的配置對(duì)象5.6HBase編程實(shí)踐5.6.2HBase常用JavaAPI及示例(2)創(chuàng)建表TableNametableName=TableName.valueOf("test");//定義表名//TableDescriptor對(duì)象通過(guò)TableDescriptorBuilder構(gòu)建;TableDescriptorBuildertableDescriptor=TableDescriptorBuilder.newBuilder(tableName);ColumnFamilyDescriptorfamily=ColumnFamilyDescriptorBuilder.newBuilder(Bytes.toBytes("data")).build();//構(gòu)建列族對(duì)象tableDescriptor.setColumnFamily(family);//設(shè)置列族admin.createTable(tableDescriptor.build());//創(chuàng)建表5.6HBase編程實(shí)踐5.6.2HBase常用JavaAPI及示例(3)添加數(shù)據(jù)Tabletable=connection.getTable(tableName);//獲取Table對(duì)象try{byte[]row=Bytes.toBytes("row1");//定義行Putput=newPut(row);//創(chuàng)建Put對(duì)象byte[]columnFamily=Bytes.toBytes("data");//列簇byte[]qualifier=Bytes.toBytes(String.valueOf(1));//列byte[]value=Bytes.toBytes("張三豐");//值put.addColumn(columnFamily,qualifier,value);table.put(put);//向表中添加數(shù)據(jù)}finally{//使用完了要釋放資源table.close();}5.6HBase編程實(shí)踐5.6.2HBase常用JavaAPI及示例(4)獲取指定行的數(shù)據(jù)Getget=newGe
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度專業(yè)職業(yè)測(cè)評(píng)與居間合同3篇
- 二零二五年度P2P出借平臺(tái)投資者教育與服務(wù)合同3篇
- 二零二五年度企業(yè)破產(chǎn)財(cái)產(chǎn)清算協(xié)議2篇
- 個(gè)性化條款:20249A文離婚合同案例分析版
- 二零二五版房屋征收拆遷補(bǔ)償協(xié)議書(shū)3篇
- 二零二五年度建筑工程招投標(biāo)與合同質(zhì)量保證金管理協(xié)議書(shū)3篇
- 物業(yè)管理處與2025年度收費(fèi)員服務(wù)協(xié)議3篇
- 2025年度門(mén)衛(wèi)人員崗位職責(zé)優(yōu)化聘用協(xié)議3篇
- 2025年度內(nèi)蒙古自治區(qū)農(nóng)業(yè)廢棄物資源化利用承包合同3篇
- 二零二五年度城鄉(xiāng)汽車租賃及售后服務(wù)合同4篇
- 2025年山東華魯海運(yùn)有限公司招聘筆試參考題庫(kù)含答案解析
- 人教版物理八年級(jí)下冊(cè) 專項(xiàng)訓(xùn)練卷 (一)力、運(yùn)動(dòng)和力(含答案)
- 山東省房屋市政工程安全監(jiān)督機(jī)構(gòu)人員業(yè)務(wù)能力考試題庫(kù)-中(多選題)
- 《七律二首 送瘟神》教案- 2023-2024學(xué)年高教版(2023)中職語(yǔ)文職業(yè)模塊
- 2024年中考語(yǔ)文滿分作文6篇(含題目)
- 北師大版 2024-2025學(xué)年四年級(jí)數(shù)學(xué)上冊(cè)典型例題系列第三單元:行程問(wèn)題“拓展型”專項(xiàng)練習(xí)(原卷版+解析)
- 2023年譯林版英語(yǔ)五年級(jí)下冊(cè)Units-1-2單元測(cè)試卷-含答案
- 施工管理中的文檔管理方法與要求
- DL∕T 547-2020 電力系統(tǒng)光纖通信運(yùn)行管理規(guī)程
- 種子輪投資協(xié)議
- 執(zhí)行依據(jù)主文范文(通用4篇)
評(píng)論
0/150
提交評(píng)論