1. 程式人生 > >HBase中Bloomfilter型別的設定及使用的理解

HBase中Bloomfilter型別的設定及使用的理解

1.Bloomfilter的原理?
可參考 http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html

2.Bloomfilter在HBase中的作用?
HBase利用Bloomfilter來提高隨機讀(Get)的效能,對於順序讀(Scan)而言,設定Bloomfilter是沒有作用的(0.92以後,如果設定了bloomfilter為ROWCOL,對於指定了qualifier的Scan有一定的優化,但不是那種直接過濾檔案,排除在查詢範圍的形式) 

3.Bloomfilter在HBase中的開銷?
Bloomfilter是一個列族(cf)級別的配置屬性,如果你在表中設定了Bloomfilter,那麼HBase會在生成StoreFile時包含一份bloomfilter結構的資料,稱其為MetaBlock;MetaBlock與DataBlock(真實的KeyValue資料)一起由LRUBlockCache維護。所以,開啟bloomfilter會有一定的儲存及記憶體cache開銷。 


4.Bloomfilter如何提高隨機讀(Get)的效能?
對於某個region的隨機讀,HBase會遍歷讀memstore及storefile(按照一定的順序),將結果合併返回給客戶端。如果你設定了bloomfilter,那麼在遍歷讀storefile時,就可以利用bloomfilter,忽略某些storefile。 

5.HBase中的Bloomfilter的型別及使用?

a)ROW, 根據KeyValue中的row來過濾storefile 
舉例:假設有2個storefile檔案sf1和sf2, 
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v) 
sf2包含kv3(r3 cf:q1 v)、kv4(r4 cf:q1 v) 

如果設定了CF屬性中的bloomfilter為ROW,那麼get(r1)時就會過濾sf2,get(r3)就會過濾sf1 

b)ROWCOL,根據KeyValue中的row+qualifier來過濾storefile 
舉例:假設有2個storefile檔案sf1和sf2, 
sf1包含kv1(r1 cf:q1 v)、kv2(r2 cf:q1 v) 
sf2包含kv3(r1 cf:q2 v)、kv4(r2 cf:q2 v) 
如果設定了CF屬性中的bloomfilter為ROW,無論get(r1,q1)還是get(r1,q2),都會讀取sf1+sf2;而如果設定了CF屬性中的bloomfilter為ROWCOL,那麼get(r1,q1)就會過濾sf2,get(r1,q2)就會過濾sf1 


6.ROWCOL一定比ROW效果好麼?
不一定 

a)ROWCOL只對指定列(Qualifier)的隨機讀(Get)有效,如果應用中的隨機讀get,只含row,而沒有指定讀哪個qualifier,那麼設定ROWCOL是沒有效果的,這種場景就應該使用ROW 

b)如果隨機讀中指定的列(Qualifier)的數目大於等於2,在0.90版本中ROWCOL是無效的,而在0.92版本以後,HBASE-2794對這一情景作了優化,是有效的(通過KeyValueScanner#seekExactly) 

c)如果同一row多個列的資料在應用上是同一時間put的,那麼ROW與ROWCOL的效果近似相同,而ROWCOL只對指定了列的隨機讀才會有效,所以設定為ROW更佳 

7.ROWCOL與ROW只在名稱上有聯絡,ROWCOL並不是ROW的擴充套件,不能取代ROW 

8.region下的storefile數目越多,bloomfilter的效果越好 

9.region下的storefile數目越少,HBase讀效能越好

相關推薦

HBaseBloomfilter型別設定使用的理解

轉:http://zjushch.iteye.com/blog/1530143 1.Bloomfilter的原理? 可參考 http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html2

HBaseBloomfilter型別設定使用的理解

1.Bloomfilter的原理?可參考 http://hi.baidu.com/yizhizaitaobi/blog/item/cc1290a0a0cd69974610646f.html2.Bloomfilter在HBase中的作用?HBase利用Bloomfilter來提

android 獲取系統各種型別音量對音量設定

通過程式獲取android系統手機的鈴聲和音量。同樣,設定鈴聲和音量的方法也很簡單!    1. AudioManager mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); //通

HBase的Compact引數設定資料讀寫流程剖析-OLAP商業環境實戰

1 HBase Compact 功能剖析 Compaction會從一個region的一個store中選擇一些hfile檔案進行合併。合併說來原理很簡單,先從這些待合併的資料檔案中讀出KeyValues,

hbaseregion分裂設定

在hbase-0.96.0中,預設狀態下,region分裂策略是IncreasingToUpperBoundRegionSplitPolicy,即根據table的region個數的平方乘以memstore flush size的大小,比如memstore size 預設是

