hbase協(xié)處理器概念及知識點總結(jié)_第1頁
hbase協(xié)處理器概念及知識點總結(jié)_第2頁
hbase協(xié)處理器概念及知識點總結(jié)_第3頁
hbase協(xié)處理器概念及知識點總結(jié)_第4頁
hbase協(xié)處理器概念及知識點總結(jié)_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

hbase協(xié)處理器概念及知識點總結(jié)HBase是一種Hadoop數(shù)據(jù)庫,經(jīng)常被描述為一種稀疏的,分布式的,持久化的,多維有序映射,它基于行鍵、列鍵和時間戳建立索引,是一個可以隨機訪問的存儲和檢索數(shù)據(jù)的平臺。HBase不限制存儲的數(shù)據(jù)的種類,允許動態(tài)的、靈活的數(shù)據(jù)模型,不用SQL語言,也不強調(diào)數(shù)據(jù)之間的關(guān)系。HBase被設(shè)計成在一個服務(wù)器集群上運行,可以相應(yīng)地橫向擴展。HBase使用場景和成功案例互聯(lián)網(wǎng)搜索問題:爬蟲收集網(wǎng)頁,存儲到BigTable里,MapReduce計算作業(yè)掃描全表生成搜索索引,從BigTable中查詢搜索結(jié)果,展示給用戶。抓取增量數(shù)據(jù):例如,抓取監(jiān)控指標(biāo),抓取用戶交互數(shù)據(jù),遙測技術(shù),定向投放廣告等內(nèi)容服務(wù)信息交互入門1、API和數(shù)據(jù)操作有關(guān)的HBaseAPI有5個,分別是Get(讀),Put(寫),Delete(刪),Scan(掃描)和Increment(列值遞增)2、操作表首先要創(chuàng)建一個configuration對象Configurationconf=HBaseConfiguration.create();使用eclipse時的話還必須將配置文件添加進來。conf.addResource(newPath(“E:\\share\\hbase-site.xml”));conf.addResource(newPath(“E:\\share\\core-site.xml”));conf.addResource(newPath(“E:\\share\\hdfs-site.xml”));使用連接池創(chuàng)建一張表。HTablePoolpool=newHTablePool(conf,1);HTableInterfaceusersTable=pool.getTable(“users”);3、寫操作用來存儲數(shù)據(jù)的命令是put,往表里存儲數(shù)據(jù),需要創(chuàng)建Put實例。并制定要加入的行Putput=newPut(byte[]row);Put的add方法用來添加數(shù)據(jù),分別設(shè)定列族,限定符以及單元格的指put.add(byte[]family,byte[]qualifier,byte[]value);最后提交命令給表usersTable.put(put);usersTable.close();修改數(shù)據(jù),只需重新提交一次最新的數(shù)據(jù)即可。HBase寫操作的工作機制:HBase每次執(zhí)行寫操作都會寫入兩個地方:預(yù)寫式日志(write-aheadlog,也稱HLog)和MemStore(寫入緩沖區(qū)),以保證數(shù)據(jù)持久化,只有當(dāng)這兩個地方的變化信息都寫入并確認(rèn)后,才認(rèn)為寫動作完成。MemStore是內(nèi)存里的寫入緩沖區(qū),HBase中數(shù)據(jù)在永久寫入硬盤之前在這里累積,當(dāng)MemStore填滿后,其中的數(shù)據(jù)會刷寫到硬盤,生成一個HFile。4、讀操作創(chuàng)建一個Get命令實例,包含要查詢的行Getget=newGet(byte[]row);執(zhí)行addColumn()或addFamily()可以設(shè)置限制條件。將get實例提交到表會返回一個包含數(shù)據(jù)的Result實例,實例中包含行中所有列族的所有列。Resultr=usersTable.get(get);可以對result實例檢索特定的值byte[]b=r.getValue(byte[]family,byte[]qualifier);工作機制:BlockCache用來保存從HFile中讀入內(nèi)存的頻繁訪問的數(shù)據(jù),避免硬盤讀,每個列族都有自己的BlockCache。從HBase中讀出一行,首先會檢查MemStore等待修改的隊列,然后檢查BlockCache看包含該行的Block是否最近被訪問過,最后訪問硬盤上的對應(yīng)HFile。5、刪除操作創(chuàng)建一個Delete實例,指定要刪除的行。Deletedelete=newDelete(byte[]row);可以通過deleteFamily()和deleteColumn()方法指定刪除行的一部分。6表掃描操作Scanscan=newScan()可以指定起始行和結(jié)束行。setStartRow(),setStopRow(),setFilter()方法可以用來限制返回的數(shù)據(jù)。addColumn()和addFamily()方法還可以指定列和列族。HBase模式的數(shù)據(jù)模型包括:表:HBase用表來組織數(shù)據(jù)。行:在表里,數(shù)據(jù)按行存儲,行由行鍵唯一標(biāo)識。行鍵沒有數(shù)據(jù)類型,為字節(jié)數(shù)組byte[]。列族:行里的數(shù)據(jù)按照列族分組,列族必須事先定義并且不輕易修改。表中每行擁有相同的列族。列限定符:列族里的數(shù)據(jù)通過列限定符或列來定位,列限定符不必事先定義。單元:存儲在單元里的數(shù)據(jù)稱為單元值,值是字節(jié)數(shù)組。單元由行鍵,列族或列限定符一起確定。時間版本:單元值有時間版本,是一個long類型。一個HBase數(shù)據(jù)坐標(biāo)的例子:HBase可以看做是一個鍵值數(shù)據(jù)庫。HBase的設(shè)計是面向半結(jié)構(gòu)化數(shù)據(jù)的,數(shù)據(jù)記錄可能包含不一致的列,不確定大小等。三、分布式的HBase、HDFS和MapReduce1、分布式模式的HBaseHBase將表會切分成小的數(shù)據(jù)單位叫region,分配到多臺服務(wù)器。托管region的服務(wù)器叫做RegionServer。一般情況下,RgionServer和HDFSDataNode并列配置在同一物理硬件上,RegionServer本質(zhì)上是HDFS客戶端,在上面存儲訪問數(shù)據(jù),HMaster分配region給RegionServer,每個RegionServer托管多個region。HBase中的兩個特殊的表,-ROOT-和.META.,用來查找各種表的region位置在哪。-ROOT-指向.META.表的region,.META.表指向托管待查找的region的RegionServer。一次客戶端查找過程的3層分布式B+樹如下圖:HBase頂層結(jié)構(gòu)圖:zookeeper負責(zé)跟蹤region服務(wù)器,保存rootregion的地址。Client負責(zé)與zookeeper子集群以及HRegionServer聯(lián)系。HMaster負責(zé)在啟動HBase時,把所有的region分配到每個HRegionServer上,也包括-ROOT-和.META.表。HRegionServer負責(zé)打開region,并創(chuàng)建對應(yīng)的HRegion實例。HRegion被打開后,它為每個表的HColumnFamily創(chuàng)建一個Store實例。每個Store實例包含一個或多個StoreFile實例,它們是實際數(shù)據(jù)存儲文件HFile的輕量級封裝。每個Store有其對應(yīng)的一個MemStore,一個HRegionServer共享一個HLog實例。一次基本的流程:a、客戶端通過zookeeper獲取含有-ROOT-的region服務(wù)器名。b、通過含有-ROOT-的region服務(wù)器查詢含有.META.表中對應(yīng)的region服務(wù)器名。c、查詢.META.服務(wù)器獲取客戶端查詢的行鍵數(shù)據(jù)所在的region服務(wù)器名。d、通過行鍵數(shù)據(jù)所在的region服務(wù)器獲取數(shù)據(jù)。HFile結(jié)構(gòu)圖:Trailer有指向其他塊的指針,Index塊記錄Data和Meta塊的偏移量,Data和Meta塊存儲數(shù)據(jù)。默認(rèn)大小是64KB。每個塊包含一個Magic頭部和一定數(shù)量的序列化的KeyValue實例。KeyValue格式:該結(jié)構(gòu)以兩個分別表示鍵長度和值長度的定長數(shù)字開始,鍵包含了行鍵,列族名和列限定符,時間戳等。預(yù)寫日志W(wǎng)AL:每次更新都會寫入日志,只有寫入成功才會通知客戶端操作成功,然后服務(wù)器可以按需自由地批量處理或聚合內(nèi)存中的數(shù)據(jù)。編輯流在memstore和WAL之間分流的過程:處理過程:客戶端通過RPC調(diào)用將KeyValue對象實例發(fā)送到含有匹配region的HRegionServer。接著這些實例被發(fā)送到管理相應(yīng)行的HRegion實例,數(shù)據(jù)被寫入到WAL,然后被放入到實際擁有記錄的存儲文件的MemStore中。當(dāng)memstore中的數(shù)據(jù)達到一定的大小以后,數(shù)據(jù)會異步地連續(xù)寫入到文件系統(tǒng)中,WAL能保證這一過程的數(shù)據(jù)不會丟失。1、為什么引入?yún)f(xié)處理器?在舊版(0.92HBase版本之前)的HBase中是沒有引入?yún)f(xié)處理器的概念的。這樣存在的問題是:創(chuàng)建二級索引較難,很難進行簡單的排序、求和、計數(shù)等操作。這里是指在該版本限制下難以進行上述操作,不是不行。為了降低難度,提出了協(xié)處理器的概念。這里補充索引相關(guān)的知識點:索引的概念:i)明確是針對數(shù)據(jù)庫而言的,體現(xiàn)是一張表或者一種數(shù)據(jù)結(jié)構(gòu),一列或者多列,目的是用來快速訪問數(shù)據(jù)庫中的信息。包含的內(nèi)容是:鍵的屬性值和存儲文件位置信息的指針。ii)主索引:主索引是包含兩個定長字段的有序文件。字段1:主鍵;字段2:磁盤塊的指針。這兩個字段的值是索引項的值。ii)二級索引二級索引的概念:“二級索引也是有兩個字段的有序文件:第一個字段是索引字段,有相同的數(shù)據(jù)類型,并且是數(shù)據(jù)文件中的非排序字段,第二個字段可以是一個塊指針也可以是記錄指針。二級索引(也稱為非聚簇索引)用于在二級鍵上搜索文件,二級索引的搜索鍵指定了一個順序,這個順序與文件的排序順序不同?!?、協(xié)處理器的特性是什么?允許用戶執(zhí)行region級的操作,使用類似觸發(fā)器的功能允許擴展現(xiàn)有的RPC協(xié)議引入自己的調(diào)用提供一個非常靈活的、可用于建立分布式服務(wù)的數(shù)據(jù)模型能夠自動化擴展、負載均衡、應(yīng)用請求路由3.協(xié)處理器的使用場景:維護輔助索引;維護數(shù)據(jù)間的應(yīng)用完整性。4.協(xié)處理器框架提供了兩大類Observer、endPoint(以下是參考HBase權(quán)威指南第三版)通過繼承這兩大類來擴展自己的功能。1)Observer(觀察者)該類是與RDMS中的觸發(fā)器類似?;卣{(diào)函數(shù)在一些特定的事件發(fā)生時被調(diào)用。事件包括:用戶產(chǎn)生的事件或者服務(wù)端內(nèi)部產(chǎn)生的事件。協(xié)處理器框架提供的接口如下:a、RegionObserver:用戶可以通過這種處理器來處理數(shù)據(jù)修改事件,它們與表的Region緊密關(guān)聯(lián)。region級的操作。對應(yīng)的操作是:put/delete/scan/getb、MasterObserver:可以用作管理或DDL類型的操作,是集群級的操作。對應(yīng)的操作是:創(chuàng)建、刪除、修改表。c、WALObserver:提供控制WAL的鉤子函數(shù)。Observer定義好鉤子函數(shù),服務(wù)端可以調(diào)用。2)endPoint該類的功能類似RDMS中的存儲過程。將用戶的自定義操作添加到服務(wù)器端,endPoint可以通過添加遠程過程調(diào)用來擴展RPC協(xié)議。用戶可以將自定義完成某項操作代碼部署到服務(wù)器端。例如:服務(wù)器端的計算操作。當(dāng)二者結(jié)合使用可以決定服務(wù)器端的狀態(tài)。5、Coprocessor類所有的協(xié)處理器都必須實現(xiàn)給接口,該接口定義了協(xié)處理器的基本約定和易于框架管理,并且定義協(xié)處理器的執(zhí)行的優(yōu)先級別。1)協(xié)處理器的執(zhí)行順序Coprocessor.Priority枚舉類型定義了兩個值:SYSTEM、USER。前者優(yōu)于后者執(zhí)行,后者定義的按順序執(zhí)行。2)協(xié)處理器的生命周期協(xié)處理器的生命周期是由框架管理的,接口定義兩個方法start、stop。這兩個方法的參數(shù)是:CoprocessorEnvironment。該類提供了訪問HBase的版本、Coprocessor版本、協(xié)處理器優(yōu)先級等方法。start/stop方法是被隱式調(diào)用的,且關(guān)于協(xié)處理器的狀態(tài)的定義是有一個枚舉類Coprocessor.State對應(yīng)的。3)協(xié)處理器環(huán)境和實例的維護CoprocessorHost類來完成,其有相應(yīng)的子類來完成維護region、master協(xié)處理器的實例和環(huán)境??偨Y(jié):Coprocessor、CoprocessorEnvironment、CoprocessorHost是三個類,在該三個類的基礎(chǔ)上進行擴展功能,完成支持、管理、維護協(xié)處理器。6、協(xié)處理器的加載/部署在加載處理器的方式上有兩種方式:1.通過配置文件靜態(tài)加載2.在集群運行時動態(tài)加載(在權(quán)威指南第三版中指出尚未有動態(tài)加載的API)。1)對于靜態(tài)加載的方式在HBase權(quán)威指南中P171頁指出,在此不再贅述,是搬磚的苦力活。其中需要強調(diào)的是書中“配置文件中配置項的順序非常重要,這個順序決定了執(zhí)行順序”2)特定表加載處理器是歸屬于靜態(tài)加載的方式對于特定表的協(xié)處理器加載是通過表描述符。所以該處理器的加載只針對該表的region,同時被服務(wù)端的region和regionserver調(diào)用,不能被master或WAL調(diào)用。在HBase權(quán)威指南的P173給出示例。7、RegionObserver類該類的描述:1.RegionObserver類是Observer類的子類2.明確是在響應(yīng)region級別的操作。當(dāng)region事件發(fā)生時,其定義的鉤子函數(shù)被調(diào)用。該級別的操作可以分為兩類:region生命周期變化或客戶端API調(diào)用。1)處理region生命周期事件這里的生命周期事件體現(xiàn)的是region的狀態(tài)變化,而觸發(fā)器處理的時間發(fā)生在是狀態(tài)變化的前、后。下面是不同的狀態(tài)的前后可以定義的協(xié)處理器(這里的協(xié)處理器就是指可以進行的操作):狀態(tài)1:pendingOpen,region將要被打開的狀態(tài)。協(xié)處理器以實現(xiàn)的方法是:preOpen()/postOpen()。完成功能是:搭載或者阻止這次打開過程。preWALRestore()/postWALRestore.完成的功能是:用戶可以訪問那些記錄被修改了,監(jiān)督那些記錄被實施了。狀態(tài)2:open,這個狀態(tài)的標(biāo)志是:region被部署到一個regionserver上且正常工作時。協(xié)處理器可以實現(xiàn)的方法是:voidpreFlush()/voidpostFlush()內(nèi)存被持久到磁盤voidpreSpilt()/voidpostSpilt()region達到足夠大時進行拆分狀態(tài)3:pendingClose。region將要被關(guān)閉時的狀態(tài)。協(xié)處理器可以實現(xiàn)的方法是:voidpreClose()/voidpostClose()2)處理客戶端API事件這里是指在調(diào)用JavaAPI時,響應(yīng)的事件。如:voidprePut()/voidpostPut、voidpreDelete()/postDelete()、voidpreGet()/voidpostGet()。。。。。。。。3)RegionCoprocessorEnvironment類實現(xiàn)RegionObserver類的協(xié)處理器環(huán)境類是基于RegionCoprocessorEnvironment類的,通過該類可以訪問管理Region實例和共享RegionServerService實例4)ObserverContextRegionObserv

溫馨提示

  • 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

提交評論