《Hadoop核心技術(shù)與大數(shù)據(jù)平臺搭建》課件 單元5 分布式數(shù)據(jù)庫HBase_第1頁
《Hadoop核心技術(shù)與大數(shù)據(jù)平臺搭建》課件 單元5 分布式數(shù)據(jù)庫HBase_第2頁
《Hadoop核心技術(shù)與大數(shù)據(jù)平臺搭建》課件 單元5 分布式數(shù)據(jù)庫HBase_第3頁
《Hadoop核心技術(shù)與大數(shù)據(jù)平臺搭建》課件 單元5 分布式數(shù)據(jù)庫HBase_第4頁
《Hadoop核心技術(shù)與大數(shù)據(jù)平臺搭建》課件 單元5 分布式數(shù)據(jù)庫HBase_第5頁
已閱讀5頁,還剩91頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

單元5

分布式數(shù)據(jù)庫HBase學(xué)習(xí)目標(biāo)知識目標(biāo)技能目標(biāo)1.掌握HBase的系統(tǒng)架構(gòu)2.掌握HBase的關(guān)鍵特性。3.熟悉HBase的基本功能1.熟悉HBase的安裝與配置過程,并完成HBase的安裝與配置。2.掌握HBase的基本Shell命令,熟練運(yùn)用HBase命令進(jìn)行表操作。3.熟悉用JavaAPI編程對HBase進(jìn)行表操作的流程單元任務(wù)任務(wù)5.1認(rèn)識HBase任務(wù)5.2HBase的實(shí)現(xiàn)原理。任務(wù)5.3HBase組件安裝與配置任務(wù)5.4HBase常用Shell命令的使用任務(wù)5.5HBaseJavaAPI編程應(yīng)用 (1)分布式數(shù)據(jù)存儲系統(tǒng)BigTable。(2)分布式數(shù)據(jù)庫HBase。(3)HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較。(4)HBase訪問接口。(5)HBase數(shù)據(jù)模型。本任務(wù)由BigTable的運(yùn)用開始,引入HBase,分別對HBase和BigTable,以及HBase和傳統(tǒng)關(guān)系數(shù)據(jù)庫的區(qū)別進(jìn)行分析。了解常用HBase訪問接口;通過對數(shù)據(jù)模型的學(xué)習(xí),了解行式數(shù)據(jù)庫和列式數(shù)據(jù)庫,理解表、行鍵、列族、列限定符、單元格、時(shí)間戳等概念,以及HBase的KeyValue存儲模型?!救蝿?wù)描述】【關(guān)鍵步驟】任務(wù)5.1認(rèn)識HBase

5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable5.1.2分布式數(shù)據(jù)庫HBase5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較5.1.4HBase訪問接口5.1.5HBase數(shù)據(jù)模型任務(wù)5.1認(rèn)識HBase5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable滿足互聯(lián)網(wǎng)搜索引擎的基本需求用于網(wǎng)頁搜索用于谷歌許多項(xiàng)目,包括搜索、地圖、財(cái)經(jīng)、打印等社交網(wǎng)站、視頻共享網(wǎng)站博客網(wǎng)站等BigTable誕生5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable

