版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第7章分布式數(shù)據(jù)庫HBase《Hadoop大數(shù)據(jù)原理與應(yīng)用》西安電子科技大學(xué)出版社【知識(shí)與能力要求】第7章分布式數(shù)據(jù)庫HBase7.1NoSQL簡(jiǎn)介7.2初識(shí)HBase7.3HBase數(shù)據(jù)模型7.4HBase體系架構(gòu)7.5HBase運(yùn)行機(jī)制7.6部署HBase集群7.7實(shí)戰(zhàn)HBase7.8HBase性能優(yōu)化7.1NoSQL簡(jiǎn)介NoSQL(NotonlySQL)的含義是“不僅僅是SQL”,是一類區(qū)別與傳統(tǒng)關(guān)系型數(shù)據(jù)庫的新型數(shù)據(jù)庫系統(tǒng)。NoSQL出現(xiàn)和發(fā)展的主要背景是傳統(tǒng)的關(guān)系型數(shù)據(jù)庫逐漸無法滿足互聯(lián)網(wǎng)時(shí)代日益發(fā)展的大數(shù)據(jù)軟件應(yīng)用系統(tǒng),為了彌補(bǔ)關(guān)系數(shù)據(jù)庫的不足。它主要用于解決三類大數(shù)據(jù)應(yīng)用的需求:高并發(fā)讀寫,海量數(shù)據(jù)的高效存儲(chǔ)和管理,高可擴(kuò)展性和高可用性。NoSQL數(shù)據(jù)庫特點(diǎn)(1)易擴(kuò)展。NoSQL數(shù)據(jù)庫種類繁多,但是一個(gè)共同的特點(diǎn)都是去掉關(guān)系數(shù)據(jù)庫的關(guān)系型特性。數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴(kuò)展。即無形之間,在架構(gòu)的層面上帶來了可擴(kuò)展的能力。(2)高性能。NoSQL數(shù)據(jù)庫都具有非常高的讀寫性能,尤其在大量數(shù)據(jù)下,同樣表現(xiàn)優(yōu)秀。這主要得益于它不受關(guān)系代數(shù)約束,數(shù)據(jù)庫的結(jié)構(gòu)簡(jiǎn)單。(3)高靈活性。NoSQL無需事先為要存儲(chǔ)的數(shù)據(jù)建立字段,隨時(shí)可以存儲(chǔ)自定義的數(shù)據(jù)格式。而在關(guān)系數(shù)據(jù)庫里,增刪字段是一件非常麻煩的事情。如果是非常大數(shù)據(jù)量的表,增加字段簡(jiǎn)直就是一個(gè)噩夢(mèng)。這點(diǎn)在大量數(shù)據(jù)的Web2.0時(shí)代尤其明顯。(4)高可用性。NoSQL在不影響性能的情況下,就可以方便的實(shí)現(xiàn)高可用的架構(gòu)。比如Cassandra,HBase等NoSQL數(shù)據(jù)庫,通過復(fù)制模型也能實(shí)現(xiàn)高可用性。(5)開源、成本低。多數(shù)NoSQL數(shù)據(jù)庫產(chǎn)品是開源軟件,不存在昂貴的產(chǎn)品授權(quán)和注冊(cè)費(fèi)用。同時(shí),開源社區(qū)可以提供豐富的產(chǎn)品使用支持和擴(kuò)展插件,大大方便了軟件的使用。7.1NoSQL簡(jiǎn)介NoSQL數(shù)據(jù)庫的應(yīng)用場(chǎng)景主要包括下面四個(gè)方面:(1)數(shù)據(jù)庫表schema經(jīng)常變化。比如在線商城,維護(hù)產(chǎn)品的屬性經(jīng)常要增加字段,這就意味著數(shù)據(jù)庫相關(guān)代碼和配置需要更改,如果該表的數(shù)據(jù)量達(dá)到百萬級(jí)別,新增字段會(huì)帶來很大的額外開銷(例如重建索引等)。在這種場(chǎng)景下,NoSQL可以極大提升數(shù)據(jù)庫的可伸縮性,減輕開發(fā)人員的負(fù)擔(dān)。(2)數(shù)據(jù)庫表字段是復(fù)雜數(shù)據(jù)類型。對(duì)于復(fù)雜數(shù)據(jù)類型,傳統(tǒng)數(shù)據(jù)庫需要進(jìn)行擴(kuò)展才能支持,例如xml類型的字段,不管是查詢還是更改,效率非常一般。主要原因是關(guān)系數(shù)據(jù)庫對(duì)xml字段很難建立高效的索引,通常應(yīng)用層需要重做從字符流到dom的解析轉(zhuǎn)換。而NoSQL數(shù)據(jù)庫通常以json格式存儲(chǔ)xml,提供了原生態(tài)的支持,在效率上遠(yuǎn)高于傳統(tǒng)關(guān)系型數(shù)據(jù)庫。(3)高并發(fā)數(shù)據(jù)庫請(qǐng)求。此類應(yīng)用常見于Web2.0的網(wǎng)站,很多應(yīng)用對(duì)于數(shù)據(jù)一致性要求很低,而關(guān)系型數(shù)據(jù)庫的事務(wù)以及大表連接反而成了“性能殺手”。(4)海量數(shù)據(jù)的分布式存儲(chǔ)。海量數(shù)據(jù)的存儲(chǔ)如果選用大型商用數(shù)據(jù)庫,比如Oracle,那么整個(gè)解決方案的成本是非常高的。而NoSQL分布式存儲(chǔ),可以部署在廉價(jià)的硬件上,是一個(gè)性價(jià)比非常高的解決方案。當(dāng)然,這并不是說NoSQL可以解決一切問題,比如ERP系統(tǒng)、BI系統(tǒng),在大部分情況還是推薦使用傳統(tǒng)關(guān)系型數(shù)據(jù)庫。主要原因是此類系統(tǒng)的業(yè)務(wù)模型復(fù)雜,使用NoSQL將導(dǎo)致系統(tǒng)的維護(hù)成本增加。常見的四種NoSQL數(shù)據(jù)庫NoSQL鍵值數(shù)據(jù)庫列式數(shù)據(jù)庫文檔數(shù)據(jù)庫圖數(shù)據(jù)庫優(yōu)勢(shì)快速查詢查找速度快,可擴(kuò)展性強(qiáng),更容易進(jìn)行分布式擴(kuò)展數(shù)據(jù)結(jié)構(gòu)要求不嚴(yán)格利用圖結(jié)構(gòu)相關(guān)算法劣勢(shì)存儲(chǔ)的數(shù)據(jù)缺少結(jié)構(gòu)化功能相對(duì)局限查詢性能不高,而且缺乏統(tǒng)一的查詢語法需要對(duì)整個(gè)圖做計(jì)算才能得出結(jié)果,不容易做分布式的集群方案。相關(guān)產(chǎn)品TokyoCabinet/Tyrant、Redis、Voldemort、BerkeleyDBCassandra,HBase,RiakCouchDB、MongoDBNeo4J、InfoGrid、In?niteGraph應(yīng)用內(nèi)容緩存,主要用于處理大量數(shù)據(jù)的高訪問負(fù)載分布式的文件系統(tǒng)Web應(yīng)用(與Key-Value類似,Value是結(jié)構(gòu)化的)社交網(wǎng)絡(luò)數(shù)據(jù)模型鍵值對(duì)以列簇式存儲(chǔ),將同一列數(shù)據(jù)存在文件系統(tǒng)中一系列鍵值對(duì)圖結(jié)構(gòu)7.2初識(shí)HBaseHBase是一個(gè)高可靠、高性能、列存儲(chǔ)、可伸縮、實(shí)時(shí)讀寫的分布式數(shù)據(jù)庫系統(tǒng),是Hadoop生態(tài)系統(tǒng)的重要組成部分之一。HBase是Google的BigTable的開源實(shí)現(xiàn),使用Java語言編寫。2006-BigTable2007-Hadoop貢獻(xiàn)者2008-Hadoop子項(xiàng)目2010-Apache頂級(jí)項(xiàng)目2018-1.43穩(wěn)定版本7.2初識(shí)HBaseHBase利用HadoopMapReduce來處理HBase中的海量數(shù)據(jù),實(shí)現(xiàn)高性能計(jì)算;使用ZooKeeper作為協(xié)同服務(wù),實(shí)現(xiàn)穩(wěn)定服務(wù)和失敗恢復(fù);使用HDFS作為高可靠的底層存儲(chǔ),利用廉價(jià)集群提供海量數(shù)據(jù)存儲(chǔ)能力。與Hadoop一樣,HBase主要依靠橫向擴(kuò)展,通過不斷增加廉價(jià)的商用服務(wù)器,來增加計(jì)算和存儲(chǔ)能力。HBase僅能通過行鍵(Rowkey)和行鍵的范圍來檢索數(shù)據(jù),僅支持單行事務(wù)(可通過Hive支持來實(shí)現(xiàn)多表Join等復(fù)雜操作),主要用來存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。HBase的主要特點(diǎn)包括:數(shù)據(jù)稀疏、高維度(面向列)、分布式、鍵值有序存儲(chǔ)、數(shù)據(jù)一致性。7.3HBase數(shù)據(jù)模型邏輯上,HBase以表的形式呈現(xiàn)給最終用戶。物理上,HBase以文件的形式存儲(chǔ)在HDFS中。為了高效管理數(shù)據(jù),HBase設(shè)計(jì)了一些元數(shù)據(jù)庫表來提高數(shù)據(jù)存取效率。7.3.1邏輯模型術(shù)語說明表(Table)由行和列組成,列劃分為若干個(gè)列族行鍵(Rowkey)每一行代表著一個(gè)數(shù)據(jù)對(duì)象,由行鍵來標(biāo)識(shí),行鍵會(huì)被建立索引,數(shù)據(jù)的獲取通過Rowkey完成,采用字符串列族(ColumnFamily)列的集合,一個(gè)表中列可以分成不同列族,列族需在表創(chuàng)建時(shí)就定義好,數(shù)量不能太多,不能頻繁修改列限定符(ColumnQualifier)表中具體一個(gè)列的名字,列族里的數(shù)據(jù)通過列限定符來定位,列限定符不用事先定義,也不需在不同行之間保持一致。被視為byte[]。列名以列族作為前綴,列族:列限定符單元格(Cell)每一個(gè)行鍵、列族和列標(biāo)識(shí)符共同確定的一個(gè)單元,存儲(chǔ)在單元格里的數(shù)據(jù)稱為單元格數(shù)據(jù),單元格和單元格數(shù)據(jù)也沒有特定的數(shù)據(jù)類型,以byte[]來存儲(chǔ)時(shí)間戳(Timestamp)每個(gè)單元格都保存著同一份數(shù)據(jù)的多個(gè)版本,這些版本采用時(shí)間戳進(jìn)行索引。采用64位整型,降序存儲(chǔ)【實(shí)例:存儲(chǔ)網(wǎng)頁內(nèi)容的HBase邏輯視圖】其中,行鍵RowKey為網(wǎng)址的逆序,這樣可以將相同域名的網(wǎng)頁存放在相鄰的物理位置,Timestamp表示網(wǎng)頁的歷史版本,列Column包含了3個(gè)列族,注意某些單元值可以為空。行鍵時(shí)間戳列列族contents列族anchor列族mime".xinjing.www"t4contents:html="<html>c4</html>"anchor:="…"
t3contents:html="<html>c3</html>"anchor:="…"
t2contents:html="<html>c2</html>"
t1contents:html="<html>c1</html>"
mime:type="text/html"【實(shí)例:存儲(chǔ)職工信息的HBase邏輯視圖】【實(shí)例:存儲(chǔ)職工信息的HBase邏輯視圖】多維度的Map模型數(shù)據(jù)坐標(biāo)四維坐標(biāo)(行鍵,列族,列限定符,時(shí)間戳)ValueKey7.3.2物理模型HBase是按照列存儲(chǔ)的稀疏行/列矩陣,其物理模型實(shí)際上就是把邏輯模型中的一個(gè)行進(jìn)行分割,并按照列族存儲(chǔ)?!緦?shí)例:存儲(chǔ)網(wǎng)頁內(nèi)容的HBase物理視圖】列族contents行鍵時(shí)間戳列族contents".xinjing.www"t4contents:html="<html>c4</html>"t3contents:html="<html>c3</html>"t2contents:html="<html>c2</html>"t1contents:html="<html>c1</html>"列族anchor行鍵時(shí)間戳列族anchor".xinjing.www"t4anchor:="…"t3anchor:="…"列族mime行鍵時(shí)間戳列族mime".xinjing.www"t1mime:type="text/html"7.3.2物理模型HBase中的所有數(shù)據(jù)文件都存儲(chǔ)在HadoopHDFS文件系統(tǒng)上,主要包括兩種文件類型:HFile和HLog。1)HFileHFile是HBase中KeyValue數(shù)據(jù)的存儲(chǔ)格式,是Hadoop的二進(jìn)制格式文件,它是參考BigTable的SSTable和Hadoop的TFile的實(shí)現(xiàn)。從HBase開始到現(xiàn)在,HFile經(jīng)歷了三個(gè)版本,其中V2在0.92引入,V3在0.98引入。HFileV1版本在實(shí)際使用過程中發(fā)現(xiàn)它占用內(nèi)存多,HFileV2版本針對(duì)此進(jìn)行了優(yōu)化,HFileV3版本基本和V2版本相同,只是在Cell層面添加了Tag數(shù)組的支持。HFileV2邏輯結(jié)構(gòu)HFileV2物理結(jié)構(gòu)7.3.2物理模型2)HLogHLog是HBase中WAL(WriteAheadLog)的存儲(chǔ)格式,物理上是Hadoop的SequenceFile。SequenceFile的Key是HLogKey對(duì)象,HLogKey中記錄了寫入數(shù)據(jù)的歸屬信息,除了table和region名字外,同時(shí)還包括sequenceid和writetime,sequenceid的起始值為0,或者是最近一次存入文件系統(tǒng)中的sequenceid,writetime是寫入時(shí)間。HLogSequeceFile的Value是HBase的KeyValue對(duì)象,即對(duì)應(yīng)HFile中的KeyValue。HLog邏輯結(jié)構(gòu)7.3.3元數(shù)據(jù)表HBase的大部分操作都是在HRegionServer中完成,客戶端想要進(jìn)行插入、刪除和查詢數(shù)據(jù)都需要先找到對(duì)應(yīng)的HRegionServer??蛻舳诵枰ㄟ^兩個(gè)元數(shù)據(jù)表來找到HRegionServer和HRegion之間的對(duì)應(yīng)關(guān)系:-ROOT-和.META.。它們是HBase的兩張系統(tǒng)表,用于管理普通數(shù)據(jù),其存儲(chǔ)和操作方式和普通表相似,差別在于它們存儲(chǔ)的是Region的分布情況和每個(gè)Region的詳細(xì)信息,而不是普通數(shù)據(jù)。HBase使用類似B+樹的三層結(jié)構(gòu)來保存Region位置信息。
HBase三層結(jié)構(gòu)層次名稱作用第一層ZooKeeper文件記錄了-ROOT-表的位置信息第二層-ROOT-表記錄了.META.表的Region位置信息,-ROOT-只能有一個(gè)Region,通過-ROOT-表就可以訪問.META.表中的數(shù)據(jù)第三層.META.表記錄了用戶數(shù)據(jù)表的Region位置信息,.META.表可以有多個(gè)Region,保存了HBase中所有用戶數(shù)據(jù)表的Region位置信息ZooKeeper文件-ROOT-表
.META.表用戶數(shù)據(jù)表用戶數(shù)據(jù)表HBase三層結(jié)構(gòu)客戶端訪問用戶數(shù)據(jù)之前,需要首先訪問ZooKeeperr獲得-ROOT-表的位置然后訪問-ROOT-表,獲得.META.表的信息,接著訪問.META.表,找到所需的Region具體位于哪個(gè)Region服務(wù)器,最后才會(huì)到該Region服務(wù)器上讀取數(shù)據(jù)。該過程需要多次網(wǎng)絡(luò)操作,為了加快尋址過程,一般客戶端會(huì)將查詢過的位置信息緩存起來,緩存不會(huì)主動(dòng)失效,因此如果客戶端上的緩存全部失效,則需要進(jìn)行6次網(wǎng)絡(luò)來回,才能定位到正確的Region,其中三次用來發(fā)現(xiàn)緩存失效,另外三次用來獲取位置信息。7.4HBase體系架構(gòu)HBase采用Master/Slave架構(gòu),HBase集群成員包括Client、ZooKeeper集群、HMaster節(jié)點(diǎn)、HRegionServer節(jié)點(diǎn),在底層HBase將數(shù)據(jù)存儲(chǔ)于HDFS中。7.4HBase體系架構(gòu)1.ClientHBaseClient使用HBase的RPC機(jī)制與HMaster和HRegionServer進(jìn)行通信,對(duì)于管理類操作,Client與HMaster進(jìn)行RPC;對(duì)于數(shù)據(jù)讀寫類操作,Client與HRegionServer進(jìn)行RPC??蛻舳税L問HBase的接口,通常維護(hù)一些緩存來加快HBase數(shù)據(jù)的訪問速度,例如緩存各個(gè)Region的位置信息。2.ZooKeeperZookeeper作為管理者,保證任何時(shí)候,集群中只有一個(gè)Master,對(duì)于HBase,ZooKeeper提供以下基本功能。存儲(chǔ)-ROOT-表的地址、HMaster的地址、HRegionServer的地址。通過ZooKeeper,HMaster可以隨時(shí)感知到各個(gè)HRegionServer的健康狀態(tài)。ZooKeeper避免HMaster單點(diǎn)故障問題,HBase中可以啟動(dòng)多個(gè)HMaster,通過ZooKeeper的選舉機(jī)制確保只有一個(gè)為當(dāng)前HBase集群的master。ZooKeeper提供功能7.4HBase體系架構(gòu)3.HMasterHMaster是HBase的主服務(wù)程序,HBase中可以啟動(dòng)多個(gè)HMaster,通過Zookeeper選舉機(jī)制保證每個(gè)時(shí)刻只有1個(gè)HMaster運(yùn)行。HMaster主要完成以下任務(wù)。管理HRegionServer,實(shí)現(xiàn)其負(fù)載均衡。管理和分配HRegion,比如在HRegionsplit時(shí)分配新的HRegion;在HRegionServer退出時(shí)遷移其內(nèi)的HRegion到其他HRegionServer上。實(shí)現(xiàn)DDL操作(DataDefinitionLanguage,namespace和table的增刪改,columnfamiliy的增刪改等)。管理namespace和table的元數(shù)據(jù)(實(shí)際存儲(chǔ)在HDFS上)。權(quán)限控制(ACL)。Hmaster完成任務(wù)7.4HBase體系架構(gòu)4.HRegionServerHRegionServer是HBase的從服務(wù)程序,HBase集群中可以有多個(gè)HRegionServer,其主要功能包括以下幾個(gè)方面。存放和管理本地HRegion。讀寫HDFS,管理Table中的數(shù)據(jù)。Client直接通過HRegionServer讀寫數(shù)據(jù)(從HMaster中獲取元數(shù)據(jù),找到RowKey所在的HRegion/HRegionServer后進(jìn)行數(shù)據(jù)讀寫)。HRegionServer和DataNode一般會(huì)放在相同的Server上實(shí)現(xiàn)數(shù)據(jù)的本地化。HRegion、Store、HLog的功能(1)HRegionHRegionServer內(nèi)部管理了一系列HRegion對(duì)象,每個(gè)HRegion對(duì)應(yīng)了表中的一個(gè)Region,每個(gè)表最初只有一個(gè)Region,隨著表中記錄增加直到某個(gè)閾值,Region會(huì)被分割形成兩個(gè)新的Region。HRegion中由多個(gè)Store組成,每個(gè)Store對(duì)應(yīng)了表中的一個(gè)ColumnFamily的存儲(chǔ),可以看出每個(gè)ColumnFamily其實(shí)就是一個(gè)集中的存儲(chǔ)單元,因此最好將具有共同I/O特性的Column放在一個(gè)ColumnFamily中,這樣做最為高效。HRegion功能HRegion、Store、HLog的功能(2)StoreStore是HBase存儲(chǔ)的核心,由兩部分組成:MemStore和StoreFiles。MemStore是在內(nèi)存中的緩存,保存最近更新的數(shù)據(jù);StoreFile是磁盤中的文件。用戶寫入的數(shù)據(jù)首先會(huì)放入MemStore,當(dāng)MemStore滿了以后會(huì)刷新成一個(gè)StoreFile(底層實(shí)現(xiàn)是HFile),當(dāng)StoreFile文件數(shù)量增長(zhǎng)到一定閾值,會(huì)觸發(fā)Compact合并操作,將多個(gè)StoreFiles合并成一個(gè)StoreFile,合并過程中會(huì)進(jìn)行版本合并和數(shù)據(jù)刪除,因此可以看出HBase其實(shí)只有增加數(shù)據(jù),所有的更新和刪除操作都是在后續(xù)的Compact過程中進(jìn)行的,這使得用戶的寫操作只要進(jìn)入內(nèi)存中就可以立即返回,保證了HBaseI/O的高性能。當(dāng)StoreFilesCompact后,會(huì)逐步形成越來越大的StoreFile,當(dāng)單個(gè)StoreFile大小超過一定閾值后,會(huì)觸發(fā)Split分裂操作,同時(shí)把當(dāng)前RegionSplit成2個(gè)Region,父Region會(huì)下線,新分裂出的2個(gè)孩子Region會(huì)被HMaster分配到相應(yīng)的HRegionServer上,使得原先1個(gè)Region的壓力得以分流到2個(gè)Region上。HRegion、Store、HLog的功能(3)HLog每個(gè)HRegionServer維護(hù)一個(gè)Hlog,而不是每個(gè)HRegion維護(hù)一個(gè)HLog。這樣不同HRegion(來自不同表)的日志會(huì)混在一起,這樣做的目的是不斷追加單個(gè)文件相對(duì)于同時(shí)寫多個(gè)文件而言,可以減少磁盤尋址次數(shù),因此可以提高對(duì)表的寫性能。但同時(shí)帶來的麻煩是,如果一臺(tái)HRegionServer下線,為了恢復(fù)其上的HRegion,需要將HRegionServer上的HLog進(jìn)行拆分,然后分發(fā)到其它HRegionServer上進(jìn)行恢復(fù)。HLog文件定期會(huì)滾動(dòng)出新的并刪除舊的文件(已持久化到StoreFile中的數(shù)據(jù))。當(dāng)HRegionServer意外終止后,HMaster會(huì)通過Zookeeper感知到,HMaster首先會(huì)處理遺留的HLog文件,將其中不同HRegion的HLog數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)HRegion的目錄下,然后再將失效的HRegion重新分配,領(lǐng)取到這些HRegion的HRegionServer在加載Region的過程中會(huì)發(fā)現(xiàn)有歷史HLog需要處理,因此會(huì)重做HLog中的數(shù)據(jù)到MemStore中,然后清空到StoreFiles,完成數(shù)據(jù)恢復(fù)。7.5HBase運(yùn)行機(jī)制Master的工作原理RegionServer的工作原理Store的工作原理7.5.1Master的工作原理主服務(wù)器Master主要負(fù)責(zé)表和Region的管理工作。Master啟動(dòng)后會(huì)進(jìn)行以下操作。(1)從Zookeeper上獲取唯一一個(gè)代表ActiveMaster的鎖,用來阻止其它Master成為活著的Master。(2)掃描Zookeeper上的Server目錄,獲得當(dāng)前可用的RegionServer列表。(3)與第2步獲得的每個(gè)RegionServer通信,獲得當(dāng)前已分配的Region和RegionServer的對(duì)應(yīng)關(guān)系。(4)掃描.META.的Region集合,計(jì)算得到當(dāng)前還未分配的Region,將它們放入待分配Region列表。7.5.2RegionServer的工作原理RegionServer是HBase中最核心的模塊,其內(nèi)部管理了一系列Region對(duì)象和一個(gè)HLog文件,其中HLog是磁盤上的記錄文件,它記錄著所有的更新操作。每個(gè)Region對(duì)象又是由多個(gè)Store組成,每個(gè)Store又包含了一個(gè)MemStore緩存和若干個(gè)StoreFile文件。當(dāng)用戶寫入數(shù)據(jù)時(shí),會(huì)被分配到相應(yīng)的RegionServer去執(zhí)行操作。用戶數(shù)據(jù)首先被寫入到MemStore和HLog中,當(dāng)操作寫入HLog后,commit()方法才會(huì)將其返回給客戶端。當(dāng)用戶讀取數(shù)據(jù)時(shí),RegionServer會(huì)首先訪問MemStore緩存,如果數(shù)據(jù)不在緩存中,才回到磁盤上的StoreFile中去尋找。7.5.2RegionServer的工作原理任何時(shí)刻,一個(gè)Region只能分配給一個(gè)RegionServer。Master記錄了當(dāng)前有哪些可用的RegionServer,以及當(dāng)前哪些Region分配給了哪些RegionServer,哪些Region還沒有分配。當(dāng)存在未分配的Region,并且有一個(gè)RegionServer上有可用空間時(shí),Master就給這個(gè)RegionServer發(fā)送一個(gè)裝載請(qǐng)求,把Region分配給這個(gè)RegionServer。RegionServer得到請(qǐng)求后,就開始對(duì)此Region提供服務(wù)。RegionServer狀態(tài)由Master使用Zookeeper來跟蹤。當(dāng)某個(gè)RegionServer啟動(dòng)時(shí),會(huì)首先在Zookeeper上的Server目錄下建立代表自己的文件,并獲得該文件的獨(dú)占鎖。由于Master訂閱了Server目錄上的變更消息,當(dāng)Server目錄下的文件出現(xiàn)新增或刪除操作時(shí),Master可以得到來自Zookeeper的實(shí)時(shí)通知。因此一旦RegionServer上線,Master能馬上得到消息。7.5.3Store的工作原理RegionServer是HBase的核心模塊,而Store則是RegionServer的核心。每個(gè)Store對(duì)應(yīng)了表中一個(gè)列族的存儲(chǔ),每個(gè)Store包含了一個(gè)MemStore緩存和若干個(gè)StoreFile文件。數(shù)據(jù)更新時(shí)會(huì)被首先寫入到HLog和MemStore中。MemStore中的數(shù)據(jù)是排序的,當(dāng)MemStore數(shù)據(jù)增加到一定閾值時(shí),就會(huì)創(chuàng)建一個(gè)新的MemStore,并且將老的MemStore添加到flush隊(duì)列,由單獨(dú)的線程刷新到磁盤上,成為一個(gè)StoreFile。與此同時(shí),系統(tǒng)會(huì)在Zookeeper中記錄一個(gè)重做點(diǎn)(RedoPoint),表示這個(gè)時(shí)刻之前的變更已經(jīng)持久化了(Minorcompact)。當(dāng)系統(tǒng)出現(xiàn)意外時(shí),可能導(dǎo)致MemStore中的數(shù)據(jù)丟失,此時(shí)使用HLog來恢復(fù)檢查點(diǎn)(Checkpoint)之后的數(shù)據(jù)。當(dāng)一個(gè)Store中的StoreFile文件數(shù)量達(dá)到事先設(shè)定的數(shù)量時(shí),就會(huì)進(jìn)行一次合并(Majorcompact)操作,將對(duì)修改同一個(gè)key的多個(gè)StoreFile文件合并到一起,形成一個(gè)大的StoreFile,當(dāng)StoreFile的大小達(dá)到一定閾值后,又會(huì)對(duì)StoreFile進(jìn)行分裂(Split)操作,分裂為兩個(gè)StoreFile。同時(shí),當(dāng)前的1個(gè)父Region會(huì)被分裂成2個(gè)子Region,父Region下線,新分裂出的2個(gè)子Region會(huì)被Master分配到相應(yīng)的RegionServer上。由于StoreFile是只讀的,故對(duì)表的更新其實(shí)是不斷追加的操作,因此在處理讀請(qǐng)求時(shí),需要訪問Store中全部的StoreFile和MemStore,將它們按照Rowkey進(jìn)行合并。由于StoreFile和MemStore都是經(jīng)過排序的,并且StoreFile帶有內(nèi)存索引,合并的過程比較高效。7.6部署HBase集群了解HBase運(yùn)行環(huán)境和運(yùn)行模式規(guī)劃HBase集群部署HBase集群?jiǎn)?dòng)HBase集群驗(yàn)證HBase集群7.6.1運(yùn)行環(huán)境對(duì)于大部分Java開源產(chǎn)品而言,在部署與運(yùn)行之前,總是需要搭建一個(gè)合適的環(huán)境,通常包括操作系統(tǒng)和Java環(huán)境兩方面。同時(shí),HBase依賴于ZooKeeper和HDFS,因此HBase部署與運(yùn)行所需要的系統(tǒng)環(huán)境包括以下幾個(gè)方面。1)操作系統(tǒng)HBase支持不同平臺(tái),在當(dāng)前絕大多數(shù)主流的操作系統(tǒng)上都能夠運(yùn)行,例如Unix/Linux、Windows等。本書采用的操作系統(tǒng)為L(zhǎng)inux發(fā)行版CentOS7。2)Java環(huán)境HBase使用Java語言編寫,因此它的運(yùn)行環(huán)境需要Java環(huán)境的支持。3)HDFSHBase使用HDFS作為高可靠的底層存儲(chǔ),利用廉價(jià)集群提供海量數(shù)據(jù)存儲(chǔ)能力,分布模式部署HBase時(shí)需要部署HDFS。4)ZooKeeperHBase使用ZooKeeper作為協(xié)同服務(wù),實(shí)現(xiàn)穩(wěn)定服務(wù)和失敗恢復(fù),因此需要部署ZooKeeper。7.6.2運(yùn)行模式HBase運(yùn)行模式有以下三種:(1)單機(jī)模式(StandaloneMode):只在一臺(tái)計(jì)算機(jī)上運(yùn)行,這種模式下,HBase所有守護(hù)進(jìn)程包括Master、RegionServers和ZooKeeper都運(yùn)行在一個(gè)JVM中,存儲(chǔ)采用本地文件系統(tǒng),沒有采用分布式文件系統(tǒng)HDFS。(2)偽分布模式(Pseudo-DistributedMode):只在一臺(tái)計(jì)算機(jī)上運(yùn)行,在這種模式下,HBase所有守護(hù)進(jìn)程都運(yùn)行在一個(gè)節(jié)點(diǎn)上,在一個(gè)節(jié)點(diǎn)上模擬了一個(gè)具有HBase完整功能的微型集群,存儲(chǔ)采用分布式文件系統(tǒng)HDFS,但是HDFS的名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)都位于同一臺(tái)計(jì)算機(jī)上。(3)全分布模式(Fully-DistributedMode):在多臺(tái)計(jì)算機(jī)上運(yùn)行,在這種模式下,HBase的守護(hù)進(jìn)程運(yùn)行在多個(gè)節(jié)點(diǎn)上,形成一個(gè)真正意義上的集群,存儲(chǔ)采用分布式文件系統(tǒng)HDFS,且HDFS的名稱節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)位于不同計(jì)算機(jī)上。7.6.3規(guī)劃全分布模式HBase集群主機(jī)名IP地址運(yùn)行服務(wù)軟硬件配置master30NameNodeSecondaryNameNodeQuorumPeerMainHMaster內(nèi)存:4GCPU:1個(gè)2核硬盤:40G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2ZooKeeper:ZooKeeper3.4.13HBase:HBase1.4.10Eclipse:EclipseIDE2018-09forJavaDevelopersslave131DataNodeQuorumPeerMainHRegionServer內(nèi)存:1GCPU:1個(gè)1核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2ZooKeeper:ZooKeeper3.4.13HBase:HBase1.4.10slave232DataNodeQuorumPeerMainHRegionServer內(nèi)存:1GCPU:1個(gè)1核硬盤:20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2ZooKeeper:ZooKeeper3.4.13HBase:HBase1.4.107.6.4部署全分布模式HBase集群1.初始軟硬件環(huán)境準(zhǔn)備(1)準(zhǔn)備3臺(tái)機(jī)器,安裝操作系統(tǒng),編者使用CentOSLinux7。(2)對(duì)集群內(nèi)每一臺(tái)機(jī)器,配置靜態(tài)IP、修改機(jī)器名、添加集群級(jí)別域名映射、關(guān)閉防火墻。(3)對(duì)集群內(nèi)每一臺(tái)機(jī)器,安裝和配置Java,要求Java1.7或更高版本,編者使用OracleJDK8u191。(4)安裝和配置Linux集群中主節(jié)點(diǎn)到從節(jié)點(diǎn)的SSH免密登錄。(5)在Linux集群上部署全分布模式Hadoop集群。(6)在Linux集群上部署ZooKeeper集群。以上步驟編者已在教材第2章、第6章中詳細(xì)介紹,具體操作過程請(qǐng)讀者參見教材,此處不再贅述。7.6.4部署全分布模式HBase集群2.獲取HBaseHBase官方下載地址為/downloads.html,建議讀者下載stable目錄下的當(dāng)前穩(wěn)定版本。編者采用的HBase穩(wěn)定版本是2019年6月10日發(fā)布的HBase1.4.10,其安裝包文件hbase-1.4.10-bin.tar.gz例如存放在master機(jī)器的/home/xuluhui/Downloads中。7.6.4部署全分布模式HBase集群3.主節(jié)點(diǎn)上安裝HBase并設(shè)置屬主(1)在master機(jī)器上,切換到root,解壓hbase-1.4.10-bin.tar.gz到安裝目錄如/usr/local下,依次使用的命令如下所示。surootcd/usr/localtar-zxvf/home/xuluhui/Downloads/hbase-1.4.10-bin.tar.gz(2)為了在普通用戶下使用HBase,將HBase安裝目錄的屬主設(shè)置為L(zhǎng)inux普通用戶例如xuluhui,使用以下命令完成。chown-Rxuluhui/usr/local/hbase-1.4.107.6.4部署全分布模式HBase集群4.主節(jié)點(diǎn)上配置HBaseHBase所有配置文件位于$HBASE_HOME/conf下。單機(jī)模式、偽分布模式和全分布模式下的HBase集群所需修改的配置文件有差異。關(guān)于HBase完整的配置文件介紹請(qǐng)參見官方文檔/book.html#configuration。7.6.4部署全分布模式HBase集群HBase配置文件(部分)配置文件hbase-site.xml涉及的主要參數(shù)文件名稱描述hbase-env.shBash腳本,設(shè)置Linux/Unix環(huán)境下運(yùn)行HBase要用的環(huán)境變量,包括Java安裝路徑等hbase-site.xmlXML文件,HBase核心配置文件,包括HBase數(shù)據(jù)存放位置、ZooKeeper集群地址等配置項(xiàng),其配置項(xiàng)會(huì)覆蓋默認(rèn)配置docs/hbase-default.xmlregionservers純文本,設(shè)置運(yùn)行HRegionServer從進(jìn)程的機(jī)器列表,每行1個(gè)主機(jī)名參數(shù)功能hbase.cluster.distributed指定HBase的運(yùn)行模式,false是單機(jī)模式,true是分布式模式hbase.rootdir每個(gè)regionServer的共享目錄,用來持久化HBase,默認(rèn)為${hbase.tmp.dir}/hbasehbase.zookeeper.quorumZookeeper集群的地址列表,用逗號(hào)分割,默認(rèn)為localhost,是部署偽分布模式HBase集群用的perty.dataDir與ZooKeeper的zoo.cfg中的配置參數(shù)dataDir一致4.主節(jié)點(diǎn)上配置HBase1)編輯配置文件hbase-env.shhbase-env.sh用于設(shè)置Linux/Unix環(huán)境下運(yùn)行HBase要用的環(huán)境變量,包括Java安裝路徑等,使用“vimconf/hbase-env.sh”對(duì)其進(jìn)行如下修改。(1)設(shè)置JAVA_HOME,與master上之前安裝的JDK位置、版本一致,將第27行的注釋去掉,并修改為以下內(nèi)容。exportJAVA_HOME=/usr/java/jdk1.8.0_191/(2)將第46、47行的PermSize作為注釋,因?yàn)镴DK8中無需配置。在JDK8下若PermSize配置不作為注釋或刪掉,則啟動(dòng)HBase集群時(shí)會(huì)出現(xiàn)以下“warning”警告信息。(3)設(shè)置HBASE_PID_DIR,修改進(jìn)程號(hào)文件的保存位置,該參數(shù)默認(rèn)為“/tmp”,將第120行修改為以下內(nèi)容。其中pids目錄由HBase集群?jiǎn)?dòng)后自動(dòng)創(chuàng)建。exportHBASE_PID_DIR=/usr/local/hbase-1.4.10/pids(4)設(shè)置HBASE_MANAGES_ZK,將其值設(shè)置為false,即關(guān)閉HBase本身的ZooKeeper集群,將第128行修改為以下內(nèi)容。exportHBASE_MANAGES_ZK=false4.主節(jié)點(diǎn)上配置HBase2)編輯配置文件hbase-site.xmlhbase-site.xml是HBase核心配置文件,包括HBase數(shù)據(jù)存放位置、ZooKeeper集群地址等配置項(xiàng)。在master機(jī)器上修改配置文件hbase-site.xml,具體內(nèi)容如下所示。<configuration><!--每個(gè)RegionServer的共享目錄,用來持久化HBase,默認(rèn)為${hbase.tmp.dir}/hbase--><property><name>hbase.rootdir</name><value>hdfs://master:9000/hbase</value></property><!--HBase集群模式,false表示HBase的單機(jī)模式,true表示是分布式模式,默認(rèn)為false--><property><name>hbase.cluster.distributed</name><value>true</value></property><!--HBase依賴的ZooKeeper集群地址,默認(rèn)為localhost--><property><name>hbase.zookeeper.quorum</name><value>master:2181,slave1:2181,slave2:2181</value></property></configuration>4.主節(jié)點(diǎn)上配置HBase3)編輯配置文件regionserversRegionservers用于設(shè)置運(yùn)行HRegionServer從進(jìn)程的機(jī)器列表,每行1個(gè)主機(jī)名。在master機(jī)器上修改配置文件regionservers,該文件原來內(nèi)容為“l(fā)ocalhost”,修改為以下內(nèi)容。slave1slave27.6.4部署全分布模式HBase集群5.同步HBase文件至所有從節(jié)點(diǎn)并設(shè)置屬主(1)使用scp命令將master機(jī)器中目錄“hbase-1.4.10”及下屬子目錄和文件統(tǒng)一拷貝至集群中所有HBase從節(jié)點(diǎn)上,例如slave1和slave2上,依次使用的命令如下所示。scp-r/usr/local/hbase-1.4.10root@slave1:/usr/local/hbase-1.4.10scp-r/usr/local/hbase-1.4.10root@slave2:/usr/local/hbase-1.4.10(2)依次將所有HBase從節(jié)點(diǎn)slave1、slave2上的HBase安裝目錄的屬主也設(shè)置為L(zhǎng)inux普通用戶例如xuluhui,使用以下命令完成。chown-Rxuluhui/usr/local/hbase-1.4.10至此,Linux集群中各個(gè)節(jié)點(diǎn)的HBase均已安裝和配置完畢。7.6.4部署全分布模式HBase集群6.在系統(tǒng)配置文件目錄/etc/profile.d下新建hbase.sh另外,為了方便使用HBase各種命令,可以在HBase集群所有機(jī)器上使用“vim/etc/profile.d/hbase.sh”命令在/etc/profile.d文件夾下新建文件hbase.sh,并添加如下內(nèi)容。exportHBASE_HOME=/usr/local/hbase-1.4.10exportPATH=$HBASE_HOME/bin:$PATH重啟機(jī)器,使之生效。此步驟可省略,但當(dāng)輸入啟動(dòng)和管理HBase集群命令時(shí),需要切換到$HBASE_HOME/bin目錄。7.6.5啟動(dòng)全分布模式HBase集群1.啟動(dòng)HDFS集群在主節(jié)點(diǎn)上使用命令“start-dfs.sh”啟動(dòng)HDFS集群,讀者應(yīng)保證HDFS所有主從進(jìn)程都啟動(dòng)成功。2.啟動(dòng)ZooKeeper集群由于上文部署時(shí)HBase并未自動(dòng)管理ZooKeeper,所以用戶需要手工啟動(dòng)ZooKeeper集群。在ZooKeeper集群的所有節(jié)點(diǎn)上使用命令“zkServer.shstart”啟動(dòng)ZooKeeper集群,讀者應(yīng)保證ZooKeeper集群成功啟動(dòng),可以使用命令jps命令驗(yàn)證進(jìn)程,使用命令“zkServer.shstatus”查看狀態(tài)。7.6.5啟動(dòng)全分布模式HBase集群3.啟動(dòng)HBase集群在主節(jié)點(diǎn)上使用命令“start-hbase.sh”啟動(dòng)HBase集群。7.6.6驗(yàn)證全分布模式HBase集群1.驗(yàn)證進(jìn)程(方法1)使用命令jps查看,按前文設(shè)置,HBase主節(jié)點(diǎn)master上應(yīng)該有HBase主進(jìn)程HMaster、HDFS主進(jìn)程N(yùn)ameNode、ZooKeeper進(jìn)程QuorumPeerMain,HBase從節(jié)點(diǎn)slave1、slave2上應(yīng)該有HBase從進(jìn)程HRegionServer、HDFS從進(jìn)程DataNode、ZooKeeper進(jìn)程QuorumPeerMain。7.6.6驗(yàn)證全分布模式HBase集群1.驗(yàn)證進(jìn)程(方法1)啟動(dòng)HBase主進(jìn)程HMaster和從進(jìn)程HRegionServer的同時(shí),會(huì)依次在集群的主從節(jié)點(diǎn)$HBASE_HOME下自動(dòng)生成pids目錄及其下HBase進(jìn)程號(hào)文件*.pid和ZooKeeper節(jié)點(diǎn)文件*.znode。另外,啟動(dòng)HBase主進(jìn)程HMaster和從進(jìn)程HRegionServer的同時(shí),會(huì)依次在集群的主從節(jié)點(diǎn)$HBASE_HOME下自動(dòng)生成logs目錄及其下日志文件*.log等。7.6.6驗(yàn)證全分布模式HBase集群2.驗(yàn)證HBaseWebUI(方法2)打開瀏覽器,輸入HBase集群主節(jié)點(diǎn)WebUI地址30:16010,同時(shí)打開HBase集群從節(jié)點(diǎn)WebUI地址32:16030、33:16030。若主、從節(jié)點(diǎn)的WebUI都能夠順利打開,則表示全分布式的HBase集群部署成功。7.7實(shí)戰(zhàn)HBaseHBaseWebUIHBaseShellHBaseAPI在HBase中使用MapReduce7.7.1HBaseWebUIHBase提供了一個(gè)基于Web的界面允許用戶查看集群的基本信息和實(shí)時(shí)狀態(tài),包括內(nèi)存使用、區(qū)域Region數(shù)量、緩存效率、協(xié)處理器資源、用戶創(chuàng)建的表等。除少部分可以操作外,多數(shù)功能是只讀的。HBase集群主節(jié)點(diǎn)的Web界面在1.0之前的版本默認(rèn)使用端口60010,在1.0之后版本默認(rèn)使用端口16010來在網(wǎng)頁顯示基本信息,HBase集群從節(jié)點(diǎn)的Web界面在1.0之前的版本默認(rèn)使用端口60030,1.0之后版本默認(rèn)使用端口16030在網(wǎng)頁上顯示基本信息。端口可以在文件hbase-site.xml中配置,主節(jié)點(diǎn)和從節(jié)點(diǎn)的端口對(duì)應(yīng)屬性名稱分別為.port和.port。HBase集群主節(jié)點(diǎn)的WebUI地址為http://HMasterIP:16010,HBase集群從節(jié)點(diǎn)的WebUI地址為http://HRegionServerIP:16030。HBase主節(jié)點(diǎn)WebUI界面顯示Master各種信息,包括RegionServers、BackupMasters、Tables、Tasks、SoftwareAttributes。HBase集群主節(jié)點(diǎn)WebUI運(yùn)行效果圖HBase集群主節(jié)點(diǎn)WebUI中SoftwareAttributes顯示效果HBase集群從節(jié)點(diǎn)slave1的WebUI運(yùn)行效果圖7.7.2HBaseShell$HBASE_HOME/bin下存放有HBase各種命令。其中,start-hbase.sh用于啟動(dòng)HBase集群,stop-hbase.sh用于關(guān)閉HBase集群。這里,我們?cè)敿?xì)介紹一下命令行工具“hbaseshell”。進(jìn)入HBase命令行的入口命令是“bin/hbaseshell”,進(jìn)入后輸入命令“help”可以查看HBaseShell命令的幫助信息。HBaseShell命令組名包含命令generalprocesslist,status,table_help,version,whoamiddlalter,alter_async,alter_status,create,describe,disable,disable_all,drop,drop_all,enable,enable_all,exists,get_table,is_disabled,is_enabled,list,list_regions,locate_region,show_filtersnamespacealter_namespace,create_namespace,describe_namespace,drop_namespace,list_namespace,list_namespace_tablesdmlappend,count,delete,deleteall,get,get_counter,get_splits,incr,put,scan,truncate,truncate_preservetoolsassign,balance_switch,balancer,balancer_enabled,catalogjanitor_enabled,catalogjanitor_run,catalogjanitor_switch,cleaner_chore_enabled,cleaner_chore_run,cleaner_chore_switch,clear_deadservers,close_region,compact,compact_rs,compaction_state,flush,is_in_maintenance_mode,list_deadservers,major_compact,merge_region,move,normalize,normalizer_enabled,normalizer_switch,split,splitormerge_enabled,splitormerge_switch,trace,unassign,wal_roll,zk_dumpreplicationadd_peer,append_peer_tableCFs,disable_peer,disable_table_replication,enable_peer,enable_table_replication,get_peer_config,list_peer_configs,list_peers,list_replicated_tables,remove_peer,remove_peer_tableCFs,set_peer_bandwidth,set_peer_tableCFs,show_peer_tableCFs,update_peer_configsnapshotsclone_snapshot,delete_all_snapshot,delete_snapshot,delete_table_snapshots,list_snapshots,list_table_snapshots,restore_snapshot,snapshotconfigurationupdate_all_config,update_configsecuritygrant,list_security_capabilities,revoke,user_permissionproceduresabort_procedure,list_proceduresvisibilitylabelsadd_labels,clear_auths,get_auths,list_labels,set_auths,set_visibilityrsgroupadd_rsgroup,balance_rsgroup,get_rsgroup,get_server_rsgroup,get_table_rsgroup,list_rsgroups,move_servers_rsgroup,move_servers_tables_rsgroup,move_tables_rsgroup,remove_rsgroup,remove_servers_rsgroup7.7.2HBaseShell和關(guān)系數(shù)據(jù)庫類似,HBase的表也可以進(jìn)行增刪改查操作。類似于數(shù)據(jù)庫名稱,HBase使用Namespace的概念,可以指定表空間創(chuàng)建表,也可以直接創(chuàng)建表,進(jìn)入default表空間。HBase支持的四類主要數(shù)據(jù)操作包括以下幾個(gè)。(1)put:增加一行,修改一行。(2)delete:刪除一行,刪除指定列族,刪除指定column的多個(gè)版本,刪除指定column的指定版本等。(3)get:獲取指定行的所有信息,獲取指定行和指定列族的所有column,獲取指定column,獲取指定column的幾個(gè)版本,獲取指定column的指定版本等。(4)scan:獲取所有行,獲取指定行鍵范圍的行,獲取從某行開始的幾行,獲取滿足過濾條件的行等。7.7.2HBaseShell使用HBaseShell命令時(shí),參數(shù)需要遵守以下規(guī)則。(1)HBase中輸入的表名、列名等參數(shù),應(yīng)以單引號(hào)或者雙引號(hào)將名稱包圍。HBase輸入或輸出的數(shù)值類型數(shù)據(jù)支持十進(jìn)制、八進(jìn)制、和十六進(jìn)制,需要使用雙引號(hào)包圍起來。(2)HBase的Shell命令中的多個(gè)參數(shù)需要使用逗號(hào)分隔。(3)輸入鍵值對(duì)形式的參數(shù)時(shí),需要采用Ruby哈希值輸入形式,例如:{'key1'=>'value1','key2'=>'value2',…}?!緦?shí)例:HBaseShell常用命令使用】(1)啟動(dòng)Shell:hbaseshell[xuluhui@master~]$hbaseshell(2)查詢HBase的運(yùn)行狀態(tài):statushbase(main):001:0>status(3)獲取幫助信息:help,不帶任何參數(shù)時(shí),執(zhí)行后會(huì)輸出Shell支持的命令集合。hbase(main):002:0>help(4)創(chuàng)建HBase表,表名為student,列族名為marks。類似于關(guān)系數(shù)據(jù)庫中數(shù)據(jù)定義語言DDL(DataDefinitionLanguage),HBase也提供有對(duì)應(yīng)的Shell命令用于定義和修改表的結(jié)構(gòu)信息,例如,創(chuàng)建表、查詢表、刪除表、修改表等。hbase(main):003:0>CREATE'student','marks'【實(shí)例:HBaseShell常用命令使用】(5)顯示HBase中用戶定義的所有數(shù)據(jù)表。hbase(main):004:0>LISTTABLEstudent1rows(s)in0.0530seconds
=>["student"](6)查看表結(jié)構(gòu)。hbase(main):005:0>DESCRIBE'student'DESCRIPTIONENABLED'student',{NAME=>'marks',BLOOMFILTER=>'ROW',VERSIONS=>'1',IN_MEMORY=>'falsetrue',KEEP_DELETED_CELLS=>'false',DATA_BLOCK_ENCODING=>'NONE',TTL=>'2147483647',COMPRESSION=>'NONE',MIN_VERSION=>'0',BLOCKCACHE=>'true',BLOCKSIZE=>'65536',REPLICATION_SCORE=>'0'}1row(s)in0.5180seconds【實(shí)例:HBaseShell常用命令使用】(7)修改表結(jié)構(gòu)。首先設(shè)置表為不可用狀態(tài),然后添加列族,最后刪除列族,設(shè)置表為可用狀態(tài)。hbase(main):006:0>DISABLE'student'0row(s)in1.3130seconds添加列族“info”,如下所示。hbase(main):007:0>ALTER'student',NAME=>'info',VERSIONS=>5Updaingallregionswiththenewschema…1/1regionsupdatedDone0row(s)in1.2180seconds【實(shí)例:HBaseShell常用命令使用】(7)修改表結(jié)構(gòu)。首先設(shè)置表為不可用狀態(tài),然后添加列族,最后刪除列族,設(shè)置表為可用狀態(tài)。刪除列族“info”,如下所示。hbase(main):008:0>ALTER'student',NAME=>'info',METHOD=>'delete'Updaingallregionswiththenewschema…1/1regionsupdatedDone0row(s)in1.1390seconds啟用表student,如下所示。hbase(main):009:0>ENABLE'student'0row(s)in0.2160seconds【實(shí)例:HBaseShell常用命令使用】(8)刪除表。首先禁用表,然后才能刪除,直接刪除會(huì)報(bào)錯(cuò)。hbase(main):010:0>DISABLE'student'0row(s)in0.2350secondshbase(main):011:0>DROP'student'0row(s)in1.0150seconds(9)查詢表是否存在。hbase(main):012:0>EXISTS'student'Tablestudentdoesnotexist0row(s)in0.3510seconds【實(shí)例:HBaseShell常用命令使用】(10)查詢表是否可用。hbase(main):013:0>IS_ENABLED'student'false0row(s)in0.0700seconds(11)退出Shell:exit,執(zhí)行后回到命令行。hbase(main):014:0>exit【實(shí)例7-1】【實(shí)例7-1】使用HBaseShell命令在HBase下建立一個(gè)student表,其邏輯模型如下表所示,使用學(xué)號(hào)作為行鍵,包括兩個(gè)列族:college和profile,列族college包括school和department兩個(gè)列,profile包括name、height、weight、birthday四個(gè)列??梢愿鶕?jù)需求在列族中增加更多的列,例如profile中可以增加列telephone。對(duì)該表進(jìn)行添加數(shù)據(jù)、修改列族模式等操作。RowKeycollegeprofileschooldepartmentnameheightweightbirthday19052002ComputerEngineeringCSzhaosi1651081999-05-0119052006ComputerEngineeringEEliuneng1701221999-08-02【實(shí)例7-1】(1)創(chuàng)建student表。hbase(main):001:0>CREATE'student','college','profile'(2)向表中插入記錄,使用put命令。hbase(main):002:0>PUT'student','19052002','profile:name','zhaosi'hbase(main):003:0>PUT'student','19052002','profile:height','165'hbase(main):004:0>PUT'student','19052002','profile:weight','108'hbase(main):005:0>PUT'student','19052002','profile:birthday','1999-05-01'hbase(main):006:0>PUT'student','19052002',college:school','ComputerEngineering'hbase(main):007:0>PUT'student','19052002','college:department','CS'hbase(main):008:0>PUT'student','19052006','profile:name','liuneng'hbase(main):009:0>PUT'student','19052006','profile:height','170'hbase(main):010:0>PUT'student','19052006','profile:weight','122'hbase(main):011:0>PUT'student','19052006','profile:birthday','1999-08-02'hbase(main):012:0>PUT'student','19052006','college:school','ComputerEngineering'hbase(main):013:0>PUT'student','19052006','college:department','EE'【實(shí)例7-1】(3)查詢表中有多少條記錄,使用count命令。hbase(main):014:0>COUNT'student'(4)獲取一條數(shù)據(jù),使用get命令,需要給出Rowkey。hbase(main):015:0>GET'student','19052006'COLUMNCELLcollege:school timestamp=1413365819923,value=ComputerEngineeringcollege:department timestamp=1413365923135,value=EEprofile:name timestamp=1413365962176,value=liunengprofile:height timestamp=1413365995212,value=170profile:weight timestamp=1413366003135,value=122profile:birthday timestamp=1413366052198,value=1999-08-02【實(shí)例7-1】(5)獲取某行數(shù)據(jù)一個(gè)列族的所有數(shù)據(jù),使用get命令。hbase(main):016:0>GET'student','19052006','profile'COLUMNCELLprofile:name timestamp=1413365962176,value=liunengprofile:height timestamp=1413365995212,value=170profile:weight timestamp=1413366003135,value=122profile:birthday timestamp=1413366052198,value=1999-08-02(6)獲取某行數(shù)據(jù)一個(gè)列族中一個(gè)列的所有數(shù)據(jù),使用get命令。hbase(main):017:0>GET'student','19052006','profile:name'COLUMNCELLprofile:name timestamp=1413365962176,value=liuneng(7)更新一條記錄,使用put命令,將liuneng的體重改為135。hbase(main):018:0>PUT'student','19052006','profile:weight','135'0row(s)in0.0850seconds【實(shí)例7-1】(8)全表掃描,使用scan命令。hbase(main):019:0>SCAN'student'ROWCOLUMN+CELL19052002column=college:school,timestamp=1413365819923,value=ComputerEngineering19052002column=college:department,timestamp=1413365923135,value=CS19052002column=profile:name,timestamp=1413365962176,value=zhaosi19052002column=profile:height,timestamp=1413365995212,value=16519052002column=profile:weight,timestamp=1413366003135,value=10819052002column=profile:birthday,timestamp=1413366052198,value=1999-05-0119052006column=profile:school,timestamp=1413365819923,value=ComputerEngineering19052006column=college:department,timestamp=1413365923135,value=EE19052006column=profile:name,timestamp=1413365962176,value=liuneng19052006column=profile:height,timestamp=1413365995212,valueolumn=profile:weight,timestamp=1413366003135,value=12219052006column=profile:birthday,timestamp=1413366052198,value=1999-08-02【實(shí)例7-1】(9)刪除行鍵值為19052006的列h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年心理測(cè)試考試題庫及答案一套
- 2026年山西鐵道職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫附答案
- 2026年深圳地鐵心理考試題庫及參考答案一套
- 2026年心理放松考試題庫及答案一套
- 2026年河北省保定市單招職業(yè)適應(yīng)性測(cè)試模擬測(cè)試卷附答案
- 2026年廣東省深圳市單招職業(yè)傾向性測(cè)試模擬測(cè)試卷附答案
- 2026廣東深圳大學(xué)生命與海洋科學(xué)學(xué)院蔣浩宇教授課題組博士后招聘筆試備考試題及答案解析
- 2026福建省三鋼(集團(tuán))有限責(zé)任公司社會(huì)招聘筆試參考題庫及答案解析
- 2026海南省航天技術(shù)創(chuàng)新中心招聘5人筆試備考題庫及答案解析
- 2025年福建莆田市莆陽醫(yī)院內(nèi)科醫(yī)生招聘5人備考題庫附答案
- 土石方土方運(yùn)輸方案設(shè)計(jì)
- 肛腸科進(jìn)修匯報(bào)
- 電網(wǎng)技術(shù)改造及檢修工程定額和費(fèi)用計(jì)算規(guī)定2020 年版答疑匯編2022
- 玉米地膜覆蓋栽培技術(shù)
- 寫作篇 Chapter One Paragragh Writing課件完整版
- 郵輪郵輪產(chǎn)業(yè)與郵輪經(jīng)濟(jì)概述
- WB/T 1019-2002菱鎂制品用輕燒氧化鎂
- 完整word版毛澤東思想和中國特色社會(huì)主義理論體系概論知識(shí)點(diǎn)歸納
- GB/T 18926-2008包裝容器木構(gòu)件
- DB11T 594.1-2017 地下管線非開挖鋪設(shè)工程施工及驗(yàn)收技術(shù)規(guī)程第1部分:水平定向鉆施工
- GB∕T 26408-2020 混凝土攪拌運(yùn)輸車
評(píng)論
0/150
提交評(píng)論