




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
過濾器的基本使用第6章學習目標1.了解Hbase中內置過濾器2.了解布隆過濾器的原理HBaseContents目錄過濾器介紹1常見過濾器使用2布隆過濾器36.1
過濾器介紹HBase的基本API,包括增、刪、改、查等。增、刪都是相對簡單的操作,與傳統數據庫相比,這里的查詢操作略顯蒼白,只能根據指定行鍵進行查詢(Get)或者根據行鍵的范圍來查詢(Scan)。HBase不僅提供了這些簡單的查詢,而且提供了更加高級的過濾器(Filter)來查詢。6.1過濾器介紹常見過濾器介紹列值過濾器(valueFilter)根據條件進行全表掃描(每一個cell)。邏輯可能不符合查詢需求。單列值過濾器(SingleColumnValueFilter)系統設置好的列值專用過濾器,可以指定一個列進行數據過濾。行鍵過濾器(RowFilter)針對RowKey進行過濾,效率較高。行鍵前綴過濾器(PrefixFilter)系統設置好的行鍵專用過濾器,可以對RowKey進行模糊匹配。效率最高,使用廣泛。列值過濾器
//創建二進制比較器,用于過濾器實現過濾規則使用
BinaryComparatorbinaryComparator=newBinaryComparator("23".getBytes());//列值過濾器,GREATER(大于):比較邏輯,過濾出大于23的數據
ValueFiltervalueFilter=newValueFilter(CompareFilter.CompareOp.GREATER,binaryComparator);//對掃描結果使用過濾器
printRSWithFilter(valueFilter);6.2常見過濾器使用6.2常見過濾器使用只要是一行的某個cell滿足條件,這一行就會被過濾出來所以結果可能未必是需要的,使用場景比較少單列值過濾器//指定info列族中的的age列,過濾出大于23的數據SingleColumnValueFiltersingleColumnValueFilter=newSingleColumnValueFilter("info".getBytes(),"age".getBytes(),CompareFilter.CompareOp.GREATER,"23".getBytes());printRSWithFilter(singleColumnValueFilter);6.2常見過濾器使用6.2常見過濾器使用針對age這一列進行過濾可以得到正確的結果行鍵過濾器//創建二進制比較器,用于過濾器實現過濾規則使用BinaryPrefixComparatorbinaryPrefixComparator =newBinaryPrefixComparator("1500100880".getBytes());//過濾出RowKey中,值大于“1500100880”的數據RowFilterrowFilter =newRowFilter(CompareFilter.CompareOp.GREATER,binaryPrefixComparator);printRSWithFilter(rowFilter);6.2常見過濾器使用6.2常見過濾器使用針對rowkey進行過濾效率比對列過濾要高行鍵前綴過濾器//模糊匹配,過濾出以150010088作為起始RowKey的信息PrefixFilterprefixFilter=newPrefixFilter("150010088".getBytes());printRSWithFilter(prefixFilter);6.2常見過濾器使用6.2常見過濾器使用針對rowkey進行前綴過濾,只能針對前綴進處理,不能做到比較大小等操作,使用范圍比行鍵過濾器小一些但是效率最高組合使用過濾器//過濾出gender為男,age>23,理科班的學生
//第一個過濾器,過濾gande為男SingleColumnValueFilterfilter1=newSingleColumnValueFilter("info".getBytes(),"gender".getBytes(),CompareFilter.CompareOp.EQUAL,"男".getBytes());//第二個過濾器,過濾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常見過濾器使用組合后,可以靈活的針對多列進行過濾6.3布隆過濾器
BloomFilter(布隆過濾器)是1970年由布隆提出的。它實際上是一個很長的二進制向量和一系列隨機映射函數。布隆過濾器可以用于檢索一個元素是否在一個集合中,他可以準確判斷出這個元素是否一定不在該集合中。它的優點是空間效率和查詢時間都遠遠超過一般的算法,缺點是有一定的誤識別率和刪除困難。我們拿個HBase中應用的例子來說下,我們已經知道rowKey存放在哪個region中,為了判斷哪個Hfile里面有需要的rowkey,我們就可以通過BloomFilter快速判斷,從而過濾掉大部分的HFile,減少需要掃描的Block。6.3布隆過濾器在此簡單地介紹一下BloomFilter的工作原理,BloomFilter使用位數組來實現過濾,初始狀態下位數組每一位都為0(false),如下圖所示:6.3布隆過濾器假如此時有一個集合S={x,y,…},BloomFilter使用n個獨立的hash函數,分別將集合中的每一個元素映射到{1,…,m}的范圍。對于任何一個元素,被映射到的數字作為對應的位數組的索引,該位會被置為1(true)。下圖中集合S有兩個元素x和y,分別被3個hash函數進行映射,映射到的位置分別為(0,3,6)和(4,7,10),對應的位會被置為1(true):6.3布隆過濾器現在假如要判斷另一個元素是否是在此集合中,只需要被這3個hash函數進行映射,查看對應的位置是否有0(false)存在,如果有的話,表示此元素肯定不存在于這個集合,否則有可能存在。下圖所示就表示z肯定不在集合{x,y}中:布隆過濾器的代碼簡單實現(部分重要代碼,完整代碼在試驗手冊)privateintsize;//大小(位數組長度),數組越長占用越多,越準確
privateBitSetbitSet;//生成二進位數組
privateinthashFunctions;//哈希函數個數,多次計算hash值,可以提高準確率
//添加元素
publicvoidadd(Stringelement){//根據哈希函數個數循環多次計算
for(inti=0;i<hashFunctions;i++){//帶上次數計算hash值
inthash=hash(element,i);//將二進制位數組的值改為truebitSet.set(hash,true);}}6.3布隆過濾器//哈希函數
privateinthash(Stringelement,intseed){inthash=0;//加上次數計算哈希值
for(inti=0;i<element.length();i++){hash=seed*hash+element.charAt(i);}returnMath.abs(hash)%size;}6.3布隆過濾器//查詢元素是否可能存在于集合中
publicStringcontains(Stringelement){for(inti=0;i<hashFunctions;i++){//帶上計算hash值
inthash=hash(element,i);//如果匹配失敗,位數據對不上,說明不在
if(!bitSet.get(hash)){return"數"+element+"據不在此處";}}//否則就是可能存在
return"數據"+element+"可能在此處";}
//初始化布隆過濾器
simpleBloomFilterbloomFilter=newsimpleBloomFilter(8,3);//插入幾條數據
bloomFilter.add("apple");bloomFilter.add("orange");bloomFilter.add("banana");bloomFilter.add("grape");//打印結果
System.out.println(bloomFilter.contains("apple"));//可能在此處
System.out.println(bloomFilter.c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 蘇州百年職業學院《R語言程序設計》2023-2024學年第二學期期末試卷
- 內蒙古阿拉善盟2025年高三第二次高考科目質檢物理試題含解析
- 新星職業技術學院《皮膚性病學》2023-2024學年第二學期期末試卷
- 山東省青島市平度實驗2025屆初三下第一次段考語文試題含解析
- 惠州衛生職業技術學院《頜面部疾病》2023-2024學年第二學期期末試卷
- 通遼職業學院《新媒體產品設計》2023-2024學年第二學期期末試卷
- 遼寧科技學院《馬克思主義經典著作選讀》2023-2024學年第一學期期末試卷
- 湖北民族大學《貨物多式聯運》2023-2024學年第一學期期末試卷
- 武漢市漢南區2025屆三年級數學第二學期期末學業質量監測模擬試題含解析
- 四川省瀘州市天立國際學校2025屆高三調研測試(二)生物試題含解析
- 網絡安全前沿技術與未來趨勢研究
- 遼寧省沈陽市鐵西區2024屆英語三年級第二學期期中調研試題含答案
- 拼多多商業模式畫布
- 道路新建、改造工程招投標書范本
- 健康飲茶知識講座
- 醫療期協議書
- 《價值流分析》課件
- 急診科的孕產婦高危與急癥處理
- 《聲樂演唱》課程標準
- 酒店公司章程范本
- 供應鏈優化與協同計劃書
評論
0/150
提交評論