BigTable是一個(gè)分布式存儲系統(tǒng),利用谷歌提出的MapReduce分布式并行計(jì)算模型來處理海量數(shù)據(jù),使用谷歌的分布式文件系統(tǒng)(GFS)作為底層數(shù)據(jù)存儲,并采用Chubby提供協(xié)同服務(wù)管理,可以擴(kuò)展到PB級別的數(shù)據(jù)和上千臺機(jī)器,具備廣泛應(yīng)用性、可擴(kuò)展性、高性能和高可用性等特點(diǎn)。BigTable是一個(gè)分布式存儲系統(tǒng)底層磁盤Х備注:GFS:GoogleFileSystemChubby:用于松耦合分布式系統(tǒng)的鎖服務(wù)谷歌分布式底層文件系統(tǒng)GFSBigTable的相關(guān)數(shù)據(jù)存儲協(xié)同服務(wù)管理采用Chubby5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTableBigTable是一個(gè)分布式存儲系統(tǒng)起初用于互聯(lián)網(wǎng)搜索搜索互聯(lián)網(wǎng)建立整個(gè)互聯(lián)網(wǎng)索引設(shè)計(jì)一個(gè)網(wǎng)頁爬蟲,每頁一行存儲到BigTable在BigTable上運(yùn)行MapReduce生成索引用戶發(fā)起網(wǎng)絡(luò)搜索請求查詢索引從BigTable得到網(wǎng)頁搜索結(jié)果提交給用戶網(wǎng)頁在BigTable中的存儲樣例5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable網(wǎng)頁在BigTable中的存儲樣例5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable5.1.2分布式數(shù)據(jù)庫HBase5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較5.1.4HBase訪問接口5.1.5HBase數(shù)據(jù)模型任務(wù)5.1認(rèn)識HBase5.1.2分布式數(shù)據(jù)庫HBaseHBase是一個(gè)高可靠、高性能、面向列、可伸縮的分布式數(shù)據(jù)庫,是谷歌BigTable的開源實(shí)現(xiàn),主要用來存儲非結(jié)構(gòu)化和半結(jié)構(gòu)化的松散數(shù)據(jù)。HBase的目標(biāo)是處理非常龐大的表,可以通過水平擴(kuò)展的方式,利用廉價(jià)計(jì)算機(jī)集群處理由超過10億行數(shù)據(jù)和數(shù)百萬列元素組成的數(shù)據(jù)表。Hadoop生態(tài)系統(tǒng)中HBase與其他部分的關(guān)系HBase是BigTable的開源實(shí)現(xiàn),HBase和BigTable的底層技術(shù)對應(yīng)關(guān)系如下表:BigTableHBase文件存儲系統(tǒng)GFSHDFS海量數(shù)據(jù)處理MapReduceHadoopMapReduce協(xié)同服務(wù)管理ChubbyZookeeper5.1.2分布式數(shù)據(jù)庫HBaseHBase利用HDFS作為文件存儲系統(tǒng),提供實(shí)時(shí)讀/寫的分布式數(shù)據(jù)庫系統(tǒng);利用HadoopMapReduce處理HBase中的海量數(shù)據(jù),從而實(shí)現(xiàn)高性能計(jì)算;利用ZooKeeper作為協(xié)同服務(wù),提供穩(wěn)定服務(wù)和失敗恢復(fù)機(jī)制。5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable5.1.2分布式數(shù)據(jù)庫HBase5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較5.1.4HBase訪問接口5.1.5HBase數(shù)據(jù)模型任務(wù)5.1認(rèn)識HBase關(guān)系數(shù)據(jù)庫已經(jīng)流行很多年,并且Hadoop已經(jīng)有了HDFS和MapReduce,為什么需要HBase?Hadoop可以很好地解決大規(guī)模數(shù)據(jù)的離線批量處理問題,但受限于HadoopMapReduce編程框架的高延遲數(shù)據(jù)處理機(jī)制,Hadoop無法滿足大規(guī)模數(shù)據(jù)實(shí)時(shí)處理應(yīng)用的需求HDFS面向批量訪問模式,不是隨機(jī)訪問模式傳統(tǒng)的通用關(guān)系型數(shù)據(jù)庫無法應(yīng)對在數(shù)據(jù)規(guī)模劇增時(shí)導(dǎo)致的系統(tǒng)擴(kuò)展性和性能問題(分庫分表也不能很好解決)傳統(tǒng)關(guān)系數(shù)據(jù)庫在數(shù)據(jù)結(jié)構(gòu)變化時(shí)一般需要停機(jī)維護(hù);空列浪費(fèi)存儲空間業(yè)界出現(xiàn)了一類面向半結(jié)構(gòu)化數(shù)據(jù)存儲和處理的高可擴(kuò)展、低寫入/查詢延遲的系統(tǒng),例如,鍵值數(shù)據(jù)庫、文檔數(shù)據(jù)庫和列族數(shù)據(jù)庫(如BigTable和HBase等)HBase已經(jīng)成功應(yīng)用于互聯(lián)網(wǎng)服務(wù)領(lǐng)域和傳統(tǒng)行業(yè)的眾多在線式數(shù)據(jù)分析處理系統(tǒng)中5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較HBase與傳統(tǒng)的關(guān)系數(shù)據(jù)庫的區(qū)別主要體現(xiàn)在以下幾個(gè)方面:(1)數(shù)據(jù)類型:關(guān)系數(shù)據(jù)庫采用關(guān)系模型,具有豐富的數(shù)據(jù)類型和存儲方式,HBase則采用了更加簡單的數(shù)據(jù)模型,它把數(shù)據(jù)存儲為未經(jīng)解釋的字符串(2)數(shù)據(jù)操作:關(guān)系數(shù)據(jù)庫中包含了豐富的操作,其中會(huì)涉及復(fù)雜的多表連接。HBase操作則不存在復(fù)雜的表與表之間的關(guān)系,只有簡單的插入、查詢、刪除、清空等,因?yàn)镠Base在設(shè)計(jì)上就避免了復(fù)雜的表和表之間的關(guān)系(3)存儲模式:關(guān)系數(shù)據(jù)庫是基于行模式存儲的。HBase是基于列存儲的,每個(gè)列族都由幾個(gè)文件保存,不同列族的文件是分離的5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較(4)數(shù)據(jù)索引:關(guān)系數(shù)據(jù)庫通??梢葬槍Σ煌袠?gòu)建復(fù)雜的多個(gè)索引,以提高數(shù)據(jù)訪問性能。HBase只有一個(gè)索引——行鍵,通過巧妙的設(shè)計(jì),HBase中的所有訪問方法,或者通過行鍵訪問,或者通過行鍵掃描,從而使得整個(gè)系統(tǒng)不會(huì)慢下來(5)數(shù)據(jù)維護(hù):在關(guān)系數(shù)據(jù)庫中,更新操作會(huì)用最新的當(dāng)前值去替換記錄中原來的舊值,舊值被覆蓋后就不會(huì)存在。而在HBase中執(zhí)行更新操作時(shí),并不會(huì)刪除數(shù)據(jù)舊的版本,而是生成一個(gè)新的版本,舊有的版本仍然保留(6)可伸縮性:關(guān)系數(shù)據(jù)庫很難實(shí)現(xiàn)橫向擴(kuò)展,縱向擴(kuò)展的空間也比較有限。相反,HBase和BigTable這些分布式數(shù)據(jù)庫就是為了實(shí)現(xiàn)靈活的水平擴(kuò)展而開發(fā)的,能夠輕易地通過在集群中增加或者減少硬件數(shù)量來實(shí)現(xiàn)性能的伸縮5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable5.1.2分布式數(shù)據(jù)庫HBase5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較5.1.4HBase訪問接口5.1.5HBase數(shù)據(jù)模型任務(wù)5.1認(rèn)識HBase5.1.4HBase訪問接口類型特點(diǎn)場合JavaAPI最常規(guī)和高效的訪問方式適合HadoopMapReduce作業(yè)并行批處理HBase表數(shù)據(jù)Shell命令HBase的命令行工具,最簡單的接口適合HBase管理使用ThriftGateway利用Thrift(接口描述語言和二進(jìn)制通信協(xié)議)序列化技術(shù),支持C++、PHP、Python等多種語言適合其他異構(gòu)系統(tǒng)在線訪問HBase表數(shù)據(jù)RESTGateway解除了語言限制(客戶端安全操作配置)支持REST風(fēng)格的HttpAPI訪問HBasePig使用PigLatin流式編程語言來處理HBase中的數(shù)據(jù)適合做數(shù)據(jù)統(tǒng)計(jì)Hive簡單當(dāng)需要以類似SQL語言方式來訪問HBase的時(shí)候HBase提供了HBaseShell、NativeJavaAPI、ThrifGateway、RESTGateway、Pig、Hive等多種訪問接口,下表給出了HBase訪問接口的類型、特點(diǎn)和使用場合。5.1.1分布式數(shù)據(jù)存儲系統(tǒng)BigTable5.1.2分布式數(shù)據(jù)庫HBase5.1.3HBase與傳統(tǒng)關(guān)系數(shù)據(jù)庫比較5.1.4HBase訪問接口5.1.5HBase數(shù)據(jù)模型任務(wù)5.1認(rèn)識HBase5.1.5HBase數(shù)據(jù)模型1數(shù)據(jù)模型HBase是一個(gè)稀疏、多維度、排序的映射表這張表的索引是行鍵、列族、列限定符和時(shí)間戳5.1.5HBase數(shù)據(jù)模型1數(shù)據(jù)模型每個(gè)值是一個(gè)未經(jīng)解釋的字符串也就Byte數(shù)組一行有一個(gè)行鍵和任意多個(gè)列表在水平方向由一個(gè)或者多個(gè)列族組成,一個(gè)列族中可以包含任意多個(gè)列,同一個(gè)列族里面的數(shù)據(jù)存儲在一起列族支持動(dòng)態(tài)擴(kuò)展,可以很輕松地添加一個(gè)列族或列,無需預(yù)先定義列的數(shù)量以及類型,所有列均以字符串形式存儲,用戶需要自行進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換HBase中執(zhí)行更新操作時(shí),并不會(huì)刪除數(shù)據(jù)舊的版本,而是生成一個(gè)新的版本,保留舊版本(這是和HDFS只允許追加不允許修改的特性相關(guān)的)5.1.5HBase數(shù)據(jù)模型2數(shù)據(jù)模型相關(guān)概念表:HBase采用表來組織數(shù)據(jù),表由行和列組成,列劃分為若干個(gè)列族行:每個(gè)HBase表都由若干行組成,每個(gè)行由行鍵(rowkey)來標(biāo)識。列族:一個(gè)HBase表被分組成許多“列族”(ColumnFamily)的集合,它是基本的訪問控制單元列限定符:列族里的數(shù)據(jù)通過列限定符(或列)來定位單元格:在HBase表中,通過行、列族和列限定符確定一個(gè)“單元格”(cell),單元格中存儲的數(shù)據(jù)沒有數(shù)據(jù)類型,總被視為字節(jié)數(shù)組byte[]時(shí)間戳:每個(gè)單元格都保存著同一份數(shù)據(jù)的多個(gè)版本,這些版本采用時(shí)間戳進(jìn)行索引5.1.5HBase數(shù)據(jù)模型2數(shù)據(jù)模型相關(guān)概念HBase的數(shù)據(jù)模型實(shí)例5.1.5HBase數(shù)據(jù)模型3KeyValue存儲模型概述1)四維數(shù)據(jù)坐標(biāo):HBase中需要根據(jù)行鍵、列族、列限定符和時(shí)間戳來確定一個(gè)單元格,因此,可以視為一個(gè)“四維坐標(biāo)”,即[行鍵,列族,列限定符,時(shí)間戳]鍵(Key)值(Value)[2300004,Info1,Email,1732454348954]“bao@”[2300004,Info1,Email,1732454396765]“bjia@163.com”2)KeyValue存儲模型HBase的底層數(shù)據(jù)以KeyValue的形式存在,KeyValue具有特定的結(jié)構(gòu),Key部分用來快速地檢索一個(gè)數(shù)據(jù)單元,Value部分用來存儲實(shí)際的用戶數(shù)據(jù)信息。KeyValue存儲模型支持動(dòng)態(tài)增加列,容易適應(yīng)數(shù)據(jù)類型和結(jié)構(gòu)的變化,以塊為單元操作數(shù)據(jù),列間、表間并無關(guān)聯(lián)關(guān)系。KeyValue型數(shù)據(jù)庫的數(shù)據(jù)分區(qū)方式是按Key值連續(xù)范圍分區(qū)的。數(shù)據(jù)按照行鍵的范圍(字典序),劃分為一個(gè)個(gè)的子區(qū)間Region。每個(gè)Region都是一個(gè)分布式存儲的基本單元。5.1.5HBase數(shù)據(jù)模型4面向列的存儲HBase是面向列的存儲。也就是說,HBase是一個(gè)“列式數(shù)據(jù)庫”。而傳統(tǒng)的關(guān)系數(shù)據(jù)庫采用的是面向行的存儲,被稱為“行式數(shù)據(jù)庫”。1)行式數(shù)據(jù)庫:一個(gè)元組(或行)會(huì)被連續(xù)地存儲在磁盤頁中。數(shù)據(jù)是一行一行被存儲的,每行會(huì)被分配固定的空間。從磁盤中讀取數(shù)據(jù)時(shí),首先需要從磁盤中順序掃描每個(gè)元組的完整內(nèi)容,然后從每個(gè)元組中篩選出查詢所需要的屬性。如果每個(gè)元組只有少量屬性的值對查詢是有用的,會(huì)浪費(fèi)許多磁盤空間和內(nèi)存帶寬。5.1.5HBase數(shù)據(jù)模型4面向列的存儲2)列行式數(shù)據(jù)庫:對關(guān)系進(jìn)行垂直分解,并為每個(gè)屬性分配一個(gè)子關(guān)系。因此,一個(gè)具有n個(gè)屬性的關(guān)系會(huì)被分解成n個(gè)子關(guān)系,每個(gè)子關(guān)系單獨(dú)存儲,只有當(dāng)其相應(yīng)的屬性被請求時(shí)才會(huì)被訪問。以關(guān)系數(shù)據(jù)庫中的屬性或列為單位進(jìn)行存儲的,關(guān)系中多個(gè)元組的同一屬性值(或同一列值)會(huì)被存儲在一起,而一個(gè)元組中的不同屬性值則通常會(huì)被分別存儲于不同的磁盤頁中。(1)表和Region。(2)HBase系統(tǒng)架構(gòu)。(3)HRegion服務(wù)器的工作原理。(4)Store的工作原理。(5)HLog的工作原理。(6)Region的定位。本任務(wù)通過對HBase系統(tǒng)架構(gòu)的介紹,幫助讀者了解客戶端、ZooKeeper服務(wù)器、HMaster服務(wù)器和HRegion服務(wù)器的功能和運(yùn)行機(jī)制;理解HRegion服務(wù)器、Store和HLog這三者的工作原理;理解HBase中表的構(gòu)成、Region劃分方法和Region定位?!救蝿?wù)描述】【關(guān)鍵步驟】任務(wù)5.2HBase的實(shí)現(xiàn)原理 5.2.1表和Region5.2.2HBase系統(tǒng)架構(gòu)5.2.3HRegion服務(wù)器的工作原理5.2.4Store的工作原理5.2.5HLog的工作原理5.2.6Region的定位任務(wù)5.2HBase的實(shí)現(xiàn)原理 5.2.1表和Region一個(gè)HBase表被劃分成多個(gè)Region一個(gè)Region會(huì)分裂成多個(gè)新的Region開始只有一個(gè)Region,后來不斷分裂Region拆分操作非???,接近瞬間,因?yàn)椴鸱种蟮腞egion讀取的仍然是原存儲文件,直到“合并”過程把存儲文件異步地寫到獨(dú)立的文件之后,才會(huì)讀取新文件5.2.1表和Region不同的Region可以分布在不同的Region服務(wù)器上每個(gè)Region默認(rèn)大小是100MB到200MB(2006年以前的硬件配置)

