第8章 HBase分布式數(shù)據(jù)庫_第1頁
第8章 HBase分布式數(shù)據(jù)庫_第2頁
第8章 HBase分布式數(shù)據(jù)庫_第3頁
第8章 HBase分布式數(shù)據(jù)庫_第4頁
第8章 HBase分布式數(shù)據(jù)庫_第5頁
已閱讀5頁,還剩58頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第八章

HBase分布式數(shù)據(jù)庫大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.1HBase簡(jiǎn)介8.2

HBase的基本組成結(jié)構(gòu)8.3

HBase數(shù)據(jù)模型8.4

HBase的系統(tǒng)架構(gòu)8.5

HBase的安裝部署8.6

HBase的Shell操作8.7

HBase的JavaAPI介紹8.8

本章小結(jié)本章目錄大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.1HBase簡(jiǎn)介大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.1HBase簡(jiǎn)介HBase可看作谷歌Bigtable的開源實(shí)現(xiàn),部署于HadoopHDFS之上,提供類似Bigtable的功能。谷歌Bigtable利用GFS作為其文件存儲(chǔ)系統(tǒng)。類似地,HBase利用HDFS作為其存儲(chǔ)系統(tǒng)。因此,HBase可視為Hadoop生態(tài)系統(tǒng)的結(jié)構(gòu)化存儲(chǔ)層,數(shù)據(jù)存儲(chǔ)于分布式文件系統(tǒng)的HDFS中,并使用ZooKeeper提供協(xié)調(diào)服務(wù)。HDFS為HBase提供了高可靠性的底層存儲(chǔ)支持,MapReduce為HBase提供了高性能的計(jì)算能力,ZooKeeper為HBase提供了穩(wěn)定的服務(wù)和實(shí)現(xiàn)恢復(fù)機(jī)制。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.1HBase簡(jiǎn)介HBase并不適合存儲(chǔ)少量數(shù)據(jù),其設(shè)計(jì)目的是處理非常龐大的表,其數(shù)據(jù)通常達(dá)到十億甚至百億級(jí)別。由于HBase依賴HadoopHDFS,因此它與Hadoop一樣,主要依靠橫向擴(kuò)展,通過不斷增加廉價(jià)的商用服務(wù)器來提高計(jì)算和存儲(chǔ)能力。因此,HBase并不適用于所有場(chǎng)合,以下列出兩點(diǎn)注意事項(xiàng)。如果數(shù)據(jù)量足夠大,那么HBase是一個(gè)很好的選擇。但如果只有幾百萬行甚至更少的數(shù)據(jù)量,那么傳統(tǒng)的關(guān)系型數(shù)據(jù)庫是一個(gè)更好的選擇。要有足夠的硬件資源,當(dāng)每個(gè)HDFS集群在少于5個(gè)節(jié)點(diǎn)時(shí),HBase的表現(xiàn)則不盡人意。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.2HBase的基本組成結(jié)構(gòu)大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.2HBase的基本組成結(jié)構(gòu)HBase的基本組成結(jié)構(gòu)包括表、行、列簇、列限定符、單元格等,下表給出了HBase表的簡(jiǎn)單樣式,以下逐一介紹。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)行鍵(Rowkey)列簇1(Columnfamily1)列簇2(Columnfamily2)列簇3(Columnfamily3)Col1Col2Col3Col1Col2Col3Col1Col2Col31

2

