《Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程》實(shí)驗(yàn)指導(dǎo)書(shū)-實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase_第1頁(yè)
《Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程》實(shí)驗(yàn)指導(dǎo)書(shū)-實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase_第2頁(yè)
《Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程》實(shí)驗(yàn)指導(dǎo)書(shū)-實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase_第3頁(yè)
《Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程》實(shí)驗(yàn)指導(dǎo)書(shū)-實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase_第4頁(yè)
《Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程》實(shí)驗(yàn)指導(dǎo)書(shū)-實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase_第5頁(yè)
已閱讀5頁(yè),還剩33頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

《Hadoop大數(shù)據(jù)原理與應(yīng)用實(shí)驗(yàn)教程》配套實(shí)驗(yàn)指導(dǎo)書(shū)實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase編寫(xiě)者:西京學(xué)院-徐魯輝實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase本實(shí)驗(yàn)的知識(shí)地圖如圖5-1所示(表示重點(diǎn)表示難點(diǎn))。圖5-1實(shí)驗(yàn)5部署全分布模式HBase集群和實(shí)戰(zhàn)HBase知識(shí)地圖一、實(shí)驗(yàn)?zāi)康?.理解HBase數(shù)據(jù)模型。2.理解HBase體系架構(gòu)。3.熟練掌握HBase集群的部署。4.了解HBaseWebUI的使用。5.熟練掌握HBaseShell常用命令的使用。6.了解HBaseJavaAPI,能編寫(xiě)簡(jiǎn)單的HBase程序。二、實(shí)驗(yàn)環(huán)境本實(shí)驗(yàn)所需的軟件環(huán)境包括HDFS集群、ZooKeeper集群、HBase安裝包、Eclipse。三、實(shí)驗(yàn)內(nèi)容1.規(guī)劃全分布模式HBase集群。2.部署全分布模式HBase集群。3.啟動(dòng)全分布模式HBase集群。4.驗(yàn)證全分布模式HBase集群。5.使用HBaseWebUI。6.使用HBaseShell常用命令。7.關(guān)閉全分布模式HBase集群。四、實(shí)驗(yàn)原理(一)初識(shí)HBase傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)例如Oracle、MySQL擅長(zhǎng)事務(wù)型數(shù)據(jù),無(wú)法高效地存儲(chǔ)和處理Web3.0和大數(shù)據(jù)時(shí)代的多種非關(guān)系型數(shù)據(jù),以Google的BigTable技術(shù)為代表的新型NoSQL數(shù)據(jù)庫(kù)產(chǎn)品得到了飛速發(fā)展和應(yīng)用,HBase數(shù)據(jù)庫(kù)就是BigTable的開(kāi)源實(shí)現(xiàn),使用Java編寫(xiě)。作為Hadoop生態(tài)系統(tǒng)的重要組成部分之一,HBase是一個(gè)高可靠、高性能、列存儲(chǔ)、可伸縮、實(shí)時(shí)讀寫(xiě)的分布式數(shù)據(jù)庫(kù)系統(tǒng)。HBase利用HadoopMapReduce來(lái)處理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ò)展,通過(guò)不斷增加廉價(jià)的商用服務(wù)器,來(lái)增加計(jì)算和存儲(chǔ)能力。HBase僅能通過(guò)行鍵(Rowkey)和行鍵的范圍來(lái)檢索數(shù)據(jù),僅支持單行事務(wù)(可通過(guò)Hive支持來(lái)實(shí)現(xiàn)多表Join等復(fù)雜操作),主要用來(lái)存儲(chǔ)非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。HBase的主要特點(diǎn)包括:數(shù)據(jù)稀疏、高維度(面向列)、分布式、鍵值有序存儲(chǔ)、數(shù)據(jù)一致性。(二)HBase數(shù)據(jù)模型邏輯上,HBase以表的形式呈現(xiàn)給最終用戶(hù);物理上,HBase以文件的形式存儲(chǔ)在HDFS中。為了高效管理數(shù)據(jù),HBase設(shè)計(jì)了一些元數(shù)據(jù)庫(kù)表來(lái)提高數(shù)據(jù)存取效率。1.邏輯模型HBase以表(Table)的形式存儲(chǔ)數(shù)據(jù),每個(gè)表由行和列組成,每個(gè)列屬于一個(gè)特定的列族(ColumnFamily)。表中的行和列確定的存儲(chǔ)單元稱(chēng)為一個(gè)元素(Cell),每個(gè)元素保存了同一份數(shù)據(jù)的多個(gè)版本,由時(shí)間戳(TimeStamp)來(lái)標(biāo)識(shí)。行鍵(Rowkey)是數(shù)據(jù)行在表中的唯一標(biāo)識(shí),并作為檢索記錄的主鍵。在HBase中訪問(wèn)表中的行只有三種方式:通過(guò)單個(gè)行健訪問(wèn)、給定行鍵的范圍掃描、全表掃描。行健可以是任意字符串,默認(rèn)按字段順序存儲(chǔ)。表中的列定義為<family>:<qualifier>(<列族>:<限定符>),通過(guò)列族和限定符兩部分可以唯一指定一個(gè)數(shù)據(jù)的存儲(chǔ)列。元素由行健、列(<列族>:<限定符>)和時(shí)間戳唯一確定,元素中的數(shù)據(jù)以字節(jié)碼的形式存儲(chǔ),沒(méi)有類(lèi)型之分。關(guān)于HBase邏輯模型中涉及到的相關(guān)概念如表5-1所示。表5-1HBase邏輯模型涉及相關(guān)概念說(shuō)明術(shù)語(yǔ)說(shuō)明表(Table)由行和列組成,列劃分為若干個(gè)列族行鍵(Rowkey)每一行代表著一個(gè)數(shù)據(jù)對(duì)象,由行鍵來(lái)標(biāo)識(shí),行鍵會(huì)被建立索引,數(shù)據(jù)的獲取通過(guò)Rowkey完成,采用字符串列族(ColumnFamily)列的集合,一個(gè)表中列可以分成不同列族,列族需在表創(chuàng)建時(shí)就定義好,數(shù)量不能太多,不能頻繁修改列限定符(ColumnQualifier)表中具體一個(gè)列的名字,列族里的數(shù)據(jù)通過(guò)列限定符來(lái)定位,列限定符不用事先定義,也不需在不同行之間保持一致。被視為byte[]。列名以列族作為前綴,列族:列限定符單元格(Cell)每一個(gè)行鍵、列族和列標(biāo)識(shí)符共同確定的一個(gè)單元,存儲(chǔ)在單元格里的數(shù)據(jù)稱(chēng)為單元格數(shù)據(jù),單元格和單元格數(shù)據(jù)也沒(méi)有特定的數(shù)據(jù)類(lèi)型,以byte[]來(lái)存儲(chǔ)時(shí)間戳(Timestamp)每個(gè)單元格都保存著同一份數(shù)據(jù)的多個(gè)版本,這些版本采用時(shí)間戳進(jìn)行索引。采用64位整型,降序存儲(chǔ)2.物理模型HBase是按照列存儲(chǔ)的稀疏行/列矩陣,其物理模型實(shí)際上就是把邏輯模型中的一個(gè)行進(jìn)行分割,并按照列族存儲(chǔ)。HBase中的所有數(shù)據(jù)文件都存儲(chǔ)在HadoopHDFS文件系統(tǒng)上,主要包括兩種文件類(lèi)型:HFile和HLog。1)HFileHFile是HBase中KeyValue數(shù)據(jù)的存儲(chǔ)格式,是Hadoop的二進(jìn)制格式文件,它是參考BigTable的SSTable和Hadoop的TFile的實(shí)現(xiàn)。從HBase開(kāi)始到現(xiàn)在,HFile經(jīng)歷了三個(gè)版本,其中V2在0.92引入,V3在0.98引入。HFileV1版本在實(shí)際使用過(guò)程中發(fā)現(xiàn)它占用內(nèi)存多,HFileV2版本針對(duì)此進(jìn)行了優(yōu)化,HFileV3版本基本和V2版本相同,只是在Cell層面添加了Tag數(shù)組的支持。鑒于此,編者主要針對(duì)V2版本進(jìn)行分析,對(duì)V1和V3版本感興趣的讀者可以查閱其它資料。(1)HFile邏輯結(jié)構(gòu)HFileV2的邏輯結(jié)構(gòu)如圖5-2所示。ScannedblocksectionDataBlock…Leafindexblock/Bloomblock…DataBlock…Leafindexblock/Bloomblock…DataBlockNon-scannedblocksectionMetablock…MetablockIntermediateLevelDataIndexBlocks(optional)Load-on-opensectionRootDataIndexFieldsformidkeyMetaIndexFileInfoBloomfiltermetadata(interpretedbyStoreFile)TrailerTrailerfieldsVersion圖5-2HFileV2邏輯結(jié)構(gòu)從圖5-2可以看出,HFile主要分為四個(gè)部分:數(shù)據(jù)塊被掃描部分(Scannedblocksection),數(shù)據(jù)塊不被掃描部分(Non-scannedblocksection),啟動(dòng)即加載部分(Load-on-opensection)和HFile基本信息部分(Trailer)。Scannedblocksection:表示順序掃描HFile時(shí)所有的數(shù)據(jù)塊將會(huì)被讀取,包括LeafIndexBlock和BloomBlock。Non-scannedblocksection:表示在HFile順序掃描的時(shí)候數(shù)據(jù)不會(huì)被讀取,主要包括MetaBlock和IntermediateLevelDataIndexBlocks兩部分。Load-on-opensection:這部分?jǐn)?shù)據(jù)在HBase的regionserver啟動(dòng)時(shí),需要加載到內(nèi)存中,包括FileInfo、Bloomfilterblock、datablockindex和metablockindex。Trailer:這部分主要記錄了HFile的基本信息、各個(gè)部分的偏移值和尋址信息。(2)HFile物理結(jié)構(gòu)HFileV2的物理結(jié)構(gòu)如圖5-3所示。RootDataIndexRootDataIndexBlockHFileBlockDataBlock…DataBlockLeafIndexBlockDataBlockMetaBlockMetaBlockIntermediateLevelIndexBlockTrailerBlockMetaIndexBlockFileInfoBloomFilterMetadataBlockScannedblocksectionNon-scannedblocksectionLoad-on-opensectionTrailer圖5-3HFileV2物理結(jié)構(gòu)如圖5-3所示,HFlie會(huì)被切分為多個(gè)大小相等的block塊,每個(gè)block的大小可以在創(chuàng)建表列族的時(shí)候通過(guò)參數(shù)blocksize進(jìn)行指定,默認(rèn)為64K,大號(hào)的Block有利于順序Scan,小號(hào)Block有利于隨機(jī)查詢(xún),因而需要權(quán)衡,而且所有block塊都擁有相同的數(shù)據(jù)結(jié)構(gòu),如圖左側(cè)所示,HBase將block塊抽象為一個(gè)統(tǒng)一的HFileBlock。HFileBlock支持兩種類(lèi)型,一種類(lèi)型支持checksum,另一種不支持checksum。2)HLogHLog是HBase中WAL(WriteAheadLog)的存儲(chǔ)格式,物理上是Hadoop的SequenceFile。SequenceFile的Key是HLogKey對(duì)象,HLogKey中記錄了寫(xiě)入數(shù)據(jù)的歸屬信息,除了table和region名字外,同時(shí)還包括sequenceid和writetime,sequenceid的起始值為0,或者是最近一次存入文件系統(tǒng)中的sequenceid,writetime是寫(xiě)入時(shí)間。HLogSequeceFile的Value是HBase的KeyValue對(duì)象,即對(duì)應(yīng)HFile中的KeyValue。HLog的邏輯結(jié)構(gòu)如圖5-4所示。圖5-4HLog邏輯結(jié)構(gòu)3.元數(shù)據(jù)表從前文的HBase邏輯模型和物理模型的介紹可以看出,HBase的大部分操作都是在HRegionServer中完成,客戶(hù)端想要進(jìn)行插入、刪除和查詢(xún)數(shù)據(jù)都需要先找到對(duì)應(yīng)的HRegionServer??蛻?hù)端需要通過(guò)兩個(gè)元數(shù)據(jù)表來(lái)找到HRegionServer和HRegion之間的對(duì)應(yīng)關(guān)系:-ROOT-和.META.。它們是HBase的兩張系統(tǒng)表,用于管理普通數(shù)據(jù),其存儲(chǔ)和操作方式和普通表相似,差別在于它們存儲(chǔ)的是Region的分布情況和每個(gè)Region的詳細(xì)信息,而不是普通數(shù)據(jù)。HBase使用類(lèi)似B+樹(shù)的三層結(jié)構(gòu)來(lái)保存Region位置信息,如圖5-5所示,HBase的三層結(jié)構(gòu)中各層次的名稱(chēng)和作用如表5-2所示。ZooKeeperZooKeeper文件-ROOT-表.META.表用戶(hù)數(shù)據(jù)表用戶(hù)數(shù)據(jù)表圖5-5HBase三層結(jié)構(gòu)表5-2HBase的三層結(jié)構(gòu)中各層次的名稱(chēng)和作用層次名稱(chēng)作用第一層ZooKeeper文件記錄了-ROOT-表的位置信息第二層-ROOT-表記錄了.META.表的Region位置信息,-ROOT-只能有一個(gè)Region,通過(guò)-ROOT-表就可以訪問(wèn).META.表中的數(shù)據(jù)第三層.META.表記錄了用戶(hù)數(shù)據(jù)表的Region位置信息,.META.表可以有多個(gè)Region,保存了HBase中所有用戶(hù)數(shù)據(jù)表的Region位置信息(三)HBase體系架構(gòu)HBase采用Master/Slave架構(gòu),HBase集群成員包括Client、ZooKeeper集群、HMaster節(jié)點(diǎn)、HRegionServer節(jié)點(diǎn),在底層HBase將數(shù)據(jù)存儲(chǔ)于HDFS中。HBase的體系架構(gòu)如圖5-6所示。圖5-6HBase體系架構(gòu)1.ClientHBaseClient使用HBase的RPC機(jī)制與HMaster和HRegionServer進(jìn)行通信,對(duì)于管理類(lèi)操作,Client與HMaster進(jìn)行RPC;對(duì)于數(shù)據(jù)讀寫(xiě)類(lèi)操作,Client與HRegionServer進(jìn)行RPC??蛻?hù)端包含訪問(wèn)HBase的接口,通常維護(hù)一些緩存來(lái)加快HBase數(shù)據(jù)的訪問(wèn)速度,例如緩存各個(gè)Region的位置信息。2.ZooKeeperZookeeper作為管理者,保證任何時(shí)候,集群中只有一個(gè)Master,對(duì)于HBase,ZooKeeper提供以下基本功能,如圖5-7所示。存儲(chǔ)-ROOT-表的地址、HMaster的地址、HRegionServer的地址。通過(guò)ZooKeeper,HMaster可以隨時(shí)感知到各個(gè)HRegionServer的健康狀態(tài)。ZooKeeper避免HMaster單點(diǎn)故障問(wèn)題,HBase中可以啟動(dòng)多個(gè)HMaster,通過(guò)ZooKeeper的選舉機(jī)制確保只有一個(gè)為當(dāng)前HBase集群的master。圖5-7ZooKeeper在HBase集群中功能3.HMasterHMaster是HBase的主服務(wù)程序,HBase中可以啟動(dòng)多個(gè)HMaster,通過(guò)Zookeeper選舉機(jī)制保證每個(gè)時(shí)刻只有1個(gè)HMaster運(yùn)行。HMaster主要完成以下任務(wù),其功能如圖5-8所示。管理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)。圖5-8HMaster功能4.HRegionServerHRegionServer是HBase的從服務(wù)程序,HBase集群中可以有多個(gè)HRegionServer,其主要功能包括以下幾個(gè)方面。存放和管理本地HRegion。讀寫(xiě)HDFS,管理Table中的數(shù)據(jù)。Client直接通過(guò)HRegionServer讀寫(xiě)數(shù)據(jù)(從HMaster中獲取元數(shù)據(jù),找到RowKey所在的HRegion/HRegionServer后進(jìn)行數(shù)據(jù)讀寫(xiě))。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的功能如圖5-9所示。圖5-9HRegion功能HRegion中由多個(gè)Store組成,每個(gè)Store對(duì)應(yīng)了表中的一個(gè)ColumnFamily的存儲(chǔ),可以看出每個(gè)ColumnFamily其實(shí)就是一個(gè)集中的存儲(chǔ)單元,因此最好將具有共同I/O特性的Column放在一個(gè)ColumnFamily中,這樣做最為高效。(2)StoreStore是HBase存儲(chǔ)的核心,由兩部分組成:MemStore和StoreFiles。MemStore是有序內(nèi)存緩沖區(qū),用戶(hù)寫(xiě)入的數(shù)據(jù)首先會(huì)放入MemStore,當(dāng)MemStore滿(mǎn)了以后會(huì)清空(Flush)成一個(gè)StoreFile(底層實(shí)現(xiàn)是HFile),當(dāng)StoreFile文件數(shù)量增長(zhǎng)到一定閾值,會(huì)觸發(fā)合并(Compact)操作,將多個(gè)StoreFiles合并成一個(gè)StoreFile,合并過(guò)程中會(huì)進(jìn)行版本合并和數(shù)據(jù)刪除,因此可以看出HBase其實(shí)只有增加數(shù)據(jù),所有的更新和刪除操作都是在后續(xù)的Compact合并過(guò)程中進(jìn)行的,這使得用戶(hù)的寫(xiě)操作只要進(jìn)入內(nèi)存中就可以立即返回,保證了HBaseI/O的高性能。當(dāng)StoreFiles合并后,會(huì)逐步形成越來(lái)越大的StoreFile,當(dāng)單個(gè)StoreFile大小超過(guò)一定閾值后,會(huì)觸發(fā)分片(Split)操作,同時(shí)把當(dāng)前Region分片成2個(gè)Region,父Region會(huì)下線,分片得到的2個(gè)孩子Region會(huì)被HMaster分配到相應(yīng)的HRegionServer上,使得原先1個(gè)Region的壓力得以分流到2個(gè)Region上。(3)HLog每個(gè)HRegionServer維護(hù)一個(gè)Hlog,而不是每個(gè)HRegion維護(hù)一個(gè)HLog。這樣不同HRegion(來(lái)自不同表)的日志會(huì)混在一起,這樣做的目的是不斷追加單個(gè)文件相對(duì)于同時(shí)寫(xiě)多個(gè)文件而言,可以減少磁盤(pán)尋址次數(shù),因此可以提高對(duì)表的寫(xiě)性能。但同時(shí)帶來(lái)的麻煩是,如果一臺(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ì)通過(guò)Zookeeper感知到,HMaster首先會(huì)處理遺留的HLog文件,將其中不同HRegion的HLog數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)HRegion的目錄下,然后再將失效的HRegion重新分配,領(lǐng)取到這些HRegion的HRegionServer在加載Region的過(guò)程中會(huì)發(fā)現(xiàn)有歷史HLog需要處理,因此會(huì)重做HLog中的數(shù)據(jù)到MemStore中,然后清空到StoreFiles,完成數(shù)據(jù)恢復(fù)。(四)部署HBase1.運(yùn)行環(huán)境對(duì)于大部分Java開(kāi)源產(chǎn)品而言,在部署與運(yùn)行之前,總是需要搭建一個(gè)合適的環(huán)境,通常包括操作系統(tǒng)和Java環(huán)境兩方面。同時(shí),HBase依賴(lài)于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等。本書(shū)采用的操作系統(tǒng)為L(zhǎng)inux發(fā)行版CentOS7。2)Java環(huán)境HBase使用Java語(yǔ)言編寫(xiě),因此它的運(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。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),沒(méi)有采用分布式文件系統(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的名稱(chēng)節(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的名稱(chēng)節(jié)點(diǎn)和數(shù)據(jù)節(jié)點(diǎn)位于不同計(jì)算機(jī)上。3.配置文件HBase所有配置文件位于$HBASE_HOME/conf下,如圖5-10所示。圖5-10HBase配置文件位置HBase關(guān)鍵的幾個(gè)配置文件的說(shuō)明如表5-3所示,單機(jī)模式、偽分布模式和全分布模式下的HBase集群所需修改的配置文件有差異。關(guān)于HBase完整的配置文件介紹請(qǐng)參見(jiàn)官方文檔/book.html#configuration。表5-3HBase配置文件(部分)文件名稱(chēng)描述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ī)名其中,配置文件hbase-site.xml中涉及的主要配置參數(shù)如表5-4所示。表5-4配置文件hbase-site.xml涉及的主要參數(shù)參數(shù)功能hbase.cluster.distributed指定HBase的運(yùn)行模式,false是單機(jī)模式,true是分布式模式hbase.rootdir每個(gè)regionServer的共享目錄,用來(lái)持久化HBase,默認(rèn)為${hbase.tmp.dir}/hbasehbase.zookeeper.quorumZookeeper集群的地址列表,用逗號(hào)分割,默認(rèn)為localhost,是部署偽分布模式HBase集群用的perty.dataDir與ZooKeeper的zoo.cfg中的配置參數(shù)dataDir一致例如,單機(jī)模式的hbase-site.xml文件示例內(nèi)容如下。<configuration><property><name>hbase.rootdir</name><value>file:///home/testuser/hbase</value></property><property><name>perty.dataDir</name><value>/home/testuser/zookeeper</value></property></configuration>其中,配置項(xiàng)hbase.rootdir用于設(shè)置HBase和ZooKeeper數(shù)據(jù)的存放路徑,前綴“file://”表示本地文件系統(tǒng)。若HBase數(shù)據(jù)存放在HDFS上,需要設(shè)置hbase.rootdir指向HDFS,例如“hdfs://master:9000/hbase”。(五)HBase接口1.HBaseWebUIHBase集群主節(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,其效果如圖5-11和圖5-12所示。圖5-11HBase集群主節(jié)點(diǎn)WebUI運(yùn)行效果圖圖5-12HBase集群主節(jié)點(diǎn)WebUI中SoftwareAttributes顯示效果HBase集群從節(jié)點(diǎn)WebUI界面顯示RegionServer各種信息,包括ServerMetrics、BlockCache、Tasks、Regions、SoftwareAttributes,HBase集群從節(jié)點(diǎn)slave1的WebUI運(yùn)行效果如圖5-13所示。圖5-13HBase集群從節(jié)點(diǎn)slave1的WebUI運(yùn)行效果圖2.HBaseShell$HBASE_HOME/bin下存放有HBase各種命令,如圖5-14所示。圖5-14HBase各種命令其中,start-hbase.sh用于啟動(dòng)HBase集群,stop-hbase.sh用于關(guān)閉HBase集群。這里,我們?cè)敿?xì)介紹一下命令行工具“hbaseshell”。進(jìn)入HBase命令行的入口命令是“bin/hbaseshell”,進(jìn)入后輸入命令“help”可以查看HBaseShell命令的幫助信息,部分幫助信息如圖5-15所示。圖5-15HBaseShell幫助信息(部分)從HBaseShell的幫助可以看出,HBaseShell命令共分為12大類(lèi),各類(lèi)別所包含的命令如表5-5所示。表5-5HBaseShell命令組名包含命令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_rsgroup3.HBaseAPIHBaseAPI用于數(shù)據(jù)存儲(chǔ)管理,主要操作包括建表、插入表數(shù)據(jù)、刪除表數(shù)據(jù)、獲取一行數(shù)據(jù)、表掃描、刪除列族、刪除表等。HBase使用Java語(yǔ)言編寫(xiě),提供了豐富了Java編程接口供開(kāi)發(fā)人員調(diào)用,同時(shí),HBase為其它多種編程語(yǔ)言也提供了API,C、C++、Scala、Python等。我們重點(diǎn)介紹HBase的Java客戶(hù)端API使用方式,HBase部分核心JavaAPI及其簡(jiǎn)單說(shuō)明如表5-6所示。表5-6HBase部分核心JavaAPI類(lèi)或接口說(shuō)明org.apache.hadoop.hbase.HBaseConfiguration用于管理HBase配置信息org.apache.hadoop.hbase.HBaseAdmin用于操作數(shù)據(jù)表的結(jié)構(gòu)org.apache.hadoop.hbase.HTableDescriptor包含表的詳細(xì)信息,例如表中的列族、該表的類(lèi)型、該表是否只讀、MemStore最大空間、Region什么時(shí)候應(yīng)該分裂等org.apache.hadoop.hbase.HColumnDescriptor包含列族的詳細(xì)信息,例如列族的版本號(hào)、壓縮設(shè)置等org.apache.hadoop.hbase.HTable用于從HBase數(shù)據(jù)庫(kù)中獲取表信息或者更新org.apache.hadoop.hbase.client.Put用于對(duì)單元格執(zhí)行添加數(shù)據(jù)操作org.apache.hadoop.hbase.client.Get用于獲取單行的信息org.apache.hadoop.hbase.client.Scan限定需要查找的數(shù)據(jù),例如限定版本號(hào)、起始行號(hào)、終止行號(hào)、列族、列限定符、返回值的數(shù)量上限等org.apache.hadoop.hbase.client.Result用于存放Get和Scan操作后的查詢(xún)結(jié)果,并以<key,value>格式存儲(chǔ)在map結(jié)構(gòu)中org.apache.hadoop.hbase.client.ResultScanner客戶(hù)端獲取值的接口關(guān)于HBaseAPI的詳細(xì)資料讀者請(qǐng)參考本地文件file:///usr/local/hbase-1.4.10/docs/apidocs/index.html或者官網(wǎng)/apidocs/index.html。ApacheHBase1.4.10API的首頁(yè)如圖5-16所示。圖5-16ApacheHBase1.4.10API官方參考指南首頁(yè)五、實(shí)驗(yàn)步驟(一)規(guī)劃全分布模式HBase集群1.HBase集群規(guī)劃本實(shí)驗(yàn)擬采用全分布模式部署HBase,將HBase集群運(yùn)行在Linux上,使用3臺(tái)安裝有Linux操作系統(tǒng)的機(jī)器,主機(jī)名分別為master、slave1、slave2。具體全分布模式HBase集群規(guī)劃表如表5-7所示。表5-7全分布模式HBase集群部署規(guī)劃表主機(jī)名IP地址運(yùn)行服務(wù)軟硬件配置master30NameNodeSecondaryNameNodeQuorumPeerMainHMaster內(nèi)存:4GCPU:1個(gè)2核硬盤(pán):40G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2ZooKeeper:ZooKeeper3.4.13HBase:HBase1.4.10Eclipse:EclipseIDE2018-09forJavaDevelopersslave131DataNodeQuorumPeerMainHRegionServer內(nèi)存:1GCPU:1個(gè)1核硬盤(pán):20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2ZooKeeper:ZooKeeper3.4.13HBase:HBase1.4.10slave232DataNodeQuorumPeerMainHRegionServer內(nèi)存:1GCPU:1個(gè)1核硬盤(pán):20G操作系統(tǒng):CentOS7.6.1810Java:OracleJDK8u191Hadoop:Hadoop2.9.2ZooKeeper:ZooKeeper3.4.13HBase:HBase1.4.102.軟件選擇本實(shí)驗(yàn)中所使用各種軟件的名稱(chēng)、版本、發(fā)布日期及下載地址如表5-8所示。表5-8本實(shí)驗(yàn)使用的軟件名稱(chēng)、版本、發(fā)布日期及下載地址軟件名稱(chēng)軟件版本發(fā)布日期下載地址VMwareWorkstationProVMwareWorkstation14.5.7ProforWindows2017年6月22日/products/workstation-pro.htmlCentOSCentOS7.6.18102018年11月26日/download/JavaOracleJDK8u1912018年10月16日/technetwork/java/javase/downloads/index.htmlHadoopHadoop2.9.22018年11月19日/releases.htmlZooKeeperZooKeeper3.4.132018年7月15日/releases.htmlHBaseHBase1.4.102019年6月10日/downloads.htmlEclipseEclipseIDE2018-09forJavaDevelopers2018年9月/downloads/packages/注意,本書(shū)采用的是HBase版本是1.4.10,3個(gè)節(jié)點(diǎn)的機(jī)器名分別為master、slave1、slave2,IP地址依次為30、31、32,后續(xù)內(nèi)容均在表5-8規(guī)劃基礎(chǔ)上完成,請(qǐng)讀者務(wù)必確認(rèn)自己的HBase版本、機(jī)器名等信息。(二)部署全分布模式HBase集群HBase目前有1.x和2.x兩個(gè)系列的版本,建議讀者使用當(dāng)前的穩(wěn)定版本,本書(shū)采用穩(wěn)定版本HBase1.4.10,因此本章的講解都是針對(duì)這個(gè)版本進(jìn)行的。盡管如此,由于HBase各個(gè)版本在部署和運(yùn)行方式上的變化不大,因此本章的大部分內(nèi)容都適用于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集群。以上步驟編者已在教材實(shí)驗(yàn)1、實(shí)驗(yàn)4中詳細(xì)介紹,具體操作過(guò)程請(qǐng)讀者參見(jiàn)教材,此處不再贅述。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中。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)為了在普通用戶(hù)下使用HBase,將HBase安裝目錄的屬主設(shè)置為L(zhǎng)inux普通用戶(hù)例如xuluhui,使用以下命令完成。chown-Rxuluhui/usr/local/hbase-1.4.104.主節(jié)點(diǎn)上配置HBaseHBase所有配置文件位于$HBASE_HOME/conf下,具體的配置文件如前文圖5-9所示。本實(shí)驗(yàn)中編者僅修改hbase-env.sh、hbase-site.xml、regionservers三個(gè)配置文件。假設(shè)當(dāng)前目錄為“/usr/local/hbase-1.4.10”,切換到普通用戶(hù)如xuluhui下,在主節(jié)點(diǎn)master上配置HBase的具體過(guò)程如下所示。1)編輯配置文件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)容,修改后的效果如圖5-17所示。exportJAVA_HOME=/usr/java/jdk1.8.0_191/圖5-17編輯配置文件hbase-env.sh中JAVA_HOME(2)將第46、47行的PermSize作為注釋?zhuān)驗(yàn)镴DK8中無(wú)需配置,修改后的效果如圖5-18所示。圖5-18編輯配置文件hbase-env.sh中PermSizeJDK8下若PermSize配置不作為注釋或刪掉,則啟動(dòng)HBase集群時(shí)會(huì)出現(xiàn)以下“warning”警告信息,如圖5-19所示。圖5-19JDK8下不注釋掉PermSize配置啟動(dòng)HBase集群出現(xiàn)的警告信息(3)設(shè)置HBASE_PID_DIR,修改進(jìn)程號(hào)文件的保存位置,該參數(shù)默認(rèn)為“/tmp”,將第120行修改為以下內(nèi)容,如圖5-20所示。其中pids目錄由HBase集群?jiǎn)?dòng)后自動(dòng)創(chuàng)建。圖5-20編輯配置文件hbase-env.sh中HBASE_PID_DIR(4)設(shè)置HBASE_MANAGES_ZK,將其值設(shè)置為false,即關(guān)閉HBase本身的ZooKeeper集群,將第128行修改為以下內(nèi)容,如圖5-21所示。圖5-21編輯配置文件hbase-env.sh中HBASE_MANAGES_ZK2)編輯配置文件hbase-site.xmlhbase-site.xml是HBase核心配置文件,包括HBase數(shù)據(jù)存放位置、ZooKeeper集群地址等配置項(xiàng)。在master機(jī)器上修改配置文件hbase-site.xml,具體內(nèi)容如下所示。<configuration><!--每個(gè)regionServer的共享目錄,用來(lái)持久化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依賴(lài)的ZooKeeper集群地址,默認(rèn)為localhost--><property><name>hbase.zookeeper.quorum</name><value>master:2181,slave1:2181,slave2:2181</value></property></configuration>3)編輯配置文件regionserversRegionservers用于設(shè)置運(yùn)行HRegionServer從進(jìn)程的機(jī)器列表,每行1個(gè)主機(jī)名。在master機(jī)器上修改配置文件regionservers,該文件原來(lái)內(nèi)容為“l(fā)ocalhost”,修改為以下內(nèi)容。slave1slave25.同步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普通用戶(hù)例如xuluhui,使用以下命令完成。chown-Rxuluhui/usr/local/hbase-1.4.10讀者可以使用ssh命令直接在master節(jié)點(diǎn)上遠(yuǎn)程連接所有HBase從節(jié)點(diǎn),以修改HBase安裝目錄的屬主。以slave2為例,依次使用的命令及效果如圖5-22所示。圖5-22通過(guò)ssh直接在master節(jié)點(diǎn)上修改slave2上HBase安裝目錄屬主至此,Linux集群中各個(gè)節(jié)點(diǎn)的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ī)器,使之生效。此步驟可省略,之所以將$HBASE_HOME/bin目錄加入到系統(tǒng)環(huán)境變量PATH中,是因?yàn)楫?dāng)輸入啟動(dòng)和管理HBase集群命令時(shí),無(wú)需再切換到$HBASE_HOME/bin目錄,否則會(huì)出現(xiàn)錯(cuò)誤信息“bash:****:commandnotfound...”。(三)啟動(dòng)全分布模式HBase集群1.啟動(dòng)HDFS集群在主節(jié)點(diǎn)上使用命令“start-dfs.sh”啟動(dòng)HDFS集群,使用的命令及運(yùn)行效果如圖5-23所示,從圖5-23中可以看出,HDFS主進(jìn)程N(yùn)ameNode成功啟動(dòng),slave1和slave2上的從進(jìn)程DataNode此處未展示,讀者應(yīng)保證HDFS所有主從進(jìn)程都啟動(dòng)成功。圖5-23啟動(dòng)HDFS集群2.啟動(dòng)ZooKeeper集群由于本實(shí)驗(yàn)中HBase并未自動(dòng)管理ZooKeeper,所以用戶(hù)需要手工啟動(dòng)ZooKeeper集群。在ZooKeeper集群的所有節(jié)點(diǎn)上使用命令“zkServer.shstart”啟動(dòng)ZooKeeper集群,編者為了方便,在節(jié)點(diǎn)master上使用ssh遠(yuǎn)程連接slave1、slave2,完成了各個(gè)節(jié)點(diǎn)ZooKeeper的啟動(dòng)工作,依次使用的命令和執(zhí)行效果如圖5-24所示。圖5-24啟動(dòng)ZooKeeper集群此處未展示ZooKeeper各進(jìn)程和各節(jié)點(diǎn)狀態(tài),讀者應(yīng)保證ZooKeeper集群成功啟動(dòng),可以使用命令jps命令驗(yàn)證進(jìn)程,使用命令“zkServer.shstatus”查看狀態(tài)。3.啟動(dòng)HBase集群在主節(jié)點(diǎn)上啟動(dòng)HBase集群,使用的命令及執(zhí)行效果如圖5-25所示。圖5-25啟動(dòng)HBase集群(四)驗(yàn)證全分布模式HBase集群?jiǎn)?dòng)HBase集群后,可通過(guò)以下兩種方法驗(yàn)證HBase集群是否成功部署。1.驗(yàn)證進(jìn)程(方法1)使用命令jps查看,按本實(shí)驗(yàn)設(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,效果如圖5-26所示。圖5-26使用jps驗(yàn)證HBase集群是否部署成功啟動(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,效果如圖5-27所示的文件。圖5-27當(dāng)前HBase集群主從節(jié)點(diǎn)上目錄“/usr/local/hbase-1.4.10/pids”中文件另外,啟動(dòng)HBase主進(jìn)程HMaster和從進(jìn)程HRegionServer的同時(shí),會(huì)依次在集群的主從節(jié)點(diǎn)$HBASE_HOME下自動(dòng)生成logs目錄及其下日志文件*.log等,效果如圖5-28所示的文件。圖5-28當(dāng)前HBase集群主從節(jié)點(diǎn)上目錄“/usr/local/hbase-1.4.10/logs”中文件2.驗(yàn)證HBaseWebUI(方法2)打開(kāi)瀏覽器,輸入HBase集群主節(jié)點(diǎn)WebUI地址30:16010,效果如上文圖5-11和圖5-12所示。同時(shí)打開(kāi)HBase集群從節(jié)點(diǎn)WebUI地址32:16030、33:16030,其中HBase集群從節(jié)點(diǎn)slave1的WebUI運(yùn)行效果圖如圖5-13所示。若主、從節(jié)點(diǎn)的WebUI都能夠順利打開(kāi),則表示全分布式的HBase集群部署成功。(五)使用HBaseShell和HBaseWebUI【案例5-1】使用HBaseShell命令在HBase下建立一個(gè)student表,其邏輯模型如表5-9所示,對(duì)該表進(jìn)行添加數(shù)據(jù)、修改列族模式等操作后,使用HBaseWebUI、ZooKeeper、HDFSWebUI等工具查看該表,最后刪除該表。表5-9HBase表student邏輯模型Rowkey列族personalInfo列族gradeInfoSNOSnameSsexSageSdeptBigDataMathEnglish(1)使用命令“hbaseshell”進(jìn)入HBase命令行。使用命令及執(zhí)行結(jié)果如圖5-29所示。圖5-29進(jìn)入HBaseShell(2)使用create命令創(chuàng)建HBase表student,然后使用describe查看表結(jié)構(gòu)。使用命令及執(zhí)行結(jié)果如圖5-30所示。圖5-30創(chuàng)建表create和查看表結(jié)構(gòu)describe命令(3)使用put命令向student表中插入數(shù)據(jù),行鍵值為“190809011001”,personalInfo:Sname為“xuluhui”,gradeInfo:BigData為“100”。使用命令及執(zhí)行結(jié)果如圖5-31所示。圖5-31使用put命令向表中插入數(shù)據(jù)(4)使用scan命令查看表student的全部數(shù)據(jù)。使用命令及執(zhí)行結(jié)果如圖5-32所示。圖5-32使用scan查詢(xún)表中數(shù)據(jù)(5)為了查詢(xún)表student中數(shù)據(jù)的歷史版本,使用alter命令修改表結(jié)構(gòu),將列族gradeInfo的VERSIONS設(shè)置為5。使用命令及執(zhí)行結(jié)果如圖5-33所示,從圖5-33中可以看到Describe命令的執(zhí)行結(jié)果中列族gradeInfo的VERSIONS已為5。 圖5-33使用alter命令修改表結(jié)構(gòu)(6)使用put命令再次向student表中插入數(shù)據(jù),將行鍵值為“190809011001”的gradeInfo:BigData設(shè)置為“95”,接著第3次將行鍵值為“190809011001”的gradeInfo:BigData設(shè)置為“90”,最后使用get命令獲取列g(shù)radeInfo:BigData的多版本數(shù)據(jù)。使用命令及執(zhí)行結(jié)果如圖5-34所示。這里需要注意的是,get命令中歷史版本參數(shù)VERSIONS的取值“5”不加單引號(hào),否則出錯(cuò)。圖5-34使用get命令獲取列的多版本數(shù)據(jù)(7)打開(kāi)HBase主節(jié)點(diǎn)的WebUI,可以看到已建立的student表,如圖5-35所示。圖5-35從HBase集群主節(jié)點(diǎn)的WebUI界面上查看student表(8)使用命令“zkCli.sh-servermaster:2181,slave1:2181,slave2:2181”連接ZooKeeper客戶(hù)端,從ZooKeeper的存儲(chǔ)樹(shù)中也可以查看到建立的student表,如圖5-36所示。圖5-36從ZooKeeper存儲(chǔ)樹(shù)中可查看到student表(9)由于HBase底層存儲(chǔ)采用HDFS,所以打開(kāi)HDFSWebUI,也可以查看到建立的student表,如圖5-37所示。圖5-37從底層存儲(chǔ)HDFSWebUI界面上可查看到student表(10)刪除表student。這里需要注意,不能直接使用命令“drop”刪除表,表在刪除之前必須處于“disable”狀態(tài),所以刪除表首先要使用命令“disable”使表不可用,然后再使用命令“drop”進(jìn)行刪除,使用命令及執(zhí)行結(jié)果如圖5-38所示。圖5-38使用disable+drop命令刪除表(11)退出HBaseShell。使用命令“quit”退出HBaseShell,使用命令及執(zhí)行結(jié)果如圖5-39所示。圖5-39使用quit命令退出HBaseShell(六)關(guān)閉全分布模式HBase集群使用命令“stop-hbase.sh”關(guān)閉HBase集群,使用命令及執(zhí)行結(jié)果如圖5-40所示。圖5-40關(guān)閉HBase集群按照本實(shí)驗(yàn)設(shè)置,關(guān)閉HBase集群后HBase主節(jié)點(diǎn)master上的主進(jìn)程HMaster、HBase從節(jié)點(diǎn)slave1、slave2上的從進(jìn)程HRegionServer消失,同時(shí)HBase主從節(jié)點(diǎn)上所有與HBase相關(guān)的ZooKeeper節(jié)點(diǎn)文件*.znode和進(jìn)程號(hào)文件*.pid也依次消失。六、實(shí)驗(yàn)報(bào)告要求實(shí)驗(yàn)報(bào)告以電子版和打印版雙重形式提交。實(shí)驗(yàn)報(bào)告主要內(nèi)容包括實(shí)驗(yàn)名稱(chēng)、實(shí)驗(yàn)類(lèi)型、實(shí)驗(yàn)地點(diǎn)、學(xué)時(shí)、實(shí)驗(yàn)環(huán)境、實(shí)驗(yàn)原理、實(shí)驗(yàn)步驟、實(shí)驗(yàn)結(jié)果、總結(jié)與思考等。實(shí)驗(yàn)報(bào)告格式如表1-9所示。七、拓展訓(xùn)練本節(jié)中,編者將通過(guò)一些簡(jiǎn)單實(shí)例來(lái)介紹如何使用HBaseAPI編寫(xiě)應(yīng)用程序,若要深入學(xué)習(xí)HBase編程,讀者可以訪問(wèn)HBase官方網(wǎng)站提供的完整HBaseAPI文檔。為了提高程序編寫(xiě)和調(diào)試效率,本書(shū)采用Eclipse工具編寫(xiě)Java程序,采用版本為適用于64位Linux操作系統(tǒng)的EclipseIDE2018-09forJavaDevelopers,關(guān)于如何在Linux下安裝Eclipse,具體過(guò)程如下所示。(一)搭建HBase開(kāi)發(fā)環(huán)境Eclipse在HBase集群的主節(jié)點(diǎn)上搭建HBase開(kāi)發(fā)環(huán)境Eclipse,具體過(guò)程請(qǐng)讀者參考實(shí)驗(yàn)項(xiàng)目2,此處不再贅述。(二)HBase編程實(shí)踐:HBase表的增刪改【案例5-2】使用HBaseJavaAPI實(shí)現(xiàn)對(duì)HBase表的增刪改。創(chuàng)建Java項(xiàng)目“HBaseExample”,在其下創(chuàng)建包“com.xijing.hbase”,在該包中新建類(lèi)“TableCMD”,具體新建過(guò)程與前面章節(jié)相同,此處不再贅述。實(shí)現(xiàn)對(duì)HBase表的增刪改操作的完整代碼如下所示。packagecom.xijing.hbase;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.HColumnDescriptor;importorg.apache.hadoop.hbase.HConstants;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.Admin;importorg.apache.hadoop.hbase.client.Connection;importorg.apache.hadoop.hbase.client.ConnectionFactory;importpress.Compression.Algorithm;publicclassTableCMD{privatestaticfinalStringTABLE_NAME="MY_TABLE_NAME_TOO";privatestaticfinalStringCF_DEFAULT="DEFAULT_COLUMN_FAMILY";publicstaticvoidcreateOrOverwrite(Adminadmin,HTableDescriptortable)throwsIOException{if(admin.tableExists(table.getTableName())){admin.disableTable(table.getTableName());admin.deleteTable(table.getTableName());}admin.createTable(table);}publicstaticvoidcreateSchemaTables(Configurationconfig)throwsIOException{try(Connectionconnection=ConnectionFactory.createConnection(config);Adminadmin=connection.getAdmin()){HTableDescriptortable=newHTableDescriptor(TableName.valueOf(TABLE_NAME));table.addFamily(newHColumnDescriptor(CF_DEFAULT).setCompressionType(Algorithm.NONE));System.out.print("Creatingtable.");createOrOverwrite(admin,table);System.out.println("Done.");}}publicstaticvoidmodifySchema(Configurationconfig)throwsIOException{try(Connectionc

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論