每個(gè)Region的最佳大小取決于單臺服務(wù)器的有效處理能力,目前每個(gè)Region最佳大小建議1GB-2GB(2013年以后的硬件配置)同一個(gè)Region不會(huì)被分拆到多個(gè)Region服務(wù)器,每個(gè)Region服務(wù)器存儲10-1000個(gè)Region5.2.1表和Region5.2.1表和Region5.2.2HBase系統(tǒng)架構(gòu)5.2.3HRegion服務(wù)器的工作原理5.2.4Store的工作原理5.2.5HLog的工作原理5.2.6Region的定位任務(wù)5.2HBase的實(shí)現(xiàn)原理 5.2.2HBase系統(tǒng)架構(gòu)(2)一個(gè)Master主服務(wù)器(3)許多個(gè)Region服務(wù)器(1)庫函數(shù):鏈接到每個(gè)客戶端HBase的實(shí)現(xiàn)包括三個(gè)主要的功能組件:(1)庫函數(shù):鏈接到每個(gè)客戶端(2)一個(gè)Master主服務(wù)器(3)許多個(gè)Region服務(wù)器主服務(wù)器Master:負(fù)責(zé)管理和維護(hù)HBase表的分區(qū)信息,維護(hù)Region服務(wù)器列表,分配Region,負(fù)載均衡Region服務(wù)器:負(fù)責(zé)存儲和維護(hù)分配給自己的Region,處理來自客戶端的讀寫請求客戶端并不是直接從Master主服務(wù)器上讀取數(shù)據(jù),而是在獲得Region的存儲位置信息后,直接從Region服務(wù)器上讀取數(shù)據(jù)客戶端并不依賴Master,而是通過Zookeeper來獲得Region位置信息,大多數(shù)客戶端甚至從來不和Master通信,這種設(shè)計(jì)方式使得Master負(fù)載很小