C++:檔案讀寫設定理解(open函式的相關屬性設定

在看C++程式設計思想中,每個練習基本都是使用ofstream,ifstream,fstream,以前粗略知道其用法和含義,在看了幾位大牛的博文後,進行整理和總結: 這裡主要是討論fstream的內容: #include <fstream>ofs

U-BootMAC地址設定往核心傳遞

一、核心引數的傳遞 U-Boot向Linux驅動傳遞引數的方式有兩種,一為在系統啟動的時候由bootloader傳入,還有一種是將驅動編譯成模組,將引數作為模組載入的引數傳入。 核心通過setup介面接受Bootloader傳入的引數。方式如下: st

cocos2d-x錨點設定定位方式

說 在 前面: 以下 是 基於 cocos2d-2.0-x-2.0.3 作 的 總結 在cocos2d示例程式碼HelloCpp中,為什麼要將CCMenu設定位置到CCPointZero,即使CCMenu的錨點是在(0.5, 0.5)? 這是因為CCMenu沒有使

深入理解C++public、protectedprivate用法

strong ostream pro index nbsp contain table bsp 新的 深入理解C++中public、protected及private用法 投稿:shichen2014 字體:[增加 減小] 類型:轉載 時間:2014-08-23 我要評論

python的的各型別變數作為引數的特點

概念: 所有的變數都可以理解為記憶體中的一個物件的“引用”。型別是屬於物件的,而不是變數。而物件有兩種,“可更改”與“不可更改”物件。在python中,strings,tuples和numbers是不可更改的物件,而list,dict,set等則屬於可以修改的物件。 下面來看下例子(numb

設定EntityFrameworkdecimal型別資料精度問題(EF預設將只會保留到2為精度)

原文:設定EntityFramework中decimal型別資料精度 EF中預設的decimal資料精度為兩位數,當我們資料庫設定的精度大於2時,EF將只會保留到2為精度。 e.g. 2.19990將會被儲存為2.20 1.解決方案一是網上找到常見的方法為重寫DbContext的OnMode

【小家Java】深入理解Java列舉型別(enum)7種常見的用法(含EnumMap和EnumSet)

相關閱讀 【小家java】java5新特性(簡述十大新特性) 重要一躍 【小家java】java6新特性(簡述十大新特性) 雞肋升級 【小家java】java7新特性(簡述八大新特性) 不溫不火 【小家java】java8新特性(簡述十大新特性) 飽受讚譽 【小家java】java9

【Redis】手把手教你Windowsredis的下載,安裝,設定啟動

文章目錄 1、系統環境 2、Redis下載 3、Redis在Windows中安裝 4、Redis啟動 5、環境變數設定

Oracel資料庫檢視與同義詞的理解應用場景

轉載至: https://blog.csdn.net/u012411219/article/details/51321162 1. 資料庫物件之【檢視】簡單介紹    1.1 What:什麼叫檢視?          

電腦共享設定出現的問題解決方法

關於“網路上的芳鄰”裡的主機無法開啟的解決方法     當你開啟“網路上的芳鄰”到“檢視工作組計算機”再到訪問“某一主機”失敗而出現錯誤提示框時,只要你對照你的錯誤提示框,就可能在下文中找到解決問題的辦法。 1.錯誤提示框為:網路不存在或尚未啟動。

機器學習各種熵的定義理解

機器學習領域有一個十分有魅力的詞:熵。然而究竟什麼是熵,相信多數人都能說出一二,但又不能清晰的表達出來。 而筆者對熵的理解是:“拒絕學習、拒絕提升的人是沒有未來的,也只有努力才能變成自己想成為的人”。 下圖是對熵的一個簡單描述: 熵可以理解為是一種對無序狀態的度量方式。那麼熵又是如何被用在機器學習中

golang型別型別轉換指南

在這篇文章中,我們將研究golang中使用的不同資料型別,以及如何在不同資料型別間進行轉換。在我們研究型別轉換的不同方法之前,讓我們先來討論一下golang中一些最常用的資料型別。 golang中的資料型別 下面是您將在golang中使用到的幾種資料型別: 布林(bool

一對一聊天系統登入頁面程式碼設定相關介面

今天我們來講一下一對一聊天系統中關於手機號碼登入及三方登入的程式碼解決方案,從介面到介面。 一、登入介面 1v1demo的登入,首先要從介面說起(請看下圖)。 1、先用RelativeLayout包裹整個介面 2、接著用上兩個ImagView 3、一個載入底部gif另一個放置帶logo的透明

js兩種定時器的設定清除

1、JS中的定時器有兩種: window.setTimeout([function],[interval]) 設定一個定時器,並且設定了一個等待的時間[interval],當到達時間後,執行對應的方法[function],當方法執行完成定時器停止(但是定時器還在,只不過沒用了

前端——設定列表不同型別的列表標記

列表分為兩種:有序列表和無序列表。這兩種列表的列表標記也不一樣。它們的列表標記可以用list-style-type來設定。有序列表常用的有decimal、lower-roman、higher-roman等;無序列表常用的有disco、square、circle等。 1、有序