8.2HBase的基本組成結(jié)構(gòu)8.2.1表在HBase中,數(shù)據(jù)存儲(chǔ)在表中,表名是一個(gè)字符串,表由行和列組成。與關(guān)系型數(shù)據(jù)庫不同,HBase表是多維映射的,對(duì)表的處理也有其自身的特點(diǎn)。HBase中的表通常有上億行、上百萬列(后面將介紹HBase中的行和列);HBase表采用面向列的存儲(chǔ)和權(quán)限控制;空列并不占用HBase的存儲(chǔ)空間。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.2HBase的基本組成結(jié)構(gòu)8.2.2行HBase中的行(Row)由行鍵(Rowkey)、一個(gè)或多個(gè)列(Column)組成。行鍵類似關(guān)系型數(shù)據(jù)庫中的主鍵索引,但它沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]。在整個(gè)HBase表中,行鍵是唯一的,并且總是按照字母順序排序的。例如,HBase表中已有3條行鍵分別為0000001、0000002和0000004的數(shù)據(jù),當(dāng)插入一條行鍵為0000003的數(shù)據(jù)時(shí),該條數(shù)據(jù)不會(huì)排在最后,而是排在行鍵為0000002和0000004的數(shù)據(jù)的中間。因此,行鍵內(nèi)容的設(shè)計(jì)非常重要,可以利用行鍵的這個(gè)特性有效地將相關(guān)的數(shù)據(jù)排列在一起。例如,可以將網(wǎng)站的域名反轉(zhuǎn)后作為行鍵進(jìn)行存儲(chǔ)(如com.baidu.map、com.baidu.photo、com.baidu.tieba)。這樣,所有的百度域名在表中將自動(dòng)地排列在一起,而不是分散排列的。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.2HBase的基本組成結(jié)構(gòu)8.2.3列簇列簇(Columnfamily),也稱列族。HBase列簇由多個(gè)列組成,相當(dāng)于列的分組。列的數(shù)量沒有限制,一個(gè)列簇里可以有數(shù)百萬個(gè)列。HBase表中的每一行都有相同的列簇。列簇必須在HBase表創(chuàng)建時(shí)指定,不能輕易修改,且列簇名的類型為字符串。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.2HBase的基本組成結(jié)構(gòu)8.2.4列限定符列限定符(Qualifier)用于代表HBase表中列的名稱,列簇中的數(shù)據(jù)通過列限定符來定位,常見的定位格式為“family:qualifier”。例如,要定位列簇cf1中的列stu_id,使用cf1:stu_id。HBase中的列簇和列限定符都可以理解為級(jí)別不同的列。一個(gè)列簇中可以有多個(gè)列限定符,因此列簇可以簡(jiǎn)單地理解為第一級(jí)列,列限定符是第二級(jí)列,兩者是父子關(guān)系。與行鍵相同,列限定符也沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.2HBase的基本組成結(jié)構(gòu)8.2.5單元格單元格(Cell)通過行鍵、列簇和列限定符一起來定位。單元格包含值和時(shí)間戳。其中,值沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[];時(shí)間戳代表該值的版本,類型為long。在默認(rèn)情況下,時(shí)間戳表示數(shù)據(jù)寫入服務(wù)器的時(shí)間,但是當(dāng)數(shù)據(jù)被放入單元格時(shí),也可以指定不同的時(shí)間戳。每個(gè)單元格都按照時(shí)間戳降序排列的形式保存著同一份數(shù)據(jù)的多個(gè)版本,即最新的數(shù)據(jù)排在最前面,這樣有利于快速查找最新數(shù)據(jù)。對(duì)單元格中的數(shù)據(jù)進(jìn)行訪問時(shí)會(huì)默認(rèn)讀取最新的值。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.3HBase數(shù)據(jù)模型大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.3HBase數(shù)據(jù)模型不同于常見的RDBMS,HBase有其自有的數(shù)據(jù)模型,本節(jié)介紹HBase數(shù)據(jù)模型并比較其與RDBMS數(shù)據(jù)模型的差異。下圖展示了RDBMS和HBase的數(shù)據(jù)模型的不同。傳統(tǒng)RDBMS數(shù)據(jù)庫對(duì)于不存在的值,必須存儲(chǔ)NULL值;而在HBase中,不存在的值可以省略,且不占存儲(chǔ)空間。此外,HBase在新建表時(shí)必須指定表名和列簇,不需要指定列,所有列在后續(xù)添加數(shù)據(jù)時(shí)動(dòng)態(tài)添加;而RDBMS指定好列以后不可以修改和動(dòng)態(tài)添加。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.3HBase數(shù)據(jù)模型HBase數(shù)據(jù)模型也可被看作一個(gè)鍵值數(shù)據(jù)庫,通過4個(gè)鍵定位具體的值。這4個(gè)鍵為行鍵、列簇、列限定符和時(shí)間戳(其中,時(shí)間戳也可省略,默認(rèn)取最新數(shù)據(jù))。HBase數(shù)據(jù)模型首先通過行鍵定位一整行數(shù)據(jù),然后通過列簇定位列所在的范圍,最后通過列限定符定位具體的單元格數(shù)據(jù),若給定了時(shí)間戳,再上述定位時(shí),則會(huì)定位到指定時(shí)間所在的單元格。既然是鍵值數(shù)據(jù)庫,那么可以用來描述它的方法有很多。有圖展示了由JSON數(shù)據(jù)格式表示的HBase數(shù)據(jù)模型。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.3HBase數(shù)據(jù)模型HBase數(shù)據(jù)模型也可被看作一個(gè)鍵值數(shù)據(jù)庫,通過4個(gè)鍵定位具體的值。這4個(gè)鍵為行鍵、列簇、列限定符和時(shí)間戳(其中,時(shí)間戳也可省略,默認(rèn)取最新數(shù)據(jù))。HBase數(shù)據(jù)模型首先通過行鍵定位一整行數(shù)據(jù),然后通過列簇定位列所在的范圍,最后通過列限定符定位具體的單元格數(shù)據(jù),若給定了時(shí)間戳,再上述定位時(shí),則會(huì)定位到指定時(shí)間所在的單元格。既然是鍵值數(shù)據(jù)庫,那么可以用來描述它的方法有很多。有圖展示了由JSON數(shù)據(jù)格式表示的HBase數(shù)據(jù)模型。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)HBase采用主從架構(gòu),由HMaster節(jié)點(diǎn)、HRegionServer節(jié)點(diǎn)和ZooKeeper集群組成。HMaster節(jié)點(diǎn)作為主節(jié)點(diǎn),HRegionServer節(jié)點(diǎn)作為從節(jié)點(diǎn),這種主從模式類似HDFS的NameNode與DataNode。HBase集群中所有的節(jié)點(diǎn)均通過ZooKeeper進(jìn)行協(xié)調(diào)工作。HBase底層通過HRegionServer節(jié)點(diǎn)將數(shù)據(jù)存儲(chǔ)于HDFS中。為描述方便,下面的HMaster節(jié)點(diǎn)簡(jiǎn)稱HMaster,HRegionServer節(jié)點(diǎn)簡(jiǎn)稱HRegionServer,其他節(jié)點(diǎn)類似。需要說明的是,在分布式架構(gòu)中,節(jié)點(diǎn)也是一臺(tái)服務(wù)器,具體用語結(jié)合上下文理解。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)HBase的系統(tǒng)架構(gòu)如下圖所示,主要包括4部分:HMaster、HRegionServer、Client和ZooKeeper。其中,HRegisonServer又包括HRegion、Store、MemStore、StoreFile、HFile和HLog等組件。各部分之間的關(guān)系為:一個(gè)HRegion由一個(gè)或多個(gè)Store組成;一個(gè)Store由1個(gè)MemStore和0~n個(gè)StoreFile組成,一個(gè)Store保存一個(gè)列簇;StoreFile存儲(chǔ)在HDFS上,MemStore存儲(chǔ)于內(nèi)存中。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)1.HMasterHMaster本身并不存儲(chǔ)任何數(shù)據(jù),主要負(fù)責(zé)維護(hù)表和HRegion的元數(shù)據(jù)信息,由于表的元數(shù)據(jù)信息保存在ZooKeeper上,所以HMaster本身負(fù)載不大。HBase一般有多個(gè)HMaster,用戶可通過ZooKeeper的選舉機(jī)制保持同一時(shí)刻只有一個(gè)HMaster處于活動(dòng)狀態(tài),其他HMaster處于備用狀態(tài),如此可實(shí)現(xiàn)自動(dòng)故障轉(zhuǎn)移。HMaster的主要功能如下。(1)管理用戶對(duì)標(biāo)的進(jìn)行增、刪、改、查等操作。(2)為HRegionServer分配HRegion,負(fù)責(zé)HRegionServer的負(fù)載均衡。(3)發(fā)現(xiàn)離線的HRegionServer,并負(fù)責(zé)為其重新分配HRegion。(4)負(fù)責(zé)HDFS上的垃圾回收。(5)權(quán)限控制。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)2.HRegionServerHRegionServer負(fù)責(zé)管理一系列的HRegion對(duì)象,是HBase的核心組件。一個(gè)HRegisonServer可以包含多個(gè)HRegion和HLog,用戶可以根據(jù)需求添加或刪除HRegisonServer。HRegisonServer的主要功能如下。(1)維護(hù)HMaster分配的HRegion,處理這些HRegion的輸入、輸出請(qǐng)求。(2)負(fù)責(zé)切分在運(yùn)行過程中變得過大的HRegion。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)3.HRegionHRegion是HBase中分布式存儲(chǔ)和負(fù)載均衡的最小單元。一個(gè)HRegion由一個(gè)或多個(gè)Store組成。起初每個(gè)表只有一個(gè)HRegion,隨著表中數(shù)據(jù)不斷增多,HRegion會(huì)不斷增大,當(dāng)達(dá)到一定的閾值(默認(rèn)為256MB)時(shí),HRegion就會(huì)被切分為兩個(gè)大小基本相同的新HRegion。不同的HRegion可以分布在不同的HRegionServer上,但同一個(gè)HRegion拆分后會(huì)分布在相同的HRegionServer上。4.ClientClient通過RPC機(jī)制與HBase的HMaster和HRegisonServer進(jìn)行通信,其中,管理類的通信由HMaster負(fù)責(zé),數(shù)據(jù)讀寫類的通信由HRegisonServer負(fù)責(zé)。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)5.ZooKeeperZooKeeper在HBase中發(fā)揮著重要作用。例如,每個(gè)HRegionServer都會(huì)在ZooKeeper中注冊(cè)一個(gè)自己的臨時(shí)節(jié)點(diǎn),HMaster可通過這些在ZooKeeper中注冊(cè)的臨時(shí)節(jié)點(diǎn)發(fā)現(xiàn)可用的HRegionServer,并跟蹤HRegionServer的故障。總體來講,ZooKeeper的作用體現(xiàn)以下在兩方面。(1)HRegionServer主動(dòng)向ZooKeeper集群注冊(cè),使得HMaster可以隨時(shí)感知各個(gè)HRegisonServer是否在線,從而避免HMaster出現(xiàn)單點(diǎn)故障。(2)HMaster啟動(dòng)時(shí)會(huì)將HBase系統(tǒng)表加載到ZooKeeper集群中,通過ZooKeeper集群可以獲得當(dāng)前系統(tǒng)表hbase:meta存儲(chǔ)的數(shù)據(jù)對(duì)應(yīng)的HRegisonServer信息。其中,系統(tǒng)表指的是命名空間hbase下的表namespace和meta。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)6.StoreStore是HBase的存儲(chǔ)核心。每一個(gè)Region有一個(gè)或多個(gè)Store組成,至少是一個(gè)store,HBase會(huì)把一起訪問的數(shù)據(jù)放在一個(gè)Store里面,即為每個(gè)ColumnFamily建一個(gè)Store(即有幾個(gè)ColumnFamily,也就有幾個(gè)Store)。一個(gè)Store由一個(gè)MemStore和零或多個(gè)StoreFile組成。7.MemStoreMemStore存儲(chǔ)在內(nèi)存中,當(dāng)其大小達(dá)到一定的閾值(默認(rèn)為128MB)時(shí),MemStore中的數(shù)據(jù)會(huì)被刷新寫入磁盤文件,類似生成一個(gè)快照。當(dāng)關(guān)閉HRegionServer時(shí),MemStore中的數(shù)據(jù)會(huì)被強(qiáng)制刷新并寫入磁盤文件。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)8.StoreFileStoreFile是MemStore中的數(shù)據(jù)被寫入磁盤后得到的文件,一般存儲(chǔ)在多個(gè)HDFS中。MemStore內(nèi)存中的數(shù)據(jù)寫到文件后就是StoreFile(即MemStore的每次Flush操作都會(huì)生成一個(gè)新的StoreFile),StoreFile底層以HFile格式保存。9.HFileHFile是一種二進(jìn)制文件,用于存儲(chǔ)HBase中的鍵值對(duì)數(shù)據(jù),StoreFile底層存儲(chǔ)使用的便是HFile。通常一個(gè)HFile會(huì)被分解成多個(gè)塊,因此,對(duì)HFile文件的操作都是以塊為單位的。HFile文件的塊大小可以在列簇級(jí)別中進(jìn)行設(shè)置,推薦設(shè)置為8~1024KB。較大的塊有利于順序讀/寫數(shù)據(jù),但由于需要解壓更多數(shù)據(jù),因此不利于隨機(jī)讀/寫數(shù)據(jù);較小的塊有利于隨機(jī)讀/寫數(shù)據(jù),但需要占用更多的內(nèi)存,寫入效率相對(duì)較低。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.4HBase的系統(tǒng)架構(gòu)10.HLogHLog是HBase的日志文件,記錄數(shù)據(jù)的更新操作。與RDBMS類似,為了保證數(shù)據(jù)的一致性和實(shí)現(xiàn)回滾等,HBase在寫入數(shù)據(jù)時(shí)會(huì)先進(jìn)行WAL(預(yù)寫日志)操作,即只有在將更新操作寫入HLog文件后才會(huì)將數(shù)據(jù)寫入Store的MemStore中,只有這兩個(gè)地方都寫入并確認(rèn)后,才認(rèn)為數(shù)據(jù)寫入成功。由于MemStore將數(shù)據(jù)存在內(nèi)存中,且數(shù)據(jù)大小沒有達(dá)到一定閾值時(shí)不會(huì)被寫入HDFS,因此,若在數(shù)據(jù)被寫入HDFS之前服務(wù)器崩潰,則MemStore中的數(shù)據(jù)將丟失,此時(shí)可以利用HLog來恢復(fù)丟失的數(shù)據(jù)。HLog日志文件存儲(chǔ)于HDFS中,因此,若服務(wù)器崩潰,則HLog仍然可用。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.5HBase的安裝部署大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.5HBase的安裝部署1.上傳HBase安裝包與之前的方法類似,直接將下載好的HBase文件hbase-2.5.2-bin.tar.gz利用MobaXTerm的拖曳功能上傳至IP地址為00那臺(tái)虛擬機(jī)的/export/software目錄內(nèi)(虛擬機(jī)IP地址信息參見第3章),如下圖所示。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.5HBase的安裝部署2.解壓剛上傳的hbase-2.5.2-bin.tar.gz安裝包通常沒有執(zhí)行權(quán)限,先使用chmod命令添加執(zhí)行權(quán)限:然后利用tar命令將HBase解壓至/export/servers目錄下:完成后便可在/export/servers目錄下看到剛剛解壓的hbase-2.5.2目錄,如下圖所示。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)[root@mastersoftware]#chmod777hbase-2.5.2-bin.tar.gz[root@mastersoftware]#tar-zxvf./hbase-2.5.2-bin.tar.gz-C/export/servers/8.5HBase的安裝部署3.配置環(huán)境變量打開.bashrc文件,在其末尾添加如下內(nèi)容:保存后使用source命令使環(huán)境變量生效:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)#>>>HBase>>>exportHBASE_HOME=/export/servers/hbase-2.5.2exportPATH=$PATH:$HBASE_HOME/bin#<<<HBase<<<[root@mastersoftware]#source~/.bashrc8.5HBase的安裝部署4.修改hbase-env.sh文件修改/export/servers/hbase-2.5.2/conf目錄下的hbase-env.sh文件,找到JAVA_HOME并將其修改為第3章安裝的JDK的位置:繼續(xù)在該文件中查找HBASE_MANAGES_ZK,并將其值修改為false:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)exportJAVA_HOME=/export/servers/jdk1.8.0_202#TellHBasewhetheritshouldmanageit'sowninstanceofZooKeeperornot.exportHBASE_MANAGES_ZK=false8.5HBase的安裝部署5.修改hbase-site.xml文件修改/export/servers/hbase-2.5.2/conf目錄下的hbase-site.xml文件,將<configuration>和</configuration>之間的內(nèi)容修改如右側(cè)所示:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)<configuration>

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>perty.dataDir</name>