5.2.2HBase系統(tǒng)架構(gòu)HBase的系統(tǒng)架構(gòu)5.2.2HBase系統(tǒng)架構(gòu)1.客戶端:包含訪問HBase的接口,同時(shí)在緩存中維護(hù)著已經(jīng)訪問過的Region位置信息,用來加快后續(xù)數(shù)據(jù)訪問過程2.Zookeeper服務(wù)器:Zookeeper可以幫助選舉出一個(gè)Master作為集群的總管,并保證在任何時(shí)刻總有唯一一個(gè)Master在運(yùn)行,這就避免了Master的“單點(diǎn)失效”問題Zookeeper是一個(gè)很好的集群管理工具,被大量用于分布式計(jì)算,提供配置維護(hù)、域名服務(wù)、分布式同步、組服務(wù)等。5.2.2HBase系統(tǒng)架構(gòu)3.Master主服務(wù)器Master主要負(fù)責(zé)表和Region的管理工作:管理用戶對表的增加、刪除、修改、查詢等操作實(shí)現(xiàn)不同Region服務(wù)器之間的負(fù)載均衡在Region分裂或合并后,負(fù)責(zé)重新調(diào)整Region的分布對發(fā)生故障失效的Region服務(wù)器上的Region進(jìn)行遷移4.Region服務(wù)器Region服務(wù)器是HBase中最核心的模塊,負(fù)責(zé)維護(hù)分配給自己的Region,并響應(yīng)用戶的讀寫請求5.2.2HBase系統(tǒng)架構(gòu)5.2.1表和Region5.2.2HBase系統(tǒng)架構(gòu)5.2.3HRegion服務(wù)器的工作原理5.2.4Store的工作原理5.2.5HLog的工作原理5.2.6Region的定位任務(wù)5.2HBase的實(shí)現(xiàn)原理 Region服務(wù)器向HDFS文件系統(tǒng)中讀寫數(shù)據(jù)1.用戶讀寫數(shù)據(jù)過程2.緩存的刷新3.StoreFile的合并(具體過程附后)5.2.3HRegion服務(wù)器的工作原理1.用戶讀寫數(shù)據(jù)過程

用戶寫入數(shù)據(jù)時(shí),被分配到相應(yīng)Region服務(wù)器去執(zhí)行

用戶數(shù)據(jù)首先被寫入到Hlog和MemStore中

只有當(dāng)操作寫入Hlog之后,commit()調(diào)用才會(huì)將其返回給客戶端當(dāng)用戶讀取數(shù)據(jù)時(shí),Region服務(wù)器會(huì)首先訪問MemStore緩存,如果找不到,再去磁盤上面的StoreFile中尋找5.2.3HRegion服務(wù)器的工作原理2.緩存的刷新系統(tǒng)會(huì)周期性地把MemStore緩存里的內(nèi)容刷寫到磁盤的StoreFile文件中,清空緩存,并在Hlog里面寫入一個(gè)標(biāo)記每次刷寫都生成一個(gè)新的StoreFile文件,因此,每個(gè)Store包含多個(gè)StoreFile文件每個(gè)Region服務(wù)器都有一個(gè)自己的HLog

文件,每次啟動(dòng)都檢查該文件,確認(rèn)最近一次執(zhí)行緩存刷新操作之后是否發(fā)生新的寫入操作;如果發(fā)現(xiàn)更新,則先寫入MemStore,再刷寫到StoreFile,最后刪除舊的Hlog文件,開始為用戶提供服務(wù)5.2.3HRegion服務(wù)器的工作原理3.StoreFile的合并每次刷寫都生成一個(gè)新的StoreFile,數(shù)量太多,影響查找速度調(diào)用Spact()把多個(gè)合并成一個(gè)合并操作比較耗費(fèi)資源,只有數(shù)量達(dá)到一個(gè)閾值才啟動(dòng)合并(過程附后)5.2.3HRegion服務(wù)器的工作原理5.2.1表和Region5.2.2HBase系統(tǒng)架構(gòu)5.2.3HRegion服務(wù)器的工作原理5.2.4Store的工作原理5.2.5HLog的工作原理5.2.6Region的定位任務(wù)5.2HBase的實(shí)現(xiàn)原理 StoreFile的合并和分裂過程Store是Region服務(wù)器的核心多個(gè)StoreFile合并成一個(gè)單個(gè)StoreFile過大時(shí),又觸發(fā)分裂操作,1個(gè)父Region被分裂成兩個(gè)子Region5.2.4Store的工作原理5.2.1表和Region5.2.2HBase系統(tǒng)架構(gòu)5.2.3HRegion服務(wù)器的工作原理5.2.4Store的工作原理5.2.5HLog的工作原理5.2.6Region的定位任務(wù)5.2HBase的實(shí)現(xiàn)原理 5.2.5HLog工作原理分布式環(huán)境必須要考慮系統(tǒng)出錯(cuò)。HBase采用HLog保證系統(tǒng)恢復(fù)HBase系統(tǒng)為每個(gè)Region服務(wù)器配置了一個(gè)HLog文件,它是一種預(yù)寫式日志(WriteAheadLog)用戶更新數(shù)據(jù)必須首先寫入日志后,才能寫入MemStore緩存,并且,直到MemStore緩存內(nèi)容對應(yīng)的日志已經(jīng)寫入磁盤,該緩存內(nèi)容才能被刷寫到磁盤Zookeeper會(huì)實(shí)時(shí)監(jiān)測每個(gè)Region服務(wù)器的狀態(tài),當(dāng)某個(gè)Region服務(wù)器發(fā)生故障時(shí),Zookeeper會(huì)通知MasterMaster首先會(huì)處理該故障Region服務(wù)器上面遺留的HLog文件,這個(gè)HLog文件中包含了來自多個(gè)Region對象的日志記錄系統(tǒng)會(huì)根據(jù)每條日志記錄所屬的Region對象對HLog數(shù)據(jù)進(jìn)行拆分,分別放到相應(yīng)Region對象的目錄下,再將失效的Region重新分配到可用的Region服務(wù)器中,并把與該Region對象相關(guān)的HLog日志記錄也發(fā)送給相應(yīng)的Region服務(wù)器Region服務(wù)器領(lǐng)取到分配給自己的Region對象以及與之相關(guān)的HLog日志記錄以后,會(huì)重新做一遍日志記錄中的各種操作,把日志記錄中的數(shù)據(jù)寫入到MemStore緩存中,然后,刷新到磁盤的StoreFile文件中,完成數(shù)據(jù)恢復(fù)共用日志優(yōu)點(diǎn):提高對表的寫操作性能;缺點(diǎn):恢復(fù)時(shí)需要分拆日志5.2.5HLog工作原理5.2.1表和Region5.2.2HBase系統(tǒng)架構(gòu)5.2.3HRegion服務(wù)器的工作原理5.2.4Store的工作原理5.2.5HLog的工作原理5.2.6Region的定位任務(wù)5.2HBase的實(shí)現(xiàn)原理 5.2.6Region的定位HBase的三層結(jié)構(gòu)元數(shù)據(jù)表,又名.META.表,存儲了Region和Region服務(wù)器的映射關(guān)系當(dāng)HBase表很大時(shí),.META.表也會(huì)被分裂成多個(gè)Region根數(shù)據(jù)表,又名-ROOT-表,記錄所有元數(shù)據(jù)的具體位置-ROOT-表只有唯一一個(gè)Region,名字是在程序中被寫死的Zookeeper文件記錄了-ROOT-表的位置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位置信息5.2.6Region的定位為了加快訪問速度,.META.表的全部Region都會(huì)被保存在內(nèi)存中假設(shè).META.表的每行(一個(gè)映射條目)在內(nèi)存中大約占用1KB,并且每個(gè)Region限制為128MB,那么,上面的三層結(jié)構(gòu)可以保存的用戶數(shù)據(jù)表的Region數(shù)目的計(jì)算方法是:

