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

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

轉:http://zjushch.iteye.com/blog/1530143

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); //通

Python裝飾器(Decorator)的理解與進階

python decorator 裝飾器 有時候我們項目中的某些功能做些修改即需要對內部的某些函數添加一些附加功能,但是為了安全起見不想改變函數的源代碼以及函數的調用方式,那麽裝飾器在這個地方會給我們帶來很大的幫助。 裝飾器(Decorator):(又叫語法糖) 定義:本質是函數,功能(裝

自己golang各個文件的理解

mode bsp 關於 信息 outer model option 其他 都是 models -》 裏面寫關於數據庫方面數據controllers -》邏輯,請求方法等conf -》註冊數據庫信息routers -》初始化路由線路views -》測試界面 實際

SpringIOC和AOP的理解

ted program 條件 ogr class spring配置 所有 com 語法 IOC:控制反轉也叫依賴註入。利用了工廠模式。  為了方便理解,分解成每條以便記憶。 1.將對象交給容器管理,你只需要在spring配置文件總配置相應的bean,以及設置相關的屬性,讓

springxml配置的初步理解,併成功注入(spring jar包版本號一定要同一)

//.java package com.learning.ioc.interfaces; public interface OneInterface { public void say(String arg); } package com.learning.ioc.int

tensorflow張量tensor的理解與tf.argmax()函式的用法

對tensorflow中張量tensor的理解: 一維張量: 如a=[1., 2., 3., 0., 9., ],其shape為(5,),故當我們選擇維度0時(張量的維度總是從第0個維度開始),實際上是在a的最外層括號上進行操作。 我們畫圖來表示: 二維張量: 如b=[

Phoenix開啟Hbase的namespace的支援

1. 開啟schema與namespace的對應關係 如果使用了hbase中的自定義namespace,不僅僅使用default,那麼在phoenix中與之對應的是schema的概念,但是預設並沒有開啟

js回撥函式的理解

一、什麼是回撥函式 一直接觸回撥函式這個名詞,但是不知道具體是幹什麼的,今天在百度上看到了一句話讓對回撥函式產生了一點興趣,那就是回撥函式的英文解釋: A callback is a function that is passed as an argument to an

Javaextends和implements的理解

第一點: extends 是繼承另一個類,而且是但繼承。 implements是實現一個介面,但是可以同時實現多個介面。 第二點: extends繼承另一個類,那個被整合的類可以使抽象類,也可以不是抽象類。如果是抽象類並且擁有抽象方法,那麼子類中必須重寫所有的抽象方法,選擇性的重

Javavolatile修飾符的理解

由於CPU的執行速度要高於記憶體讀取資料的速度,所以將需要運算的資料複製一份到CPU的快取記憶體中,也就是給當前執行執行緒的執行記憶體中放入副本。運算結束後再將高速緩衝中的資料重新整理到主存中。 引出問題 在併發環境下,資料運算之後重新整理到主存的時間是不確定的,所以會導致其

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

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

關於Java回撥函式的理解

先來看幾段程式: 1.  首先定義一個類Caller,這個類裡面儲存一個介面引用。        public class Caller {     private MyCallInter

hbaseregion分裂設定

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

一些static與extern的用法理解

static為靜態變數,初始化語句僅執行一次,不初始化則預設為0,因為靜態記憶體(堆)中所有位元組位(不知道術語是啥,反正大概就是一個位元組裡儲存的內容的意思吧)預設為0000 0000,宣告的靜態變數會在堆中開闢相應的記憶體,靜態變數與棧中的動態變數所不同的是,靜態變數不會

java面向物件思想的理解

        java是一門純粹的面向物件的語言。面向物件這種程式設計模式它將現實世界中的一切事物都看作是物件,例如,一個人是一個物件,汽車、飛機、小鳥等等,都是物件;它強調從物件出發,以物件為中心用人類的思維方式來認識和思考問題。每個物件都具有各自的狀態特徵(也可以稱為

ElasticsearchHbase的資料建索引實現海量資料快速查詢

一、將專案匯入myeclipse中方法1:將下載好的檔案(是解壓es_hbase6資料夾而不是Test-master)解壓到你myeclipse的Workspaces目錄中,然後在myeclipse中右鍵點選Import匯入專案方法2:將下載好的檔案解壓到你的Windows桌

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

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

C++類和封裝的理解

    封裝是將相對獨立,能夠廣泛使用的程式功能提煉出來,編寫成函式或類等形式的可重用程式碼。可重用的程式碼的特點是“一次開發,長期使用”。C++的封裝的語法格式用一個簡單的例子來看下class Rectangle //長方形類:宣告成員{public:double a,b;