#安裝ZooKeeper時(shí)設(shè)置的數(shù)據(jù)目錄,根據(jù)實(shí)際情況修改

<value>/export/servers/apache-zookeeper-3.8.0-bin/zkdata</value>

</property>

<property>

#指定HBase連接的ZooKeeper集群

<name>hbase.zookeeper.quorum</name>

<value>master,slave01,slave02</value>

</property>

<property>

<name>vider</name>

<value>filesystem</value>

</property>

<property>

<name>hbase.tmp.dir</name>

<value>./tmp</value>

</property>

<property>

<name>hbase.unsafe.stream.capability.enforce</name>

<value>false</value>

</property></configuration>8.5HBase的安裝部署6.修改regionservers文件修改/export/servers/hbase-2.5.2/conf目錄下的regionservers文件,將文件內(nèi)容替換如下:7.設(shè)置備份節(jié)點(diǎn)在/export/servers/hbase-2.5.2/conf目錄下新建文件backup_masters:該文件用于備份master節(jié)點(diǎn),當(dāng)master節(jié)點(diǎn)宕機(jī)時(shí),啟用備用節(jié)點(diǎn),將slave01作為備用節(jié)點(diǎn)。backup_masters文件的內(nèi)容如下:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)masterslave01slave02[root@masterconf]#vibackup_mastersslave018.5HBase的安裝部署8.復(fù)制Hadoop配置文件將Hadoop的配置文件core-site.xml和hdfs-site.xml復(fù)制到/export/servers/hbase-2.5.2/conf目錄下:9.將配置分發(fā)至其他節(jié)點(diǎn)將master節(jié)點(diǎn)的/export/servers/hbase-2.5.2目錄復(fù)制到slave01和slave02節(jié)點(diǎn)上:將master節(jié)點(diǎn)的.bashrc文件復(fù)制到slave01和slave02節(jié)點(diǎn)上,并利用source命令使其生效。在slave01、slave02節(jié)點(diǎn)上使~/.bashrc生效:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)[root@masterconf]#/export/servers/hadoop-3.3.4/etc/hadoop/core-site.xml/export/servers/hbase-2.5.2/conf/[root@masterconf]#/export/servers/hadoop-3.3.4/etc/hadoop/hdfs-site.xml/export/servers/hbase-2.5.2/conf/[root@masterhbase-2.5.2]#scp-r/export/servers/hbase-2.5.2/slave01:/export/servers/hbase-2.5.2[root@masterhbase-2.5.2]#scp-r/export/servers/hbase-2.5.2/slave02:/export/servers/hbase-2.5.2[root@masterhbase-2.5.2]#scp~/.bashrcslave01:~/.bashrc[root@masterhbase-2.5.2]#scp~/.bashrcslave02:~/.bashrcsource~/.bashrc8.5HBase的安裝部署10.啟動(dòng)要啟動(dòng)HBase,需要先啟動(dòng)ZooKeeper和Hadoop集群。注意:ZooKeeper集群需要在3個(gè)節(jié)點(diǎn)上分別啟動(dòng)。啟動(dòng)成功后,可利用jps命令查看相關(guān)進(jìn)程,若出現(xiàn)下列進(jìn)程,則表明啟動(dòng)成功:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)[root@master~]#zkServer.shstart[root@master~]#start-dfs.sh[root@master~]#start-yarn.sh[root@master~]#start-hbase.sh[root@master~]#jps3424HRegionServer1554QuorumPeerMain2194SecondaryNameNode2466ResourceManager3846Jps2745NodeManager1979DataNode3195HMaster1790NameNode[root@slave01~]#jps1664DataNode1560QuorumPeerMain2296Jps1802NodeManager1978HRegionServer[root@slave02~]#jps1664DataNode1846NodeManager2007HRegionServer2379Jps1567QuorumPeerMain8.5HBase的安裝部署11.關(guān)閉使用stop-hbase.sh命令關(guān)閉HBase:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)[root@master~]#stop-hbase.sh8.6HBase的Shell操作大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.6HBase的Shell操作HBase為用戶提供了一種非常方便的命令行操作方式,稱為HBaseShell。HBaseShell提供了大多數(shù)的HBase命令,用戶可以方便地創(chuàng)建、刪除、修改表,還可以向表中添加數(shù)據(jù)、列出表中的相關(guān)信息等。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.6HBase的Shell操作8.6.1基本命令1.啟動(dòng)在啟動(dòng)HBase之后,可以通過執(zhí)行以下命令啟動(dòng)HBaseShell:?jiǎn)?dòng)成功后顯示如下內(nèi)容:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)[root@master~]#hbaseshellUse"help"togetlistofsupportedcommands.Use"exit"toquitthisinteractiveshell.ForReference,pleasevisit:/2.0/book.html#shellVersion2.5.2,r3e28acf0b819f4b4a1ada2b98d59e05b0ef94f96,ThuNov2402:06:40UTC2022Took0.0010secondshbase:001:0>從結(jié)果中可以看出,用戶可輸入help命令查看幫助信息,輸入exit退出Shell命令行。最下方的hbase:001:0>是命令提示符,其中的001用來提示用戶輸入的行數(shù),該數(shù)字會(huì)隨著用戶的輸入遞增,為了便于描述,下面統(tǒng)一使用hbase:000>。8.6HBase的Shell操作2.查看狀態(tài)3.查看HBase版本大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>status1activemaster,1backupmasters,3servers,0dead,1.0000averageload可以看出,當(dāng)前有1個(gè)活躍的主節(jié)點(diǎn)、1個(gè)備份節(jié)點(diǎn)和3個(gè)服務(wù)節(jié)點(diǎn)。hbase:000:0>version2.5.2,r3e28acf0b819f4b4a1ada2b98d59e05b0ef94f96,ThuNov2402:06:40UTC2022Took0.0002seconds可以看出,當(dāng)前HBase版本為2.5.2。8.6HBase的Shell操作8.6.2命名空間操作1.命名空間2.查看命名空間大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>create_namespace'my_namespace'上述命令創(chuàng)建了一個(gè)名為my_namespace的命名空間。hbase:000:0>list_namespaceNAMESPACEdefaulthbasemy_namespace3row(s)Took0.0087seconds命令list_namespace會(huì)列出當(dāng)前所有的命名空間,由返回結(jié)果可知,HBase默認(rèn)定義了NAMESPACE和default兩個(gè)命名空間。8.6HBase的Shell操作8.6.2命名空間操作3.查看命名空間下的表大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>list_namespace_tables'hbase'TABLEmetanamespace2row(s)Took0.0083seconds=>["meta","namespace"]可以看出,命名空間NAMESPACE包括meta和namespace兩個(gè)系統(tǒng)表,命名空間default保存用戶創(chuàng)建表時(shí)未指定命名空間的表。8.6HBase的Shell操作8.6.2命名空間操作4.刪除命名空間大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>drop_namespace'my_namespace'Took0.1280secondshbase:000:0>list_namespaceNAMESPACEdefaulthbase2row(s)Took0.0086seconds可以看出,利用drop_namespace命令刪除my_namespace命名空間后,當(dāng)再次查看命名空間時(shí),發(fā)現(xiàn)所創(chuàng)建的my_namespace命名空間已被刪除,只剩下HBase默認(rèn)的兩個(gè)命名空間。8.6HBase的Shell操作8.6.3常用DDL操作與RDMBS中的DDL(DataDefinitionLanguage,數(shù)據(jù)定義語言)操作類似,HBase的DDL操作也常用于表相關(guān)的操作,如創(chuàng)建表、刪除表、啟用和禁用表等。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.6HBase的Shell操作8.6.3常用DDL操作1.創(chuàng)建表創(chuàng)建表時(shí)需要指定表名和列簇,通用語法如下:若未指定命名空間名,則會(huì)在系統(tǒng)默認(rèn)的命名空間default下創(chuàng)建表。以下命令先創(chuàng)建了命名空間myNS1,然后在其中創(chuàng)建了表tab1,同時(shí)添加了3個(gè)列簇(fam1、fam2、fam3):大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)create'namespace名:表名','列簇名1','列簇名2'…h(huán)base:000:0>create_namespace'myNS1'Took0.1334secondshbase:000:0>create'myNS1:tab1','fam1','fam2','fam3'2023-03-1217:29:47,382INFO[main]client.HBaseAdmin(HBaseAdmin.java:postOperationResult(3591))-Operation:CREATE,TableName:myNS1:tab1,procId:75completedCreatedtablemyNS1:tab1Took0.6502seconds=>Hbase::Table-myNS1:tab18.6HBase的Shell操作8.6.3常用DDL操作2.查看表利用list命令列出用戶創(chuàng)建的所有表:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>listTABLEmyNS1:tab11row(s)Took0.0102seconds=>["myNS1:tab1"]8.6HBase的Shell操作8.6.3常用DDL操作3.判斷某表是否存在利用exists命令查看某表是否存在:可以看到,當(dāng)直接使用exists'tab1'