(-ROOT-表能夠?qū)ぶ返?META.表的Region個(gè)數(shù))×(每個(gè).META.表的Region可以尋址的用戶數(shù)據(jù)表的Region個(gè)數(shù))1)一個(gè)-ROOT-表最多只能有一個(gè)Region,也就是最多只能有128MB,按照每行(一個(gè)映射條目)占用1KB內(nèi)存計(jì)算,128MB空間可以容納128MB/1KB=217行,也就是說,一個(gè)-ROOT-表可以尋址217個(gè).META.表的Region。2)同理,每個(gè).META.表的Region可以尋址的用戶數(shù)據(jù)表的Region個(gè)數(shù)是128MB/1KB=217。3)最終,三層結(jié)構(gòu)可以保存的Region數(shù)目是(128MB/1KB)×(128MB/1KB)=234個(gè)Region.METARegion一個(gè)用戶Region對應(yīng)217條表記錄每行一個(gè)Region對應(yīng)217個(gè)用戶Region1個(gè)Region=128M每行1KB,217行每行對應(yīng)一個(gè).META.的Region,共217個(gè)Region用戶

Region一個(gè)表最大可達(dá)到:234×217=251=4PB5.2.6Region的定位客戶端訪問數(shù)據(jù)時(shí)的“三級尋址”為了加速尋址,客戶端會(huì)緩存位置信息,同時(shí),需要解決緩存失效問題尋址過程客戶端只需要詢問Zookeeper服務(wù)器,不需要連接Master服務(wù)器5.2.6Region的定位(1)ZooKeeper安裝。(2)HBase安裝與配置。Hbase的安裝部署依賴于Hadoop和ZooKeeper,本任務(wù)學(xué)習(xí)ZooKeeper和HBase的安裝,安裝工具版本選用Hadoop.2.7.7、Zookeeper-3.4.10(/dist/zookeeper/zookeeper-3.4.10/)、Hbase-1.2.6(/dist/hbase/1.2.6/)。【任務(wù)描述】【關(guān)鍵步驟】任務(wù)5.3HBase組件安裝與配置

5.3.1ZooKeeper安裝5.3.2HBase安裝與配置任務(wù)5.3HBase組件安裝與配置5.3.1ZooKeeper安裝第1步:上傳ZooKeeper安裝包

用WinScp將安裝包上傳到CentOS7的主節(jié)點(diǎn)master的\root目錄下。第2步:解壓縮ZooKeeper安裝包。

解壓縮ZooKeeper安裝包,命令如下:cd/roottar-zxvfzookeeper-3.4.10.tar.gz-C/opt/modules/cd/opt/modulesmvzookeeper-3.4.10zookeeper第3步:配置系統(tǒng)環(huán)境變量。vi

/etc/profile在/etc/profile文件末尾添加系統(tǒng)環(huán)境變量:exportZOOKEEPER_HOME=/opt/modules/zookeeperexportPATH=$ZOOKEEPER_HOME/bin:$ZOOKEEPER_HOME/conf:$PATH5.3.1ZooKeeper安裝使系統(tǒng)環(huán)境變量生效,命令如下:

source/etc/profile分發(fā)系統(tǒng)環(huán)境變量到其余兩個(gè)節(jié)點(diǎn)上:scp/etc/profileroot@slave1:/etc/profilescp/etc/profileroot@slave2:/etc/profile切換窗口,使兩個(gè)從節(jié)點(diǎn)的系統(tǒng)環(huán)境變量生效,命令如下:source/etc/profile第4步:修改配置文件。cd/opt/modules/zookeeper/confrm-rfzoo_sample.cfgvizoo.cfgtickTime=2000initLimit=10syncLimit=5clientPort=2181dataDir=/opt/modules/zookeeper/datadataLogDir=/opt/modules/zookeeper/logserver.1=master:2888:3888server.2=slave1:2888:3888server.3=slave2:2888:3888修改內(nèi)容如右邊代碼:5.3.1ZooKeeper安裝創(chuàng)建對應(yīng)的數(shù)據(jù)和日志目錄:cd/opt/modules/zookeepermkdirdatalog創(chuàng)建標(biāo)識文件cddataecho1>myid第5步:分發(fā)安裝文件scp-r/opt/modules/zookeeperroot@slave1:/opt/modules/scp-r/opt/modules/zookeeperroot@slave2:/opt/modules/修改其余兩個(gè)從節(jié)點(diǎn)上的標(biāo)識文件,在master節(jié)點(diǎn)上執(zhí)行:sshroot@slave1"echo2>/opt/modules/zookeeper/data/myid"sshroot@slave2"echo3>/opt/modules/zookeeper/data/myid"第6步

