HBase二級(jí)索引總結(jié)

在HBase中暮芭,表格的Rowkey按照字典排序,Region按照RowKey設(shè)置split point進(jìn)行shard窖剑,通過這種方式實(shí)現(xiàn)的全局斗蒋、分布式索引淮野,成為了其成功的最大的砝碼捧书。圖1顯示了HBase表格的Rowkey切分與Region的部署關(guān)系圖。


圖1: HBase Rowkey-Region 關(guān)系圖
然而骤星,隨著在HBase系統(tǒng)上應(yīng)用的驅(qū)動(dòng),人們發(fā)現(xiàn)Global-Rowkey-Indexing不再滿足應(yīng)用的需求爆哑。單一的通過Rowkey檢索數(shù)據(jù)的方式洞难,不再滿足更多應(yīng)用的需求,人們希望像SQL一樣檢索數(shù)據(jù)揭朝,select * from table where col=val队贱。可是潭袱,HBase之前的定位是大表的存儲(chǔ)柱嫌,要進(jìn)行這樣的查詢,往往是要通過類似Hive屯换、Pig等系統(tǒng)進(jìn)行全表的MapReduce計(jì)算编丘,這種方式既浪費(fèi)了機(jī)器的計(jì)算資源,又因高延遲使得應(yīng)用黯然失色彤悔。于是嘉抓,在業(yè)界和社區(qū),針對(duì)HBase Secondary Indexing的方案晕窑,成為HBase新版本(0.96)呼聲最高的一項(xiàng)Feature抑片。

粗略分析了當(dāng)前的技術(shù),大概的方案可以總結(jié)為這樣兩類:
1杨赤、使用HBase的coprocessor敞斋。CoProcessor相當(dāng)于HBase的Observer+hook,目前支持MasterObserver疾牲、RegionObserver和WALObserver植捎,基本上對(duì)于HBase Table的管理、數(shù)據(jù)的Put说敏、Delete鸥跟、Get等操作都可以找到對(duì)應(yīng)的pre和post。這樣如果需要對(duì)于某一項(xiàng)Column建立Secondary Indexing盔沫,就可以在Put医咨、Delete的時(shí)候,將其信息更新到另外一張索引表中架诞。如圖二所示拟淮,對(duì)于Indexing里面的value值是否存儲(chǔ)的問題,可以根據(jù)需要進(jìn)行控制谴忧,如果value的空間開銷不大很泊,逆向的檢索又比較頻繁角虫,可以直接存儲(chǔ)在Indexing Table中,反之則避免這種情況委造。


圖2 使用HBase Coprocessor實(shí)現(xiàn)Secondary Indexing
2戳鹅、由客戶端發(fā)起對(duì)于主表和索引表的Put、Delete操作的雙重操作昏兆。源自:http://hadoop-hbase.blogspot.com/2012/10/musings-on-secondary-indexes.html 【墻外】
它具體的做法總結(jié)起來有:
設(shè)置主表的TTL(Time To Live)比索引表小一點(diǎn)枫虏,讓其略早一點(diǎn)消亡。

不要在IndexingTable存儲(chǔ)Value值爬虱,即刪除如圖2所示的val列隶债。

Put操作時(shí),對(duì)于操作的主表的所有列跑筝,使用同一的Local TimeStamp的值死讹,更新到Indexing Table,然后使用該TimeStamp插入主表數(shù)據(jù)曲梗。

Delete操作時(shí)赞警,首先操作主表的數(shù)據(jù),然后再去更新Indexing Table的數(shù)據(jù)稀并。

雖然在這種方案里無法保證原子性和一致性仅颇,但是通過TimeStamp的設(shè)置,No Locks和 No Server-side codes碘举,使其在二級(jí)索引上有著較大的優(yōu)勢(shì)忘瓦。至于中間出錯(cuò)的環(huán)節(jié),我們看看是否可以容忍:
1)Put索引表成功引颈,Put主表失敗耕皮。由于Indexing Table不存儲(chǔ)val值,仍需要跳轉(zhuǎn)到Main Table,所以這樣的錯(cuò)誤相當(dāng)于拿一個(gè)Stale index去訪問對(duì)應(yīng)Rowkey吧了蝙场,對(duì)結(jié)果正確性沒有影響凌停。
2)Delete主表成功,Delete索引表失敗售滤。都是索引表的內(nèi)容>=主表的內(nèi)容而已罚拟,而實(shí)際返回值需要通過主表進(jìn)行。

生產(chǎn)環(huán)境下完箩,什么樣的方法實(shí)用性更強(qiáng)赐俗?
就這個(gè)問題,根據(jù)個(gè)人當(dāng)前對(duì)于生產(chǎn)環(huán)境下HBase集群的經(jīng)驗(yàn)弊知,綜合上面兩種方式的優(yōu)劣阻逮,可以通過這樣的方式設(shè)計(jì)。

