這篇文章將為大家詳細(xì)講解有關(guān)HBase有哪些特性,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
創(chuàng)新互聯(lián)公司始終堅持【策劃先行,效果至上】的經(jīng)營理念,通過多達(dá)10多年累計超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的營銷解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:汽車玻璃修復(fù)等企業(yè),備受客戶贊許。
1
可配置的數(shù)據(jù)塊大小
HFile數(shù)據(jù)塊大小可以在列族層次設(shè)置。這個數(shù)據(jù)塊不同于之前談到的HDFS數(shù)據(jù)塊。其默認(rèn)值是
65,536字節(jié),或64KB。數(shù)據(jù)塊索引存儲每個HFile數(shù)據(jù)塊的起始鍵。數(shù)據(jù)塊大小設(shè)置影響到數(shù)據(jù)塊索引的大小。數(shù)據(jù)塊越小,索引越大,從而占用更大內(nèi)存空間。同時因為加載進(jìn)內(nèi)存的數(shù)據(jù)塊更小,隨機(jī)查找性能更好。但是如果你需要更好的序列掃描性能,那么一次能夠加載更多HFile數(shù)據(jù)進(jìn)入內(nèi)存則更為合理,這意味著數(shù)據(jù)塊應(yīng)該設(shè)置為更大的值。相應(yīng)地索引變小,你將在隨機(jī)讀性能上付出代價。
你可以在表實例化時設(shè)置數(shù)據(jù)塊大小,如下所示:
hbase(main):002:0>
create 'mytable',
{NAME => 'colfam1', BLOCKSIZE => '65536'}
2 數(shù)據(jù)塊緩存
把數(shù)據(jù)放進(jìn)讀緩存,但工作負(fù)載卻經(jīng)常不能從中獲得性能提升——例如,如果一張表或表里的列族只被順序化掃描訪問或者很少被訪問,你不會介意Get或Scan花費(fèi)時間是否有點兒長。在這種情況下,你可以選擇關(guān)閉那些列族的緩存。
如果你只是執(zhí)行很多順序化掃描,你會多次倒騰緩存,并且可能會濫用緩存把應(yīng)該放進(jìn)緩存獲得性能提升的數(shù)據(jù)給排擠出去。如果關(guān)閉緩存,你不僅可以避免上述情況發(fā)生,而且可以讓出更多緩存給其他表和同一表的其他列族使用。
數(shù)據(jù)塊緩存默認(rèn)是打開的。你可以在新建表或者更改表時關(guān)閉它:
hbase(main):002:0>
create 'mytable',
{NAME => 'colfam1', BLOCKCACHE => 'false’}
3 激進(jìn)緩存
你可以選擇一些列族,賦予它們在數(shù)據(jù)塊緩存里有更高的優(yōu)先級(LRU緩存)。如果你預(yù)期一個列族比另一個列族隨機(jī)讀更多,這個特性遲早用得上。這個配置也是在表實例化時設(shè)定:
hbase(main):002:0>
create 'mytable',
{NAME => 'colfam1', IN_MEMORY => 'true'}
IN_MEMORY參數(shù)的默認(rèn)值是false。因為HBase除了在數(shù)據(jù)塊緩存里保存這個列族相比其他列族更激進(jìn)之外并不提供額外的保證,該參數(shù)在實踐中設(shè)置為true不會變化太大。
4 布隆過濾器(Bloom filters)
數(shù)據(jù)塊索引提供了一個有效的方法,在訪問一個特定的行時用來查找應(yīng)該讀取的HFile的數(shù)據(jù)塊。但是它的效用是有限的。HFile數(shù)據(jù)塊的默認(rèn)大小是64KB,這個大小不能調(diào)整太多。
如果你要查找一個短行,只在整個數(shù)據(jù)塊的起始行鍵上建立索引無法給你細(xì)粒度的索引信息。例如,如果你的行占用100字節(jié)存儲空間,一個64KB的數(shù)據(jù)塊包含(64 * 1024)/100 = 655.53 = ~700行,而你只能把起始行放在索引位上。你要查找的行可能落在特定數(shù)據(jù)塊上的行區(qū)間里,但也不是肯定存放在那個數(shù)據(jù)塊上。這有多種情況的可能,或者該行在表里不存在,或者存放在另一個HFile里,甚至在MemStore里。這些情況下,從硬盤讀取數(shù)據(jù)塊會帶來IO開銷,也會濫用數(shù)據(jù)塊緩存。這會影響性能,尤其是當(dāng)你面對一個巨大的數(shù)據(jù)集并且有很多并發(fā)讀用戶時。
布隆過濾器允許你對存儲在每個數(shù)據(jù)塊的數(shù)據(jù)做一個反向測試。當(dāng)某行被請求時,先檢查布隆過濾器看看該行是否不在這個數(shù)據(jù)塊。布隆過濾器要么確定回答該行不在,要么回答它不知道。這就是為什么我們稱它是反向測試。布隆過濾器也可以應(yīng)用到行里的單元上。當(dāng)訪問某列標(biāo)識符時先使用同樣的反向測試。
布隆過濾器也不是沒有代價。存儲這個額外的索引層次占用額外的空間。布隆過濾器隨著它們的索引對象數(shù)據(jù)增長而增長,所以行級布隆過濾器比列標(biāo)識符級布隆過濾器占用空間要少。當(dāng)空間不是問ti時,它們可以幫助你榨干系統(tǒng)的性能潛力。
你可以在列族上打開布隆過濾器,如下所示:
hbase(main):007:0>
create 'mytable',
{NAME => 'colfam1', BLOOMFILTER => 'ROWCOL'}
BLOOMFILTER參數(shù)的默認(rèn)值是NONE。一個行級布隆過濾器用ROW打開,列標(biāo)識符級布隆過濾器用ROWCOL打開。行級布隆過濾器在數(shù)據(jù)塊里檢查特定行鍵是否不存在,列標(biāo)識符級布隆過濾器檢查行和列標(biāo)識符聯(lián)合體是否不存在。ROWCOL布隆過濾器的開銷高于ROW布隆過濾器。
5 生存時間(TTL)
應(yīng)用系統(tǒng)經(jīng)常需要從數(shù)據(jù)庫里刪除老數(shù)據(jù)。由于數(shù)據(jù)庫很難超過某種規(guī)模,所以傳統(tǒng)上數(shù)據(jù)庫內(nèi)建了許多靈活處理辦法。例如,在TwitBase里你不愿意刪除用戶在使用應(yīng)用系統(tǒng)期間生成的任何推帖。這些都是用戶生成數(shù)據(jù),將來有一天當(dāng)你執(zhí)行一些高級分析時可能有用。但是并不需要保存所有推帖用于實時訪問。所以早于某個時間的推帖可以歸檔存放到平面文件里。
HBase可以讓你在數(shù)秒內(nèi)在列族級別設(shè)置一個TTL。早于指定TTL值的數(shù)據(jù)在下一次大合并時會被刪除。如果你在同一單元上有多個時間版本,早于設(shè)定TTL的版本會被刪除。你可以關(guān)閉TTL或者通過設(shè)置其值為INT.MAX_VALUE (2147483647)來讓它永遠(yuǎn)打開(這是默認(rèn)值)。你可以在建表時設(shè)置TTL,如下所示:
hbase(main):002:0>
create 'mytable', {NAME => 'colfam1', TTL => '18000'}
該命令在colfam1列族上設(shè)置TTL為18,000秒=5小時。colfam1里超過5小時的數(shù)據(jù)將會在下一次大合并時被刪除。
6 壓縮
HFile可以被壓縮并存放在HDFS上。這有助于節(jié)省硬盤IO,但是讀寫數(shù)據(jù)時壓縮和解壓縮會抬高CPU利用率。壓縮是表定義的一部分,可以在建表或模式改變時設(shè)定。除非你確定不會從壓縮中受益,我們推薦你打開表的壓縮。只有在數(shù)據(jù)不能被壓縮或者因為某種原因服務(wù)器的CPU利用率有限制要求的情況下,有可能會關(guān)閉壓縮特性。
HBase可以使用多種壓縮編碼,包括LZO、Snappy和GZIP。LZO[1]和Snappy[2]是其中最流行的兩種。Snappy由Google在2011年發(fā)布,發(fā)布不久Hadoop和HBase項目開始提供支持。在此之前,選擇的是LZO編碼。Hadoop使用的LZO原生庫受GPLv2版權(quán)控制,不能放在Hadoop和Hbase的任何發(fā)行版里;它們必須單獨(dú)安裝。另一方面,Snappy擁有BSD許可(BSD-licensed),所以它更容易和Hadoop和HBase發(fā)行版捆綁在一起。LZO和Snappy的壓縮比例和壓縮/解壓縮速度差不多。
當(dāng)建表時你可以在列族上打開壓縮,如下所示:
hbase(main):002:0> create 'mytable',
{NAME => 'colfam1', COMPRESSION => 'SNAPPY'}
注意數(shù)據(jù)只在硬盤上是壓縮的。在內(nèi)存里(MemStore或BlockCache)或網(wǎng)絡(luò)傳輸時是沒有壓縮的。
改變壓縮編碼的做法不應(yīng)該經(jīng)常發(fā)生,但是如果你的確需要改變某個列族的壓縮編碼,直接做就可以。你需要更改表定義,設(shè)定新壓縮編碼。此后合并時,生成的HFile全部會采用新編碼壓縮。這個過程不需要創(chuàng)建新表和復(fù)制數(shù)據(jù)。但你要確保直到改變編碼后所有老HFile被合并后才能從集群中刪除老編碼函數(shù)庫。
7 單元時間版本
HBase在默認(rèn)情況下每個單元維護(hù)三個時間版本。這個屬性是可以設(shè)置的。如果你只需要一個版本,推薦你在設(shè)置表時只維護(hù)一個版本。這樣系統(tǒng)就不會保留更新單元的多個時間版本。時間版本也是在列族級設(shè)置的,可以在表實例化時設(shè)定:
hbase(main):002:0> create 'mytable', {NAME => 'colfam1', VERSIONS => 1}
你可以在同一個create語句里為列族指定多個屬性,如下所示:
hbase(main):002:0> create 'mytable',
{NAME => 'colfam1', VERSIONS => 1, TTL => '18000'}
你也可以指定列族存儲的最少時間版本數(shù),如下所示:
hbase(main):002:0> create 'mytable', {NAME => 'colfam1', VERSIONS => 5,
MIN_VERSIONS => '1'}
在列族上同時設(shè)定TTL也是遲早有用的。如果當(dāng)前存儲的所有時間版本都早于TTL,至少M(fèi)IN_VERSION個最新版本會保留下來。這樣確保在你的查詢以及數(shù)據(jù)早于TTL時有結(jié)果返回。
關(guān)于“HBase有哪些特性”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
分享題目:HBase有哪些特性
分享路徑:http://m.kartarina.com/article24/jedhce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、搜索引擎優(yōu)化、、網(wǎng)站導(dǎo)航、App設(shè)計、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)