:啟動(dòng)ZooKeeper集群。在每個(gè)節(jié)點(diǎn)上啟動(dòng)ZooKeeper服務(wù):zkServer.shstart查看每個(gè)節(jié)點(diǎn)上ZooKeeper的狀態(tài):zkServer.shstatusslave1狀態(tài):leadermaster狀態(tài):followerslave2狀態(tài):follower關(guān)閉ZooKeeper集群:zkServer.shstop5.3.1ZooKeeper安裝5.3.2HBase安裝與配置任務(wù)5.3HBase組件安裝與配置5.3.2HBase安裝與配置第1步:上傳安裝包.用WinScp將安裝包上傳到CentOS7的主節(jié)點(diǎn)master的\root目錄下。第2步:解壓縮安裝包c(diǎn)d/roottar-zxvfhbase-1.2.6-bin.tar.gz-C/opt/modules/cd/opt/modulesmvhbase-1.2.6/hbase第3步:配置系統(tǒng)環(huán)境變量vi/etc/profile編輯內(nèi)容如下:exportHBASE_HOME=/opt/modules/hbaseexportPATH=$HBASE_HOME/bin:$PATH使系統(tǒng)環(huán)境變量生效,命令如下:source/etc/profile分發(fā)系統(tǒng)環(huán)境變量至其余兩個(gè)從節(jié)點(diǎn)上scp/etc/profileroot@slave1:/etc/profilescp/etc/profileroot@slave2:/etc/profile使slave1、slave2系統(tǒng)環(huán)境變量生效source/etc/profile第4步:修改配置文件cd/opt/modules/hbase/confcp/opt/modules/hadoop/etc/hadoop/core-site.xml./cp/opt/modules/hadoop/etc/hadoop/hdfs-site.xml./vihbase-env.sh編輯內(nèi)容如下:exportJAVA_HOME=/opt/modules/jdk/exportHBASE_MANAGES_ZK=false5.3.2HBase安裝與配置修改HBase核心配置文件hbase-site.xml:vihbase-site.xml編輯內(nèi)容如下:

<configuration>

<!--指定HBase在HDFS上存儲的路徑

-->

<property>

<name>hbase.rootdir</name>

<value>hdfs://master:9000/hbase</value>

</property>

<!--指定HBase是分布式的

-->

<property>

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

<value>true</value>

</property>

<!--指定ZooKeeper的地址,多個(gè)地址用“,”分割

-->

<property>

<name>HBase.zookeeper.quorum</name>

<!--如果是偽分布模式,此處為

<value>master:2181</value>-->

<value>master:2181,slave1:2181,,slave2:2181</value>

</property>

</configuration>修改regionservers配置文件,如下:viregionservers編輯內(nèi)容如下:masterslave1slave2修改配置文件backup-mastersvibackup-masters輸入以下節(jié)點(diǎn):masterslave2第5步:分發(fā)安裝文件scp-r/opt/modules/hbase

root@slave1:/opt/modules/scp-r/opt/modules/hbase

root@slave2:/opt/modules/5.3.2HBase安裝與配置第6步:啟動(dòng)HBase集群。zkServer.shstartstart-all.shstart-hbase.sh在每個(gè)節(jié)點(diǎn)上分別啟動(dòng)ZooKeeper服務(wù):在master主節(jié)點(diǎn)上啟動(dòng)HDFS集群:在master主節(jié)點(diǎn)上啟動(dòng)HBase集群:在瀏覽器中訪問HBase的WebUI:29:16010查看master主節(jié)點(diǎn)進(jìn)程jps關(guān)閉HBase集群在master執(zhí)行如下命令:stop-hbase.sh(1)進(jìn)入HBaseShell客戶端。

(2)創(chuàng)建并查看普通表。(3)創(chuàng)建并查看namespace。

(4)向表中添加數(shù)據(jù)。(5)使用“get”命令查詢數(shù)據(jù)。

(6)使用“scan”命令查詢數(shù)據(jù)。(7)通過指定條件查詢數(shù)據(jù)。

(8)更新數(shù)據(jù)。(9)使用“delete”命令刪除某列數(shù)據(jù)。(10)使用“deleteall”命令刪除整行數(shù)據(jù)。(11)使用“drop”命令刪除數(shù)據(jù)表。

(12)Filter過濾器的使用。

本任務(wù)主要介紹Linux中關(guān)于HBase數(shù)據(jù)庫的常用Shell命令,通過具體的操作實(shí)例,幫助讀者學(xué)習(xí)HBase常用Shell命令的使用。HBase為用戶提供了非常方便的Shell命令,通過這些命令,用戶可以很方便地對表、列族、列等進(jìn)行操作?!救蝿?wù)描述】【關(guān)鍵步驟】任務(wù)5.4HBase常用Shell命令的使用5.4.1進(jìn)入HBaseShell客戶5.4.2創(chuàng)建并查看普通表5.4.3創(chuàng)建并查看NameSpace5.4.4向表中添加數(shù)據(jù)5.4.5使用“get”命令查詢數(shù)據(jù)5.4.6使用“scan”命令查詢數(shù)據(jù)5.4.7通過指定條件查詢數(shù)據(jù)5.4.8更新數(shù)據(jù)5.4.9使用“delete”命令刪除某列數(shù)據(jù)5.4.10使用“deleteall”命令刪除整行數(shù)據(jù)5.4.11使用“drop”命令刪除數(shù)據(jù)表5.4.12

Filter過濾器的使用任務(wù)5.4HBase常用Shell命令的使用

1)啟動(dòng)HBaseshellhbaseshell2)創(chuàng)建普通表并查看create‘表的名稱’,‘列族的名稱’例:create'huawei_cga_info','info'list查看系統(tǒng)中共有多少個(gè)普通表

list3)創(chuàng)建namespace語法為:create_namespace‘名稱‘例:create_namespace'huawei_nn'在指定namespace下創(chuàng)建表create‘namespace的名稱:表名’,’列族‘

例:create'huawei_nn:huawei_student','info'查看指定namespace下的表:list_namespace_tables‘namespace的名稱‘’例:list_namespace_tables'huawei_nn'4)增加數(shù)據(jù)put‘表的名稱‘,‘RowKey’,‘列的名稱’,‘具體的賦值’put'huawei_cga_info','123001','info:name','Kobe'put'huawei_cga_info','123001','info:gender','male'put'huawei_cga_info','123001','info:age','40'put'huawei_cga_info','123001','info:address','LosAngeles'put'huawei_cga_info','123002','info:name','lisi'put'huawei_cga_info','123002','info:gender','female'put'huawei_cga_info','123002','info:age','35'put'huawei_cga_info','123002','info:address','XiAn'put'huawei_cga_info','123003','info:name','Taylor'put'huawei_cga_info','123003','info:age','30'put'huawei_cga_info','123003','info:address','Redding'put'huawei_cga_info','123003','info:gender','female'put'huawei_cga_info','123004','info:name','LeBron'put'huawei_cga_info','123004','info:age','33'put'huawei_cga_info','123004','info:address','Cleveland'put'huawei_cga_info','123004','info:gender','male'任務(wù)5.4HBase常用Shell命令的使用

