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

下載本文檔

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

文檔簡介

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase1HBase概述容量大:HBase對于單表存儲百億或更多的數(shù)據(jù)都沒有性能問題。HBase主要技術(shù)特點無固定模式(表結(jié)構(gòu)不固定):可以根據(jù)需要動態(tài)的增加列,同一張表中不同的行可以有不同的列。列式存儲:存儲表時是按照列存儲的,可以單獨對列進行各種操作。稀疏性:空列并不占用存儲空間,表可以非常稀疏。數(shù)據(jù)類型單一:HBase中的數(shù)據(jù)都是字符串。1HBase概述1.數(shù)據(jù)類型方面關(guān)系數(shù)據(jù)庫具有豐富的數(shù)據(jù)類型,如字符串型、數(shù)值型、日期型、二進制型等。HBase只有字符串?dāng)?shù)據(jù)類型,即HBase把數(shù)據(jù)存儲為未經(jīng)解釋的字符串,數(shù)據(jù)的實際類型都是交由用戶自己編寫程序?qū)ψ址M行解析的。HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫的區(qū)別2.數(shù)據(jù)操作方面關(guān)系數(shù)據(jù)庫包含了豐富的操作,如插入、刪除、更新、查詢等,其中還涉及各式各樣的函數(shù)和連接操作。HBase只有很簡單的插入、查詢、刪除、清空等操作,表和表之間是分離的,沒有復(fù)雜的表和表之間的關(guān)系。1HBase概述3.存儲模式方面關(guān)系數(shù)據(jù)庫是基于行存儲的,在關(guān)系數(shù)據(jù)庫中讀取數(shù)據(jù)時,需要順序掃描每個元組,然后從中篩選出所需要查詢的屬性。HBase是基于列存儲的,HBase將列劃分為若干個列族,每個列族都由幾個文件保存,不同列族的文件時分離的,它的優(yōu)點是:可以降低I/O開銷,支持大量并發(fā)用戶查詢,僅需要處理所要查詢的列,不需要處理與查詢無關(guān)的大量數(shù)據(jù)列。HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫的區(qū)別4.數(shù)據(jù)維護方面在關(guān)系數(shù)據(jù)庫中,更新操作會用最新的當(dāng)前值去替換元組中原來的舊值。而HBase執(zhí)行的更新操作不會刪除數(shù)據(jù)舊的版本,而是添加一個新的版本,舊的版本仍然保留。1HBase概述5.可伸縮性方面HBase分布式數(shù)據(jù)庫就是為了實現(xiàn)靈活的水平擴展而開發(fā)的,所以它能夠輕松增加或減少硬件的數(shù)量來實現(xiàn)性能的伸縮。而傳統(tǒng)數(shù)據(jù)庫通常需要增加中間層才能實現(xiàn)類似的功能,很難實現(xiàn)橫向擴展,縱向擴展的空間也比較有限。HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫的區(qū)別1HBase概述HBase使用HDFS實現(xiàn)底層存儲,利用廉價集群提供海量數(shù)據(jù)存儲能力。HBase使用MapReduce來處理HBase中的海量數(shù)據(jù),實現(xiàn)高性能計算。HBase用ZooKeeper來提供協(xié)同服務(wù),提供高可靠的鎖服務(wù)。HBase與Hadoop中其他組件的關(guān)系

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase采用Master/Slave架構(gòu),由HMaster服務(wù)器、HRegionServer服務(wù)器和ZooKeeper協(xié)同服務(wù)器構(gòu)成。在底層,HBase將數(shù)據(jù)存儲于HDFS中。HBase系統(tǒng)架構(gòu)如圖所示。HBase系統(tǒng)架構(gòu)1.客戶端客戶端包含訪問HBase的接口,同時在緩存中維護著已經(jīng)訪問過的HRegion位置信息,用來加快后續(xù)數(shù)據(jù)訪問過程。HBase客戶端使用RPC(RemoteProcedureCall,遠程過程調(diào)用)機制與HMaster和HRegionServer進行通信。對于管理類操作,客戶端與HMaster進行RPC;對于數(shù)據(jù)讀寫類操作,客戶端則會與HRegionServer進行RPC。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase系統(tǒng)架構(gòu)2.Zookeeper服務(wù)器Zookeeper服務(wù)器用來為HBase集群提供穩(wěn)定可靠的協(xié)同服務(wù),Zookeeper存儲了-ROOT-表的地址和HMaster的地址,客戶端通過-ROOT-表可找到自己所需的數(shù)據(jù)。HRegion是HBase數(shù)據(jù)管理的基本單位,HRegion類似關(guān)系型數(shù)據(jù)表的分區(qū)。HRegion中存儲了用戶的真實數(shù)據(jù),而為了管理這些數(shù)據(jù),HBase使用了HRegionSever來管理HRegion。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase系統(tǒng)架構(gòu)3.HMaster服務(wù)器每臺HRegionServer都會和HMaster服務(wù)器通信,HMaster服務(wù)器的主要任務(wù)就是告訴每個HRegionServer它主要維護哪些HRegion。HMaster用于協(xié)調(diào)多個HRegionServer,偵測各個HRegionServer的狀態(tài),負責(zé)分配HRegion給HRegionServer,平衡HRegionServer之間的負載。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase系統(tǒng)架構(gòu)4.HRegionServerHRegionServer維護HMaster分配給它的HRegion,處理用戶對這些HRegion的I/O請求,HRegionServer還負責(zé)切分在運行過程中變得過大的HRegion。HRegionServer內(nèi)部管理了一系列HRegion對象,每個HRegion對應(yīng)了表(Table)中的一個Region。HBase表根據(jù)RowKey的范圍被水平拆分成若干個HRegion。每個HRegion都包含了這個HRegion的startkey和endkey之間的所有行(row)。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase數(shù)據(jù)訪問流程HBase使用“表名+開始主鍵+分區(qū)Id”(tablename+startkey+regionId)來標(biāo)識每個HRegion的,每個HRegion都有一個regionId來標(biāo)識他的唯一性,每個HRegion對應(yīng)了Table中的一個分區(qū)。人們用“表名+開始主鍵+分區(qū)Id”這個識別符來區(qū)分不同的HRegion,這些識別符數(shù)據(jù)就是元數(shù)據(jù)(META),而元數(shù)據(jù)本身也是被用一個HBase表保存在HRegion里面的,稱這個表為元數(shù)據(jù)表(.META.表),里面保存的就是HRegion標(biāo)識符和實際HRegion服務(wù)器的映射關(guān)系。元數(shù)據(jù)表也會增長,并且可能被分割為幾個HRegion,為了定位這些HRegion,采用一個根數(shù)據(jù)表(-ROOT-表)來保存所有元數(shù)據(jù)表的位置,而根數(shù)據(jù)表是不能被分割的,永遠只保存在一個HRegion里。在Client端訪問具體的業(yè)務(wù)表的HRegion時需要先通過-ROOT-表找到.META.表,再通過.META.表找到HRegion的位置,即這兩個表主要解決了HRegion的快速路由問題。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase數(shù)據(jù)訪問流程1.-ROOT-表-ROOT-表是一張存儲.META.表的表,記錄了.META.表的HRegion信息。-ROOT-表結(jié)構(gòu)如表所示RowKey由三部分組成:.META.表表名,startRowKey,創(chuàng)建時間TimeStamp。RowKey存儲的內(nèi)容我們又稱之為.META.表的HRegion的Name。info里面包含:regioninfo,server,serverstartcode。其中regioninfo就是HRegion的詳細信息,包括StartRowKey,EndRowKey信息等。server存儲的就是管理這個HRegion的HRegionServer的地址。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase數(shù)據(jù)訪問流程.META.表結(jié)構(gòu)如表所示。上述.META.表中只有兩張用戶表:Table1和Table2,Table1非常大,被劃分成了很多HRegion,因此在.META.表中有很多行Row用來記錄這些HRegion。而Table2很小,只是被劃分成了兩個HRegion,因此在.META.中只有兩行Row來記錄。2HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程HBase數(shù)據(jù)訪問流程下面用一個例子來給出訪問具體數(shù)據(jù)的過程,先構(gòu)建了-ROOT-表和.META.表。假設(shè)HBase中只有兩張用戶表:Table1和Table2,Table1非常大,被劃分成了很多HRegion,因此在.META.表中有很多行Row用來記錄這些HRegion。而Table2很小,只是被劃分成了兩個HRegion,因此在.META.中只有兩行Row來記錄。假設(shè)要從Table2里面查詢一條RowKey是RK10000的數(shù)據(jù),那么應(yīng)該遵循以下步驟:①從.META.表里面查詢哪個HRegion包含這條數(shù)據(jù)。②獲取管理這個HRegion的HRegionServer地址。③連接這個HRegionServer,查到這條數(shù)據(jù)。

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase3HBase數(shù)據(jù)表HBase以表的形式存儲數(shù)據(jù),表由行和列組成,列可組合為若干個列族(ColumnFamily)。下表是一個班級學(xué)生HBase數(shù)據(jù)表的邏輯視圖HBase數(shù)據(jù)表邏輯視圖3HBase數(shù)據(jù)表1.行鍵(RowKey)任何字符串都可以作為行鍵,HBase表中的數(shù)據(jù)按照行鍵的字典序排序存儲。如果行鍵是網(wǎng)站域名,如、、,應(yīng)該將網(wǎng)站域名進行反轉(zhuǎn)(org.apache.www,org.apache.mail,org.apache.jira)再存儲。這樣的話,所有apache域名將會存儲在一起。HBase數(shù)據(jù)表邏輯視圖2.列族(ColumnFamily)和列名(ColumnName)HBase表中的每個列都歸屬于某個列族,列族必須作為表模式(Schema)定義的一部分預(yù)先定義。在每個列族中,可以存放很多的列,而每行每列族中列的數(shù)量可以不相同。3.單元格(Cell)在HBase表中,通過行鍵、列族和列名確定一個“單元格”(Cell)。每個單元格中可以保存一個字段數(shù)據(jù)的多個版本,每個版本對應(yīng)一個不同的時間戳。3HBase數(shù)據(jù)表4.時間戳(TimeStamp)在HBase,每個單元格Cell往往保存著同一份數(shù)據(jù)的多個版本,根據(jù)唯一的時間戳來區(qū)分不同版本,不同版本的數(shù)據(jù)按照時間倒序排序,最新的數(shù)據(jù)版本排在最前面。這樣在讀取時,將先讀取到最新的數(shù)據(jù)。為了避免數(shù)據(jù)存在過多版本造成的存儲和管理負擔(dān),HBase提供了兩種數(shù)據(jù)版本回收方式:(1)保存數(shù)據(jù)的最后n個版本。當(dāng)版本數(shù)過多時,HBase會將過老的版本清除掉。(2)保存最近一段時間內(nèi)的版本(比如最近7天)。5.區(qū)域(HRegion)HBase自動把表水平(按RowKey)分成若干個區(qū)域(HRegion),每個HRegion會保存表里一段連續(xù)的數(shù)據(jù)。剛開始表里只有一個HRegion,隨著數(shù)據(jù)的不斷插入,HRegion不斷增大,當(dāng)達到某個閾值時,HRegion自動等分成兩個新的HRegion。HBase數(shù)據(jù)表邏輯視圖3HBase數(shù)據(jù)表在HBase表的邏輯視圖層面,HBase中的每個表是由許多行組成的,但在物理存儲層面,它是采用基于列的存儲方式??珊唵握J為每個ColumnFamily對應(yīng)一張存儲表,表格的RowKey、ColumnFamily、ColumnName、TimeStamp唯一確定一條記錄。HBase數(shù)據(jù)表物理視圖HBase把同一列族里面的數(shù)據(jù)存儲在同一目錄下,由幾個文件保存。存儲時,數(shù)據(jù)按照RowKey的字典序排序存儲。設(shè)計RowKey時,要充分利用排序存儲這個特性,將經(jīng)常一起讀取的行存儲放到一起。在實際的HDFS存儲中,直接存儲每個字段數(shù)據(jù)所對應(yīng)的完整的鍵值對:{RowKey,ColumnFamily,ColumnName,Timestamp}→value因此,二維表中字段值的空值,對HBase來說在物理實現(xiàn)上是不存在的,而不是所謂的值為null。3HBase數(shù)據(jù)表在HBase中,HRegionServer對應(yīng)于集群中的一個節(jié)點,而一個HRegionServer負責(zé)管理一系列HRegion對象。HBase根據(jù)RowKey將一張表劃分成若干個HRegion(分區(qū))。HBase數(shù)據(jù)表面向列的存儲HBase在管理HRegion的時候會給每個HRegion定義一個RowKey的范圍,落在特定范圍內(nèi)的數(shù)據(jù)將交給特定的HRegion,HRegion由多個HStore組成,每個HStore對應(yīng)了Table中的一個列族的存儲。由HBase面向列的存儲原理可知,查詢的時候要盡量減少不需要的列,而經(jīng)常一起查詢的列要組織到一個列族里:因為要需要查詢的列族越多,意味著要掃描越多的HStore文件,這就需要越多的時間。屬于同一個列族的數(shù)據(jù)保存在一起(一個HStore中)3HBase數(shù)據(jù)表HBase數(shù)據(jù)表面向列的存儲班級學(xué)生HBase數(shù)據(jù)表的StudentBasicInfo列族存儲班級學(xué)生HBase數(shù)據(jù)表的StudentGradeInfo列族存儲3HBase數(shù)據(jù)表HBase通過行鍵、列族、列名、時間戳的四元組確定一個存儲單元格(Cell)。由{RowKey,ColumnFamily,ColumnName,TimeStamp}可以唯一確定一個存儲值,即一個鍵值對:{RowKey,ColumnFamily,ColumnName,TimeStamp}→valueHBase數(shù)據(jù)表的查詢方式HBase支持以下幾種查詢方式:通過單個行鍵訪問;通過行鍵的范圍來訪問;全表掃描。在上述3種查詢中,第1種和第2種(在范圍不是很大時)都是非常高效的,可以在毫秒級完成。如果一個查詢無法利用行鍵來定位(例如要基于某列查詢滿足條件的所有行),這就需要全表掃描來實現(xiàn)。因此,在針對某個應(yīng)用設(shè)計HBase表結(jié)構(gòu)時,要注意合理設(shè)計行鍵使得最常用的查詢可以較為高效地完成。3HBase數(shù)據(jù)表在設(shè)計HBase表時需要考慮的因素:HBase表結(jié)構(gòu)設(shè)計(1)列族。這個表應(yīng)該有多少個列族,列族使用什么數(shù)據(jù),每個列族應(yīng)該有多少列。列族名字的長度影響到發(fā)送到客戶端的數(shù)據(jù)長度,所以盡量簡潔。(2)列。列名的長度影響數(shù)據(jù)存儲的足跡。也影響硬盤和網(wǎng)絡(luò)I/O的花銷,所以應(yīng)該盡量簡潔。(3)行鍵。行鍵在表設(shè)計中非常重要,決定著應(yīng)用中的交互以及提取數(shù)據(jù)的性能。行鍵的哈希可以使得行鍵有固定的長度和更好的分布。但是卻丟棄了使用字符串時的默認排序功能。(4)單元格(Cell)。單元格應(yīng)該存放什么數(shù)據(jù),每個單元格存儲多少個時間版本。(5)表的深度和廣度。深度高的表結(jié)構(gòu),可以使得你快速且簡單的訪問數(shù)據(jù),但是卻丟掉了原子性。寬度廣的表結(jié)構(gòu),可以保證行級別的原子操作,但每行會有很多的列。

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase4HBase安裝下載安裝文件從官網(wǎng)/hbase/stable/上下載HBase安裝文件hbase-2.3.5-bin.tar.gz,將其下載到/home/下載/目錄下。下載完安裝文件以后,需要對文件進行解壓。按照Linux系統(tǒng)使用的默認規(guī)范,用戶安裝的軟件一般都是放在/usr/local/目錄下。使用hadoop用戶登錄Linux系統(tǒng),打開一個終端,執(zhí)行如下命令:$sudotar-zxf~/下載/hbase-2.3.5-bin.tar.gz-C/usr/local將解壓的文件名hbase-2.3.5改為hbase,以方便使用,命令如下:$sudomv/usr/local/hbase-2.3.5/usr/local/hbase4HBase安裝配置環(huán)境變量將HBase安裝目錄下的bin目錄(即/usr/local/hbase/bin)添加到系統(tǒng)的PATH環(huán)境變量中,這樣,每次啟動HBase時就不需要到/usr/local/hbase目錄下執(zhí)行啟動命令。使用vim編輯器打開~/.bashrc文件,命令如下:$vim~/.bashrc打開.bashrc文件以后,可以看到,已經(jīng)存在如下所示的PATH環(huán)境變量的配置信息,之前已經(jīng)為Hadoop添加了PATH環(huán)境變量的配置信息:exportPATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin這里需要把HBase的bin目錄/usr/local/hbase/bin追加到PATH中,追加后的結(jié)果如下:exportPATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin:/usr/local/hbase/bin保存文件后,執(zhí)行如下命令使設(shè)置生效:$source~/.bashrc4HBase安裝添加用戶權(quán)限需要為當(dāng)前登錄Linux系統(tǒng)的hadoop用戶添加訪問hbase目錄的權(quán)限,將HBase安裝目錄下的所有文件的所有者改為hadoop,命令如下:$cd/usr/local$sudochown-Rhadoop./hbase查看HBase版本信息可以通過如下命令查看HBase版本信息,以便確認HBase已經(jīng)安裝成功:$/usr/local/hbase/bin/hbaseversion

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase5HBase配置HBase有3種運行模式,即單機模式、偽分布式模式和分布式模式。(1)單機模式:采用本地文件系統(tǒng)存儲數(shù)據(jù)。(2)偽分布式模式:采用偽分布式模式的HDFS存儲數(shù)據(jù)。(3)分布式模式:采用分布式模式的HDFS存儲數(shù)據(jù)。在進行HBase配置之前,需要確認已經(jīng)安裝了3個組件:JDK、Hadoop、SSH。HBase單機模式不需要安裝Hadoop,偽分布式模式和分布式模式需要安裝Hadoop。5HBase配置單機運行模式配置1.配置hbase-env.sh文件使用vim編輯器打開/usr/local/hbase/conf/hbase-env.sh,命令如下:$vim/usr/local/hbase/conf/hbase-env.sh打開文件以后,需要在文件中配置JAVA_HOME=/opt/jvm/jdk1.8.0_181,此外,還需要添加Zookeeper配置信息,配置HBASE_MANAGES_ZK為true,表示由HBase自己管理Zookeeper,不需要單獨的Zookeeper。修改后的hbase-env.sh文件應(yīng)該包含如下兩行信息:exportJAVA_HOME=/opt/jvm/jdk1.8.0_181exportHBASE_MANAGES_ZK=true修改完成以后,保存hbase-env.sh文件并退出vim編輯器。5HBase配置單機運行模式配置2.配置hbase-site.xml文件使用vim編輯器打開并編輯/usr/local/hbase/conf/hbase-site.xml文件,命令如下:$vim/usr/local/hbase/conf/hbase-site.xml配置屬性hbase.rootdir,用于指定HBase數(shù)據(jù)的存儲位置,這里把hbase.rootdir設(shè)置為HBase安裝目錄下的hbase-tmp文件夾,修改后的hbase-site.xml文件中的配置信息如下:<configuration><property><name>hbase.rootdir</name><value>file:///usr/local/hbase/hbase-tmp</value></property></configuration>5HBase配置單機運行模式配置3.啟動Hbase$cd/usr/local/hbase$bin/start-hbase.sh#啟動HBase4.進入HBaseShell模式$bin/hbaseshell#進入HBaseshell命令行模式hbase(main):001:0>進入Shell模式后,通過status命令查看HBase的運行狀態(tài)、exit命令退出Shellhbase(main):001:0>status#查看HBase的運行狀態(tài)hbase(main):002:0>exit#退出HBaseShell5.停止HBase退出shell后,可以使用如下命令停止HBase運行:$bin/stop-hbase.sh5HBase配置偽分布式運行模式配置1.配置hbase-env.sh文件使用vim編輯器打開/usr/local/hbase/conf/hbase-env.sh,命令如下:$vim/usr/local/hbase/conf/hbase-env.sh在hbase-env.sh文件中配置JAVA_HOME、HBASE_CLASSPATH和HBASE_MANAGES_ZK。修改后的hbase-env.sh文件應(yīng)該包含如下3行信息:exportJAVA_HOME=/opt/jvm/jdk1.8.0_181exportHBASE_CLASSPATH=/usr/local/hadoop/confexportHBASE_MANAGES_ZK=true5HBase配置偽分布式運行模式配置2.配置hbase-site.xml文件$vim/usr/local/hbase/conf/hbase-site.xml在hbase-site.xml文件中,需要設(shè)置屬性hbase.rootdir,用于指定HBase在偽分布式模式的HDFS上的存儲路徑,這里設(shè)置為hdfs://localhost:9000/hbase。由于采用了偽分布式模式,還需要將屬性hbase.cluster.distributed設(shè)置為true。<configuration><property><name>hbase.rootdir</name><value>hdfs://localhost:9000/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property></configuration>5HBase配置偽分布式運行模式配置3.啟動Hbase啟動順序:先啟動Hadoop–>再啟動HBase。關(guān)閉順序:先關(guān)閉HBase–>再關(guān)閉Hadoop。第一步:啟動Hadoop集群首先登陸SSH,由于之前已經(jīng)設(shè)置了無密碼登錄,因此這里不需要密碼。然后切換至/usr/local/hadoop/,啟動Hadoop,讓HDFS進入運行狀態(tài),從而可以為HBase存儲數(shù)據(jù),具體命令如下:$sshlocalhost$cd/usr/local/hadoop$./sbin/start-dfs.sh#啟動Hadoop第二步:啟動Hbase啟動HBase的命令如下:$cd/usr/local/hbase$bin/start-hbase.sh5HBase配置偽分布式運行模式配置4.進入HBaseShell模式$bin/hbaseshell#進入HBaseshell模式進入HBaseShell模式以后,用戶可以通過輸入Shell命令操作HBase數(shù)據(jù)庫。5.退出HBaseShell模式通過exit命令退出HBaseShell模式。6.停止HBase運行退出HBaseShell模式后,可使用如下命令關(guān)閉HBase:$bin/stop-hbase.sh關(guān)閉HBase以后,如果不再使用Hadoop,就可以運行如下命令關(guān)閉Hadoop:$cd/usr/local/hadoop$./sbin/stop-dfs.sh

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase6HBase的Shell操作基本操作1.獲取幫助helphbase(main):004:0>helphbase(main):005:0>help'status'#獲取status命令的詳細信息2.查看服務(wù)器狀態(tài)statusstatus命令用來提供HBase的狀態(tài),例如服務(wù)器的數(shù)量。hbase(main):006:0>status1servers,1dead,2.0000averageload3.查看當(dāng)前用戶whoamihbase(main):007:0>whoamihadoop(auth:SIMPLE)groups:hadoop,sudo6HBase的Shell操作基本操作4.命名空間相關(guān)命令(1)列出所有命名空間命令list_namespace(2)創(chuàng)建命名空間命令create_namespacehbase(main):010:0>create_namespace'ns1'(3)查看命名空間命令describe_namespacehbase(main):011:0>describe_namespace'ns1'(4)在命名空間下創(chuàng)建表hbase(main):013:0>create'ns1:t1','cf1'該命令在命名空間ns1下新建一個表t1且表的列族為cf1。(5)查看命名空間下的所有表列出指定命名空間下的所有表list_namespace_tableshbase(main):015:0>list_namespace_tables'ns1'(7)刪除命名空間的表drop(8)刪除命名空間命令drop_namespacehbase>drop_namespace'ns1'#命名空間ns1必須為空,否則會報錯6HBase的Shell操作在關(guān)系數(shù)據(jù)庫中,需要首先創(chuàng)建數(shù)據(jù)庫,然后再創(chuàng)建表,但在HBase數(shù)據(jù)庫中,不需要創(chuàng)建數(shù)據(jù)庫,可直接創(chuàng)建表。HBase創(chuàng)建表的語法格式如下:create<表名稱>,<列族名稱1>[,'列族名稱2'...]HBase中的表至少要有一個列族,列族直接影響HBase數(shù)據(jù)存儲的物理特性。創(chuàng)建表創(chuàng)建有含有列族baseInfo和score,且版本數(shù)均為2的student表的命令如下。hbase>create'student',{NAME=>'baseInfo',VERSIONS=>2},{NAME=>'score',VERSIONS=>2}默認情況下一個單元格只能存儲一個數(shù)據(jù),后面如果修改數(shù)據(jù)就會將原來的覆蓋掉,可以通過指定VERSIONS使HBase一個單元格能存儲多個值。VERSIONS設(shè)為2,則一個單元格能存儲2個版本的數(shù)據(jù)。student表創(chuàng)建好之后,可使用describe"student"命令查看student表的表結(jié)構(gòu)6HBase的Shell操作put<表名>,<行鍵>,<列族名:列名>,<值>[,時間戳]例如給表student添加數(shù)據(jù):行鍵是0001,列族名是baseInfo,列名是Sname,值是ding。具體命令如下:插入與更新表中的數(shù)據(jù)hbase>put'student','0001','baseInfo:Sname','ding'系統(tǒng)默認把跟在表名student后面的第一個數(shù)據(jù)作為行鍵。可以指定時間戳,否則默認為系統(tǒng)當(dāng)前時間。下面再插入幾條記錄:hbase>put'student','0002','baseInfo:Sno','13440107'hbase>put'student','0002','baseInfo:Sname','yan'hbase>put'student','0002','score:C','90'hbase>put'student','0003','baseInfo:Sname','feng'hbase>put'student','0004','baseInfo:Sname','wang'6HBase的Shell操作查看某行數(shù)據(jù)的get命令的語法格式:get<表名>,<行鍵>[,<列族:列名>,....]查看表中的數(shù)據(jù)(1)查詢某行hbase>get'student','0001'(2)查詢某行某列hbase>get'student','0001','baseInfo:Sname'COLUMNCELLbaseInfo:Snametimestamp=1580729648426,value=ding(3)查詢滿足某限制條件的行只顯示baseInfo:Sname這一列,并且只顯示最新的2個版本:hbase>get'student','0001',{COLUMNS=>'baseInfo:Sname',VERSIONS=>2}COLUMNCELLbaseInfo:Snametimestamp=1580729648426,value=ding6HBase的Shell操作瀏覽表的全部數(shù)據(jù)的scan命令語法:scan<table>,{COLUMNS=>[<family:column>,....],LIMIT=>num}(1)瀏覽全表hbase>scan'student'查看表中的數(shù)據(jù)6HBase的Shell操作瀏覽表的全部數(shù)據(jù)的scan命令語法:scan<table>,{COLUMNS=>[<family:column>,....],LIMIT=>num}(2)瀏覽時指定列族查詢student表中列族為baseInfo的信息:hbase>scan'student',{COLUMNS=>['baseInfo']}查看表中的數(shù)據(jù)(3)瀏覽時指定列族并限定顯示最新的2個版本的內(nèi)容hbase>scan'student',{COLUMNS=>'baseInfo',VERSIONS=>2}(4)設(shè)置開啟Raw模式開啟Raw模式會把那些已添加刪除標(biāo)記但是未實際刪除的數(shù)據(jù)也顯示出來。hbase>scan'student',{COLUMNS=>'baseInfo',RAW=>true}6HBase的Shell操作瀏覽表的全部數(shù)據(jù)的scan命令語法:scan<table>,{COLUMNS=>[<family:column>,....],LIMIT=>num}(5)列的過濾瀏覽查詢student表中列族為baseInfo,列名為Sname、列族為score,列名為Python的信息:hbase>scan'student',{COLUMNS=>['baseInfo:Sname','score:Python']}查詢student表中列族為baseInfo,列名為Sname的信息,并且版本最新的2個:hbase>scan'student',{COLUMNS=>'baseInfo:Sname',VERSIONS=>2}查詢student表中列族為baseInfo,行鍵范圍是[0001,0003)的數(shù)據(jù)hbase>scan'student',{COLUMNS=>'baseInfo',STARTROW=>'0001',ENDROW=>'0003'}查看表中的數(shù)據(jù)6HBase的Shell操作在HBase中用delete、deleteall以及truncate命令刪除表中的數(shù)據(jù),三者的區(qū)別是:delete命令用于刪除一個單元格數(shù)據(jù),deleteall命令用于刪除一行數(shù)據(jù),truncate命令用于刪除表中的所有數(shù)據(jù)。刪除表中的數(shù)據(jù)(1)刪除行中的某個單元格數(shù)據(jù)語法格式:delete<表名>,<行鍵>,<列族名:列名>,<時間戳>hbase>delete'student','0001','baseInfo:Sname'上述語句將刪除0001行baseInfo:Sname列所有版本的數(shù)據(jù)。(2)刪除行使用deleteall命令刪除student表中0001行的全部數(shù)據(jù),命令如下:hbase>deleteall'student','0001'(3)刪除表中的所有數(shù)據(jù)刪除表student的所有數(shù)據(jù),命令如下:hbase>truncate'student'6HBase的Shell操作enable和disable可以啟用/禁用表,is_enabled和is_disabled來檢查表是否被禁用。hbase>disable'student'#禁用student表hbase>is_disabled'student'#檢查student表是否被禁用truehbase>enable'student'

