




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
過濾器的基本使用第6章學(xué)習(xí)目標(biāo)1.了解Hbase中內(nèi)置過濾器2.了解布隆過濾器的原理HBaseContents目錄過濾器介紹1常見過濾器使用2布隆過濾器36.1
過濾器介紹HBase的基本API,包括增、刪、改、查等。增、刪都是相對(duì)簡(jiǎn)單的操作,與傳統(tǒng)數(shù)據(jù)庫相比,這里的查詢操作略顯蒼白,只能根據(jù)指定行鍵進(jìn)行查詢(Get)或者根據(jù)行鍵的范圍來查詢(Scan)。HBase不僅提供了這些簡(jiǎn)單的查詢,而且提供了更加高級(jí)的過濾器(Filter)來查詢。6.1過濾器介紹常見過濾器介紹列值過濾器(valueFilter)根據(jù)條件進(jìn)行全表掃描(每一個(gè)cell)。邏輯可能不符合查詢需求。單列值過濾器(SingleColumnValueFilter)系統(tǒng)設(shè)置好的列值專用過濾器,可以指定一個(gè)列進(jìn)行數(shù)據(jù)過濾。行鍵過濾器(RowFilter)針對(duì)RowKey進(jìn)行過濾,效率較高。行鍵前綴過濾器(PrefixFilter)系統(tǒng)設(shè)置好的行鍵專用過濾器,可以對(duì)RowKey進(jìn)行模糊匹配。效率最高,使用廣泛。列值過濾器
//創(chuàng)建二進(jìn)制比較器,用于過濾器實(shí)現(xiàn)過濾規(guī)則使用
BinaryComparatorbinaryComparator=newBinaryComparator("23".getBytes());//列值過濾器,GREATER(大于):比較邏輯,過濾出大于23的數(shù)據(jù)
ValueFiltervalueFilter=newValueFilter(CompareFilter.CompareOp.GREATER,binaryComparator);//對(duì)掃描結(jié)果使用過濾器
printRSWithFilter(valueFilter);6.2常見過濾器使用6.2常見過濾器使用只要是一行的某個(gè)cell滿足條件,這一行就會(huì)被過濾出來所以結(jié)果可能未必是需要的,使用場(chǎng)景比較少單列值過濾器//指定info列族中的的age列,過濾出大于23的數(shù)據(jù)SingleColumnValueFiltersingleColumnValueFilter=newSingleColumnValueFilter("info".getBytes(),"age".getBytes(),CompareFilter.CompareOp.GREATER,"23".getBytes());printRSWithFilter(singleColumnValueFilter);6.2常見過濾器使用6.2常見過濾器使用針對(duì)age這一列進(jìn)行過濾可以得到正確的結(jié)果行鍵過濾器//創(chuàng)建二進(jìn)制比較器,用于過濾器實(shí)現(xiàn)過濾規(guī)則使用BinaryPrefixComparatorbinaryPrefixComparator =newBinaryPrefixComparator("1500100880".getBytes());//過濾出RowKey中,值大于“1500100880”的數(shù)據(jù)RowFilterrowFilter =newRowFilter(CompareFilter.CompareOp.GREATER,binaryPrefixComparator);printRSWithFilter(rowFilter);6.2常見過濾器使用6.2常見過濾器使用針對(duì)rowkey進(jìn)行過濾效率比對(duì)列過濾要高行鍵前綴過濾器//模糊匹配,過濾出以150010088作為起始RowKey的信息PrefixFilterprefixFilter=newPrefixFilter("150010088".getBytes());printRSWithFilter(prefixFilter);6.2常見過濾器使用6.2常見過濾器使用針對(duì)rowkey進(jìn)行前綴過濾,只能針對(duì)前綴進(jìn)處理,不能做到比較大小等操作,使用范圍比行鍵過濾器小一些但是效率最高組合使用過濾器//過濾出gender為男,age>23,理科班的學(xué)生
//第一個(gè)過濾器,過濾gande為男SingleColumnValueFilterfilter1=newSingleColumnValueFilter("info".getBytes(),"gender".getBytes(),CompareFilter.CompareOp.EQUAL,"男".getBytes());//第二個(gè)過濾器,過濾age>23SingleColumnValueFilterfilter2=newSingleColumnValueFilter("info".getBytes(),"age".getBytes(),CompareFilter.CompareOp.GREATER,"23".getBytes());6.2常見過濾器使用//過濾出clazz包含理科的SingleColumnValueFilterfilter3=newSingleColumnValueFilter("info".getBytes(),"clazz".getBytes(),CompareFilter.CompareOp.EQUAL,newBinaryPrefixComparator("理科".getBytes()));//組合過濾器FilterListfilterList=newFilterList();filterList.addFilter(filter1);filterList.addFilter(filter2);filterList.addFilter(filter3);printRSWithFilter(filterList);6.2常見過濾器使用6.2常見過濾器使用組合后,可以靈活的針對(duì)多列進(jìn)行過濾6.3布隆過濾器
BloomFilter(布隆過濾器)是1970年由布隆提出的。它實(shí)際上是一個(gè)很長的二進(jìn)制向量和一系列隨機(jī)映射函數(shù)。布隆過濾器可以用于檢索一個(gè)元素是否在一個(gè)集合中,他可以準(zhǔn)確判斷出這個(gè)元素是否一定不在該集合中。它的優(yōu)點(diǎn)是空間效率和查詢時(shí)間都遠(yuǎn)遠(yuǎn)超過一般的算法,缺點(diǎn)是有一定的誤識(shí)別率和刪除困難。我們拿個(gè)HBase中應(yīng)用的例子來說下,我們已經(jīng)知道rowKey存放在哪個(gè)region中,為了判斷哪個(gè)Hfile里面有需要的rowkey,我們就可以通過BloomFilter快速判斷,從而過濾掉大部分的HFile,減少需要掃描的Block。6.3布隆過濾器在此簡(jiǎn)單地介紹一下BloomFilter的工作原理,BloomFilter使用位數(shù)組來實(shí)現(xiàn)過濾,初始狀態(tài)下位數(shù)組每一位都為0(false),如下圖所示:6.3布隆過濾器假如此時(shí)有一個(gè)集合S={x,y,…},BloomFilter使用n個(gè)獨(dú)立的hash函數(shù),分別將集合中的每一個(gè)元素映射到{1,…,m}的范圍。對(duì)于任何一個(gè)元素,被映射到的數(shù)字作為對(duì)應(yīng)的位數(shù)組的索引,該位會(huì)被置為1(true)。下圖中集合S有兩個(gè)元素x和y,分別被3個(gè)hash函數(shù)進(jìn)行映射,映射到的位置分別為(0,3,6)和(4,7,10),對(duì)應(yīng)的位會(huì)被置為1(true):6.3布隆過濾器現(xiàn)在假如要判斷另一個(gè)元素是否是在此集合中,只需要被這3個(gè)hash函數(shù)進(jìn)行映射,查看對(duì)應(yīng)的位置是否有0(false)存在,如果有的話,表示此元素肯定不存在于這個(gè)集合,否則有可能存在。下圖所示就表示z肯定不在集合{x,y}中:布隆過濾器的代碼簡(jiǎn)單實(shí)現(xiàn)(部分重要代碼,完整代碼在試驗(yàn)手冊(cè))privateintsize;//大?。ㄎ粩?shù)組長度),數(shù)組越長占用越多,越準(zhǔn)確
privateBitSetbitSet;//生成二進(jìn)位數(shù)組
privateinthashFunctions;//哈希函數(shù)個(gè)數(shù),多次計(jì)算hash值,可以提高準(zhǔn)確率
//添加元素
publicvoidadd(Stringelement){//根據(jù)哈希函數(shù)個(gè)數(shù)循環(huán)多次計(jì)算
for(inti=0;i<hashFunctions;i++){//帶上次數(shù)計(jì)算hash值
inthash=hash(element,i);//將二進(jìn)制位數(shù)組的值改為truebitSet.set(hash,true);}}6.3布隆過濾器//哈希函數(shù)
privateinthash(Stringelement,intseed){inthash=0;//加上次數(shù)計(jì)算哈希值
for(inti=0;i<element.length();i++){hash=seed*hash+element.charAt(i);}returnMath.abs(hash)%size;}6.3布隆過濾器//查詢?cè)厥欠窨赡艽嬖谟诩现?/p>
publicStringcontains(Stringelement){for(inti=0;i<hashFunctions;i++){//帶上計(jì)算hash值
inthash=hash(element,i);//如果匹配失敗,位數(shù)據(jù)對(duì)不上,說明不在
if(!bitSet.get(hash)){return"數(shù)"+element+"據(jù)不在此處";}}//否則就是可能存在
return"數(shù)據(jù)"+element+"可能在此處";}
//初始化布隆過濾器
simpleBloomFilterbloomFilter=newsimpleBloomFilter(8,3);//插入幾條數(shù)據(jù)
bloomFilter.add("apple");bloomFilter.add("orange");bloomFilter.add("banana");bloomFilter.add("grape");//打印結(jié)果
System.out.println(bloomFilter.contains("apple"));//可能在此處
System.out.println(bloomFilter.c
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 互聯(lián)網(wǎng)建設(shè)合同范本
- 分期合同范本模板
- 廠子務(wù)工合同范例
- 吊車協(xié)議合同范本
- 廈門合同范例范例
- 制造加工企業(yè)勞動(dòng)合同范例
- 保供煤合同范例
- 出售商用烤箱合同范例
- 沙子承包的合同范本
- 同意賣公司股合同范例
- 《合理調(diào)節(jié)情緒-做自己情緒的主人》班會(huì)課件
- 20222023學(xué)年山西省朔州市朔城區(qū)七年級(jí)(下)期末語文試卷(解析)
- 國家義務(wù)教育質(zhì)量監(jiān)測(cè)心理健康和德育測(cè)試題
- 農(nóng)民橡膠割膠技術(shù)培訓(xùn)方案
- 新編物理基礎(chǔ)學(xué)(下冊(cè))(9-17章)課后習(xí)題(每題都有)詳細(xì)答案
- 絕經(jīng)綜合征(中醫(yī))評(píng)定量表
- 村委會(huì)會(huì)議簽到表
- 中考物理復(fù)習(xí)交流
- 《紅樓夢(mèng)》中的女性群像-賈府的庶女們
- 營養(yǎng)風(fēng)險(xiǎn)篩查(NRS2002)解讀
- 餐飲店巡店表
評(píng)論
0/150
提交評(píng)論