5)get方式查詢數(shù)據(jù)精確查詢某一個(gè)RowKey中存儲的內(nèi)容,語法:get‘表的名稱‘,’RowKey‘例:get'huawei_cga_info','123001'精確查詢特定RowKey內(nèi)容語法:get‘表的名稱‘,’RowKey‘,‘列名’get'huawei_cga_info','123001','info:name'6)scan方式查詢數(shù)據(jù),在某個(gè)范圍內(nèi)查詢,語法:查詢表中某個(gè)列族下所有列的信息:

scan‘表的名稱‘,{Columns=>’列‘}scan'huawei_cga_info',{COLUMNS=>'info'}查詢表中具體的一個(gè)列中存儲的信息。語法:scan‘表的名稱‘,{Columns=>’列的具體名稱‘}scan'huawei_cga_info',{COLUMNS=>'info:name'}7)指定條件查詢數(shù)據(jù)查詢RowKey為“123002”和“123003”中的數(shù)據(jù)scan'huawei_cga_info',{STARTROW=>'123002','LIMIT'=>2}8)更新數(shù)據(jù)查詢表中Rowkey為123001的年齡信息。get'huawei_cga_info','123001','info:age'更改表中Rowkey為123001的年齡信息。put'huawei_cga_info','123001','info:age','18'再次查詢表中Rowkey為123001的年齡信息get'huawei_cga_info','123001','info:age'由以上的結(jié)果比較可得,年齡信息已經(jīng)被更新。任務(wù)5.4HBase常用Shell命令的使用

9)使用delete刪除某一列數(shù)據(jù)首先查詢表中Rowkey為123001的信息。get'huawei_cga_info','123001'使用delete刪除123001中age列所存儲的數(shù)據(jù)delete'huawei_cga_info','123001','info:age'再次查詢表中Rowkey為123001的信息。get'huawei_cga_info','123001'結(jié)果可見,年齡信息已經(jīng)被刪除了。10)使用deleteall刪除整行數(shù)據(jù)使用deleteall刪除表huawei_cga_info中123001整行數(shù)據(jù)deleteall'huawei_cga_info','123001'再次查詢表中Rowkey為123001的信息。get'huawei_cga_info','123001'已經(jīng)沒有RowKey為123001信息,說明行數(shù)據(jù)刪除成功。任務(wù)5.4HBase常用Shell命令的使用

11)使用drop刪除數(shù)據(jù)表創(chuàng)建表名為huawei_cga_info1的新表。create'huawei_cga_info1','info'首先disable‘表的名稱’,然后再使用drop‘表的名稱’刪除數(shù)據(jù)表。disable'huawei_cga_info1'drop'huawei_cga_info1'list結(jié)果顯示表huawei_cga_info1已經(jīng)被刪除了。任務(wù)5.4HBase常用Shell命令的使用

12)Filter過濾器使用Filter允許在Scan過程中,設(shè)置一定的過濾條件,符合條件的用戶數(shù)據(jù)才返回,所有的過濾器都在服務(wù)端生效,以保證被過濾掉的數(shù)據(jù)不會(huì)傳送到客戶端。查詢年齡為30的人scan'huawei_cga_info',FILTER=>"ValueFilter(=,'binary:30')"查詢名叫Taylor的人scan'huawei_cga_info',FILTER=>"ValueFilter(=,'binary:Taylor')"查詢表中所有人的性別信息scan'huawei_cga_info',FILTER=>"ColumnPrefixFilter('gender')"查詢表中所有人的地址信息并且找出住在XiAn的人scan'huawei_cga_info',FILTER=>"ColumnPrefixFilter('address')ANDValueFilter(=,'binary:XiAn')"Fliter可以根據(jù)列族,列,版本等更多的條件來對數(shù)據(jù)進(jìn)行過濾,這里只演示了4種過濾方式,帶有過濾條件的RPC查詢請求會(huì)把過濾器分發(fā)到各個(gè)RegionServer,這樣可以降低網(wǎng)絡(luò)傳輸?shù)膲毫?。任?wù)5.4HBase常用Shell命令的使用

(1)環(huán)境準(zhǔn)備。(2)編寫HBaseJavaAPI程序并執(zhí)行。

本任務(wù)對HBase非關(guān)系數(shù)據(jù)庫進(jìn)行JavaAPI操作,實(shí)現(xiàn)用Java調(diào)用HBase,通過Java編程接口來訪問HBase,在HBase數(shù)據(jù)庫中創(chuàng)建表、查看表、刪除表,以及向表中插入數(shù)據(jù)、查看數(shù)據(jù)和刪除數(shù)據(jù)等操作。通過介紹環(huán)境準(zhǔn)備(Maven3.5.4配置、IntelliJIDEA安裝與配置等)、Pom文件配置和程序調(diào)試,并將調(diào)試成功的jar包上傳到CentOS7中執(zhí)行的全過程,幫助讀者了解JavaAPI訪問HBase的全過程?!救蝿?wù)描述】【關(guān)鍵步驟】任務(wù)5.5HBaseJavaAPI編程應(yīng)用5.5.1環(huán)境準(zhǔn)備5.5.2編寫HBaseJavaAPI程序并執(zhí)行任務(wù)5.5HBaseJavaAPI編程應(yīng)用(1)本地開發(fā),需要一臺安裝Windows7及以上系統(tǒng)的PC,并連接外網(wǎng),能夠從外網(wǎng)下載數(shù)據(jù),同時(shí)安裝好IntelliJIDEA、Maven3.5.4、Java1.8和瀏覽器。(2)安裝與啟動(dòng)Hadoop大數(shù)據(jù)處理平臺,可通過Linux客戶端在Hadoop上執(zhí)行相應(yīng)的程序。5.5.1環(huán)境準(zhǔn)備5.5.1環(huán)境準(zhǔn)備5.5.2編寫HBaseJavaAPI程序并執(zhí)行任務(wù)5.5HBaseJavaAPI編程應(yīng)用第1步:創(chuàng)建Maven項(xiàng)目打開IDEA,創(chuàng)建Maven項(xiàng)目,單擊“Next”按鈕:5.5.2編寫HBaseJavaAPI程序并執(zhí)行在“Groupid”文本框中輸入“com.huawei”,“ArtifactId”文本框中輸入“HbaseAPI”,單擊“Next”按鈕,Maven項(xiàng)目創(chuàng)建完成。5.5.2編寫HBaseJavaAPI程序并執(zhí)行單擊“Finish”按鈕,打開IDEA主界面:5.5.2編寫HBaseJavaAPI程序并執(zhí)行Maven項(xiàng)目創(chuàng)建完成后,需要配置Maven環(huán)境。選擇“File”→“settings”→“build”→“buildtools”→“Maven”命令,配置本地Maven路徑、setting.xml路徑,以及Maven下載jar包的存放地址。配置完成后點(diǎn)擊apply應(yīng)用,點(diǎn)擊ok,Maven的設(shè)置完畢。第2步:配置pom文件15.5.2編寫HBaseJavaAPI程序并執(zhí)行<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.huawei</groupId><artifactId>HbaseAPI</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>1.8</piler.source><piler.target>1.8</piler.target></properties><dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.9.1</version> </dependency>