命令時(shí),返回false,這是因?yàn)榇藭r(shí)并沒有在default命名空間中創(chuàng)建表,而是在myNS1命名空間中創(chuàng)建了表tab1,因此,當(dāng)指定命名空間后,返回true。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>exists'tab1'Tabletab1doesnotexistTook0.0040seconds=>falsehbase:000:0>exists'myNS1:tab1'TablemyNS1:tab1doesexistTook0.0046seconds=>true8.6HBase的Shell操作8.6.3常用DDL操作4.查看表的相關(guān)信息利用desc命令可查看表的相關(guān)信息,如右側(cè)所示,字段含義見下表。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>desc'myNS1:tab1'TablemyNS1:tab1isENABLEDmyNS1:tab1,{TABLE_ATTRIBUTES=>{METADATA=>{'hbase.store.file-tracker.impl'=>'DEFAULT'}}}COLUMNFAMILIESDESCRIPTION{NAME=>'fam1',INDEX_BLOCK_ENCODING=>'NONE',VERSIONS=>'1',KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL=>'FOREVER',MIN_VERSIONS=>'0',REPLICATION_SCOPE=>'0',BLOOMFILTER=>'ROW',IN_MEMORY=>'false',COMPRESSION=>'NONE',BLOCKCACHE=>'true',BLOCKSIZE=>'65536B(64KB)'}{NAME=>'fam2',INDEX_BLOCK_ENCODING=>'NONE',VERSIONS=>'1',KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL=>'FOREVER',MIN_VERSIONS=>'0',REPLICATION_SCOPE=>'0',BLOOMFILTER=>'ROW',IN_MEMORY=>'false',COMPRESSION=>'NONE',BLOCKCACHE=>'true',BLOCKSIZE=>'65536B(64KB)'}{NAME=>'fam3',INDEX_BLOCK_ENCODING=>'NONE',VERSIONS=>'1',KEEP_DELETED_CELLS=>'FALSE',DATA_BLOCK_ENCODING=>'NONE',TTL=>'FOREVER',MIN_VERSIONS=>'0',REPLICATION_SCOPE=>'0',BLOOMFILTER=>'ROW',IN_MEMORY=>'false',COMPRESSION=>'NONE',BLOCKCACHE=>'true',BLOCKSIZE=>'65536B(64KB)'}3row(s)QuotaisdisabledTook0.0379seconds名稱說明NAME列簇名INDEX_BLOCK_ENCODING索引塊編碼算法,NONE表示未使用VERSIONS保存的版本數(shù),這里為1KEEP_DELETED_CELLS保留被刪除的單元格DATA_BLOCK_ENCODING數(shù)據(jù)塊編碼,NONE表示不使用數(shù)據(jù)塊編碼TTL生存時(shí)間,到期時(shí)刪除行MIN_VERSIONS最小版本,為0表示功能禁用REPLICATION_SCOPE是否復(fù)制簇,0表示禁用,1表示開啟BLOOMFILTER布隆過濾器類型IN_MEMORY是否常駐緩存COMPRESSION這里壓縮算法為NONE,表示不使用壓縮BLOCKCACHE數(shù)據(jù)塊緩存BLOCKSIZE數(shù)據(jù)塊大小8.6HBase的Shell操作8.6.3常用DDL操作5.啟用/禁用表剛建立的新表處于啟用狀態(tài),可利用is_enabled命令進(jìn)行查看:若要?jiǎng)h除表,則需要使用disable命令將表禁用:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>is_enabled'myNS1:tab1'trueTook0.0068seconds=>truehbase:000:0>disable'myNS1:tab1'2023-03-1217:40:26,017INFO[main]client.HBaseAdmin(HBaseAdmin.java:rpcCall(926))-StarteddisableofmyNS1:tab12023-03-1217:40:26,344INFO[main]client.HBaseAdmin(HBaseAdmin.java:postOperationResult(3591))-Operation:DISABLE,TableName:myNS1:tab1,procId:81completedTook0.3395seconds8.6HBase的Shell操作8.6.3常用DDL操作6.向表中添加列簇向表中添加列簇的命令如下:7.刪除表利用drop命令刪除禁用狀態(tài)下的表(啟用狀態(tài)下的表無法刪除):大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>alter'myNS1:tab1','fam4'Updatingallregionswiththenewschema...Allregionsupdated.Done.Took1.0918seconds再次使用desc命令查看表中的列簇,會(huì)發(fā)現(xiàn)表中已新增列簇fam4hbase:000:0>drop'myNS1:tab1'8.6HBase的Shell操作8.6.4常用DML操作DML(DataManipulationLanguage,數(shù)據(jù)操作語言)常用于處理數(shù)據(jù)相關(guān)的操作,如數(shù)據(jù)的添加、刪除、修改、查詢等。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.6HBase的Shell操作8.6.4常用DML操作1.向表中增加或更新數(shù)據(jù)向表中增加或更新數(shù)據(jù)的語法如下:以下命令表示先在default命名空間中創(chuàng)建info表,然后依次向其中添加數(shù)據(jù):大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)put'表明','Rowkey名','列簇名:列名','值'hbase:000:0>create'info','f1','f2','f3'hbase:000:0>put'info','row1','f1:id','001'hbase:000:0>put'info','row1','f1:name','ZhangSan'hbase:000:0>put'info','row1','f1:age','19'hbase:000:0>put'info','row1','f2:id','002'hbase:000:0>put'info','row1','f2:name','LiSi'hbase:000:0>put'info','row1','f2:age','20'hbase:000:0>put'info','row2','f1:city','Beijing'hbase:000:0>put'info','row2','f1:country','China'8.6HBase的Shell操作8.6.4常用DML操作2.查看表查看表的基本語法如下:可以只使用表名來查看指定表的所有信息:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)scan'表名',{COLUMNS=>['列簇名:列名',…],LIMIT=>行數(shù)}hbase:000:0>scan'info'ROWCOLUMN+CELLrow1column=f1:age,timestamp=2023-03-12T17:52:26.483,value=19row1column=f1:id,timestamp=2023-03-12T17:52:03.920,value=001row1column=f1:name,timestamp=2023-03-12T17:52:17.133,value=ZhangSanrow1column=f2:age,timestamp=2023-03-12T17:53:17.459,value=20row1column=f2:id,timestamp=2023-03-12T17:53:00.155,value=002row1column=f2:name,timestamp=2023-03-12T17:53:09.710,value=LiSirow2column=f1:city,timestamp=2023-03-12T17:53:58.478,value=Beijingrow2column=f1:country,timestamp=2023-03-12T17:54:31.626,value=China2row(s)Took0.0088seconds8.6HBase的Shell操作8.6.4常用DML操作3.獲取表中指定行鍵下的數(shù)據(jù)(1)獲取指定表的指定行鍵下的所有數(shù)據(jù)的語法如下:(2)獲取指定表的指定行鍵下的指定列簇的所有數(shù)據(jù)的語法如下:(3)獲取指定表的指定行鍵的指定列的數(shù)據(jù)的語法如下:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)get'表名','Rowkey'get'表名','Rowkey','列簇名'get'表名','Rowkey','列簇名:列名'8.6HBase的Shell操作8.6.4常用DML操作4.統(tǒng)計(jì)表的行數(shù)直接使用count命令統(tǒng)計(jì)指定表的總行數(shù):大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)hbase:000:0>count'info'2row(s)Took0.0110seconds=>28.6HBase的Shell操作8.6.4常用DML操作5.刪除數(shù)據(jù)(1)刪除一個(gè)單元格的數(shù)據(jù)的語法如下:(2)刪除指定列的所有數(shù)據(jù)的語法如下:(3)刪除指定行的所有數(shù)據(jù)的語法如下:(4)刪除表中的所有數(shù)據(jù):大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)delete'表名','Rowkey','列簇名:列名',時(shí)間戳delete'表名','Rowkey','列簇名:列名'deleteall'表名','Rowkey'truncate'表名'8.7HBase的JavaAPI介紹大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)8.7HBase的JavaAPI介紹8.7.1環(huán)境配置使用Maven構(gòu)建Java項(xiàng)目,利用IntelliJIDEA集成開發(fā)環(huán)境新建項(xiàng)目(具體方法參見第4章),新建完成后,在pom.xml文件中添加如下依賴:大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)<dependencies>

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-client</artifactId>