1秩彤、主表服務(wù)在線業(yè)務(wù)叔扼,它的性能需要保證事哭。使用coprocessor和客戶端的封裝也好,都會(huì)影響其性能瓜富,所以在正常情況下鳍咱,直接操作都不太合適。如果想使用方案二食呻,我倒是感覺流炕,可以調(diào)整Indexing Table的操作方式,去除保證其安全性的內(nèi)容仅胞,比如可以關(guān)閉寫HLOG,這樣會(huì)進(jìn)一步減低其操作的延遲剑辫。
2干旧、離線更新索引表。在真正需要二級(jí)索引的場(chǎng)景內(nèi)妹蔽,其時(shí)效性要求往往不高椎眯。可以將索引實(shí)時(shí)更新到Redis等KV系統(tǒng)中胳岂,定時(shí)從KV更新索引到Hbase的Indexing Table中编整。PS:Redis里面有DB設(shè)置的概念,可以按照時(shí)間段進(jìn)行隔離乳丰,這樣某段時(shí)間內(nèi)的數(shù)據(jù)會(huì)更新到Redis上掌测,保證Redis導(dǎo)入MapReduce之后仍然可以進(jìn)行update操作。

PS:社區(qū)和生產(chǎn)系統(tǒng)關(guān)于Hbase二級(jí)索引的方案产园,還在繼續(xù)當(dāng)中汞斧,會(huì)持續(xù)關(guān)注。

http://blog.sina.com.cn/s/blog_4a1f59bf01018apd.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末什燕,一起剝皮案震驚了整個(gè)濱河市粘勒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌屎即,老刑警劉巖庙睡,帶你破解...
    沈念sama閱讀 222,807評(píng)論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異技俐,居然都是意外死亡乘陪,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門虽另,熙熙樓的掌柜王于貴愁眉苦臉地迎上來暂刘,“玉大人,你說我怎么就攤上這事捂刺∫ゼ穑” “怎么了募寨?”我有些...
    開封第一講書人閱讀 169,589評(píng)論 0 363
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)森缠。 經(jīng)常有香客問我拔鹰,道長(zhǎng),這世上最難降的妖魔是什么贵涵? 我笑而不...
    開封第一講書人閱讀 60,188評(píng)論 1 300
  • 正文 為了忘掉前任列肢,我火速辦了婚禮,結(jié)果婚禮上宾茂,老公的妹妹穿的比我還像新娘瓷马。我一直安慰自己,他們只是感情好跨晴,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,185評(píng)論 6 398
  • 文/花漫 我一把揭開白布欧聘。 她就那樣靜靜地躺著,像睡著了一般端盆。 火紅的嫁衣襯著肌膚如雪怀骤。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,785評(píng)論 1 314
  • 那天焕妙,我揣著相機(jī)與錄音蒋伦,去河邊找鬼。 笑死焚鹊,一個(gè)胖子當(dāng)著我的面吹牛痕届,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播寺旺,決...
    沈念sama閱讀 41,220評(píng)論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼爷抓,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了阻塑?” 一聲冷哼從身側(cè)響起蓝撇,我...
    開封第一講書人閱讀 40,167評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陈莽,沒想到半個(gè)月后渤昌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,698評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡走搁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,767評(píng)論 3 343
  • 正文 我和宋清朗相戀三年独柑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片私植。...
    茶點(diǎn)故事閱讀 40,912評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忌栅,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出曲稼,到底是詐尸還是另有隱情索绪,我是刑警寧澤湖员,帶...
    沈念sama閱讀 36,572評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站瑞驱,受9級(jí)特大地震影響娘摔,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜唤反,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,254評(píng)論 3 336
  • 文/蒙蒙 一凳寺、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彤侍,春花似錦肠缨、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至般哼,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間惠窄,已是汗流浹背蒸眠。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評(píng)論 1 274
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留杆融,地道東北人楞卡。 一個(gè)月前我還...
    沈念sama閱讀 49,359評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像脾歇,于是被迫代替她去往敵國(guó)和親蒋腮。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,922評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 一藕各、簡(jiǎn)介 Hbase:全名Hadoop DataBase池摧,是一種開源的,可伸縮的激况,嚴(yán)格一致性(并非最終一致性)的分...
    菜鳥小玄閱讀 2,395評(píng)論 0 12
  • 為什么需要Secondary Index 對(duì)于HBase而言作彤,如果想精確地定位到某行記錄,唯一的辦法是通過rowk...
    4ea0af17fd67閱讀 10,956評(píng)論 0 5
  • 最近在學(xué)習(xí)Hbase二級(jí)索引的構(gòu)建乌逐,雖然網(wǎng)上方案挺多竭讳,代碼也并不復(fù)雜,但還是花了不少時(shí)間浙踢,主要是集群環(huán)境的調(diào)試踩了...
    cwjbest閱讀 7,005評(píng)論 0 6
  • HBase提供了檢索數(shù)據(jù)的功能绢慢,不過原有系統(tǒng)僅提供了通過rowkey檢索數(shù)據(jù)的功能,過于單一洛波,不夠靈活胰舆,一旦查詢條...
    雪飄千里閱讀 587評(píng)論 0 1
  • 二路公交車行駛在綠蔭濃郁的柏油道路上骚露,窗外,粼粼穿城江喧鬧蜿蜒思瘟。在江邊石欄與路邊綠樹之間的人行道上荸百,如水般柔和燦爛...
    王人單月刀閱讀 236評(píng)論 1 4