第2步:配置pom文件25.5.2編寫HBaseJavaAPI程序并執(zhí)行<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.9.1</version></dependency><!--HBase--><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>1.2.6</version></dependency><dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-server</artifactId><version>1.2.6</version></dependency></dependencies><build><finalName>HbaseAPI</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version>

<configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>assembly</goal></goals></execution></executions></plugin></plugins></build></project>刷新Maven配置,下載程序運(yùn)行所需要的jar包,出現(xiàn)一個(gè)Dependencies目錄:5.5.2編寫HBaseJavaAPI程序并執(zhí)行第3步:創(chuàng)建表5.5.2編寫HBaseJavaAPI程序并執(zhí)行在java目錄下創(chuàng)建包c(diǎn)om.zjhw.hbase.tables,在這個(gè)包下創(chuàng)建CreateTable類,實(shí)現(xiàn)在HBase數(shù)據(jù)庫中創(chuàng)建jscy_users表,其中列族為“f”:

//鏈接HBase

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

HBaseAdminhBaseAdmin=newHBaseAdmin(conf);

TableNametableName=TableName.valueOf("jscy_users");

//判斷表是否存在

if(!hBaseAdmin.tableExists(tableName)){

HTableDescriptorhtd=newHTableDescriptor(tableName);

htd.addFamily(newHColumnDescriptor("f"));

hBaseAdmin.createTable(htd);

System.out.println(tableName+"表創(chuàng)建成功");

}else{

System.out.println(tableName+"表已經(jīng)存在");

}

}}importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.HColumnDescriptor;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.HBaseAdmin;

importjava.io.IOException;

/**

*創(chuàng)建Hbase表

*/

publicclassCreateTable{

publicstaticvoidmain(String[]args)throwsIOException{

Configurationconf=newHBaseConfiguration();

第4步:查看表結(jié)構(gòu)5.5.2編寫HBaseJavaAPI程序并執(zhí)行在com.zjhw.hbase.tables包下創(chuàng)建DescTable類,查看jscy_users表的結(jié)構(gòu),具體代碼如下:

//鏈接HBaseconf.set("hbase.zookeeper.quorum","master");HBaseAdminhBaseAdmin=newHBaseAdmin(conf);TableNametableName=TableName.valueOf("jscy_users");if(hBaseAdmin.tableExists(tableName)){HTableDescriptorhtd=hBaseAdmin.getTableDescriptor(tableName);System.out.println("查看"+tableName+"表結(jié)構(gòu)");System.out.println(htd);}else{System.out.println(tableName+"表不存在");}}}

packagecom.zjhw.hbase.tables;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.HTableDescriptor;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.HBaseAdmin;importjava.io.IOException;/***查看表結(jié)構(gòu)*/publicclassDescTable{publicstaticvoidmain(String[]args)throwsIOException{Configurationconf=newHBaseConfiguration();

第5步:刪除表。5.5.2編寫HBaseJavaAPI程序并執(zhí)行在com.zjhw.hbase.tables包下創(chuàng)建DeleteTable類,刪除HBase數(shù)據(jù)庫中的jscy_users表:

//鏈接HBaseconf.set("hbase.zookeeper.quorum","master");HBaseAdminhBaseAdmin=newHBaseAdmin(conf);TableNametableName=TableName.valueOf("jscy_users");if(hBaseAdmin.tableExists(tableName)){//判斷表的狀態(tài)if(hBaseAdmin.isTableAvailable(tableName)){hBaseAdmin.disableTable(tableName);}hBaseAdmin.deleteTable(tableName);System.out.println("刪除表"+tableName+"成功");}else{System.out.println(tableName+"表不存在");}}}packagecom.zjhw.hbase.tables;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.TableName;importorg.apache.hadoop.hbase.client.HBaseAdmin;importjava.io.IOException;/***刪除表*/publicclassDeleteTable{publicstaticvoidmain(String[]args)throwsIOException{Configurationconf=newHBaseConfiguration();

第6步:向表中插入數(shù)據(jù)15.5.2編寫HBaseJavaAPI程序并執(zhí)行在com.zjhw.hbase.tables包下創(chuàng)建PutDatas類,向jscy_users表中插入一條或多條數(shù)據(jù):packagecom.zjhw.hbase.tables;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.hbase.HBaseConfiguration;importorg.apache.hadoop.hbase.client.HTable;importorg.apache.hadoop.hbase.client.Put;importorg.apache.hadoop.hbase.util.Bytes;importjava.io.IOException;importjava.util.ArrayList;importjava.util.List;publicclassPutDatas{publicstaticvoidmain(String[]args)throwsIOException{Configurationconf=newHBaseConfiguration();conf.set("hbase.zookeeper.quorum","master");HTablehTable=newHTable(conf,"jscy_users");//插入一條Putput=newPut(Bytes.toBytes("row1"));put.add(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("1"));put.add(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("zjhw"));put.add(Bytes.toBytes("f"),Bytes.toBytes("age"),Bytes.toBytes(27));put.add(Bytes.toBytes("f"),Bytes.toBytes("phone"),Bytes.toBytes());

第6步:向表中插入數(shù)據(jù)25.5.2編寫HBaseJavaAPI程序并執(zhí)行

put.add(Bytes.toBytes("f"),Bytes.toBytes("emil"),Bytes.toBytes("123654@"));hTable.put(put);//插入多條Putput1=newPut(Bytes.toBytes("row2"));put1.add(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("2"));put1.add(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("zhehua"));Putput2=newPut(Bytes.toBytes("row3"));put2.add(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("3"));put2.add(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("zhejiang"));Putput3=newPut(Bytes.toBytes("row4"));put3.add(Bytes.toBytes("f"),Bytes.toBytes("id"),Bytes.toBytes("4"));put3.add(Bytes.toBytes("f"),Bytes.toBytes("name"),Bytes.toBytes("bigdata"));List<Put>list=ne

溫馨提示

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

評論

0/150

提交評論