<version>2.5.2</version>

</dependency>

<dependency>

<groupId>org.apache.hbase</groupId>

<artifactId>hbase-server</artifactId>

<version>2.5.2</version>

</dependency>

<dependency>

<groupId>junit</groupId>

<artifactId>junit</artifactId>

<version>4.12</version>

</dependency>

</dependencies>8.7HBase的JavaAPI介紹8.7.2JavaAPI操作1.命名空間相關(guān)操作以右側(cè)碼利用JavaAPI實(shí)現(xiàn)命名空間的創(chuàng)建及查看。運(yùn)行后輸出如下圖所示。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)publicclassHBaseTest{

@Test

publicvoidtestCreateNamespace()throwsIOException{

//獲取HBase配置

Configurationconf=HBaseConfiguration.create();

conf.set("fs.defaultFS","hdfs://00:8020");

conf.set("hbase.zookeeper.quorum","master,slave01,slave02");

//創(chuàng)建連接

Connectionconn=ConnectionFactory.createConnection(conf);

//獲取管理員權(quán)限

Adminadmin=conn.getAdmin();

//創(chuàng)建NamespaceDescriptor實(shí)例并設(shè)置其名稱為myNS2

NamespaceDescriptornsDesc=NamespaceDescriptor.create("myNS2").build();

//創(chuàng)建命名空間

admin.createNamespace(nsDesc);

//查看所有命名空間

NamespaceDescriptor[]nsDescs=admin.listNamespaceDescriptors();

for(NamespaceDescriptornds:nsDescs){

System.out.println(nds);

}

admin.close();

}}8.7HBase的JavaAPI介紹8.7.2JavaAPI操作2.表的相關(guān)操作右側(cè)代碼利用JavaAPI實(shí)現(xiàn)了表的創(chuàng)建、刪除等操作,運(yùn)行結(jié)果如下圖所示。大數(shù)據(jù)理論與應(yīng)用基礎(chǔ)@Test

publicvoidtestTable()throwsException{

//獲取HBase配置

Configurationconf=HBaseConfiguration.create();

conf.set("fs.defaultFS","hdfs://:8020");

conf.set("hbase.zookeeper.quorum","master,slave01,slave02");

//創(chuàng)建連接

Connectionconn=ConnectionFactory.createConnection(conf);

//獲取管理員權(quán)限

Adminadmin=conn.getAdmin();

//設(shè)置表名

TableNametableName=TableName.valueOf("myNS2:tab1");

//判斷表是否存在,如果存在,就刪除

if(admin.tableExists(tableName)){

//刪除表之前需要禁用表

if(admin.isTableEnabled(tableName))

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論