#啟用student表hbase(main):048:0>is_enabled'student'#檢查student表是否被啟用true表的啟用/禁用6HBase的Shell操作修改表結(jié)構(gòu)必須先禁用表。hbase>disable'student'#禁用student表修改表結(jié)構(gòu)1.添加列族語法格式:alter'表名','列族名'hbase>alter'student','teacherInfo'#添加列族teacherInfo2.刪除列族語法格式:alter'表名',{NAME=>'列族名',METHOD=>'delete'}hbase>alter'student',{NAME=>'teacherInfo',METHOD=>'delete'}3更改列族存儲版本數(shù)默認情況下,列族只存儲一個版本的數(shù)據(jù),如果需要存儲多個版本的數(shù)據(jù),則需要修改列族的屬性。hbase>alter'student',{NAME=>'baseInfo',VERSIONS=>3}#版本數(shù)改為36HBase的Shell操作刪除表需要兩步操作:第一步禁用表,第二步刪除表。例如,要刪除student表,可以使用如下命令:hbase>disable'student'#禁用student表hbase>drop'student'#刪除student表刪除HBase表

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase7HBase的JavaAPI操作HBase數(shù)據(jù)庫管理API1.HBaseAdminorg.apache.hadoop.hbase.client.HBaseAdmin類主要用于管理HBase數(shù)據(jù)庫的表信息,包括創(chuàng)建或刪除表、列出表項、使表有效或無效、添加或刪除表的列族成員、檢查HBase的運行狀態(tài)等。HBaseAdmin類的主要方法如表所示。與HBase數(shù)據(jù)存儲管理相關(guān)的JavaAPI主要包括:HBaseAdmin、HBaseConfiguration、HTableDescriptor、HColumnDescriptor、Put、Get、ResultScanner、Result、Scan。7HBase的JavaAPI操作HBase數(shù)據(jù)庫管理API2.HBaseConfigurationorg.apache.hadoop.hbase.HBaseConfiguration類主要用于管理HBase的配置信息。HBaseConfiguration類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表API1.HTableorg.apache.hadoop.hbase.client.HTable類用于與HBase進行通信。如果多個線程對一個HTable對象進行put或者delete操作的話,則寫緩沖器可能會崩潰。HTable類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表API2.HTableDescriptororg.apache.hadoop.hbase.HTableDescriptor類包含了HBase中表格的詳細信息,如表的列族、表的類型(-ROOT-,.META.)等。HTableDescriptor類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表API3.HColumnDescriptororg.apache.hadoop.hbase.HColumnDescriptor類維護著關(guān)于列族的信息,例如版本號、壓縮設(shè)置等。它通常在創(chuàng)建表或者為表添加列族的時候使用。列族被創(chuàng)建后不能直接修改,只能通過刪除然后重新創(chuàng)建的方式。列族被刪除的時候,列族里面的數(shù)據(jù)也會同時被刪除。HColumnDescriptor類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表行列API1.Putorg.apache.hadoop.hbase.client.Put類用于向單元格添加數(shù)據(jù)。Put類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表行列API2.Getorg.apache.hadoop.hbase.client.Get類用來獲取單行的信息。Get類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表行列API3.Scan可以利用org.apache.hadoop.hbase.client.Scan類來限定需要查找的數(shù)據(jù),如限定版本號、起始行號、列族、列限定符、返回數(shù)量的上限等。Scan類的主要方法如表所示。7HBase的JavaAPI操作HBase數(shù)據(jù)庫表行列API4.Resultorg.apache.hadoop.hbase.client.Result類用于存放Get或Put操作后的結(jié)果,并以<key,value>的格式存放在map結(jié)構(gòu)中。Result類的主要方法如表所示。

HBase分布式數(shù)據(jù)庫1 HBase概述2 HBase系統(tǒng)架構(gòu)和數(shù)據(jù)訪問流程3 HBase數(shù)據(jù)表4 HBase安裝5 HBase配置6HBase的Shell操作7HBase的JavaAPI操作8HBase案例實戰(zhàn)9Python操作HBase8HBase案例實戰(zhàn)HBase提供了JavaAPI對HBase數(shù)據(jù)庫進行操作,本書采用Eclipse進行程序開發(fā)。在進行HBase編程之前,如果還沒有啟動Hadoop和HBase,需要首先啟動Hadoop和HBase,具體命令如下:$cd/usr/local/hadoop$./sbin/start-dfs.sh$cd/usr/local/hbase$./bin/start-hbase.sh在Eclipse中創(chuàng)建項目創(chuàng)建名稱為HBaseExample的項目。添加項目需要用到的JAR包為了編寫一個能夠與HBase交互的Java應(yīng)用程序,需要在這個界面中加載該Java工程所需要用到的JAR包,位于/usr/local/hbase

溫馨提示

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

評論

0/150

提交評論