777精品出轨人妻国产,熟女av人妻一区二区三四区,国产精品无码中文在线av,美脚パンスト女教师在线观看

HBase二級(jí)索引方案

原創(chuàng) 收藏 評(píng)論
舉報(bào) 2018-09-07



01 HBase簡(jiǎn)介

HBase是一個(gè)構(gòu)建在HDFS之上,用于海量數(shù)據(jù)存儲(chǔ)分布式列存儲(chǔ)系統(tǒng)。
參見(jiàn)下圖,由于在HBase中:

  • 表的每行都是按照RowKey的字典序排序存儲(chǔ)

  • 表的數(shù)據(jù)是按照RowKey區(qū)間進(jìn)行分割存儲(chǔ)成多個(gè)region

所以HBase主要適用下面這兩種常見(jiàn)場(chǎng)景:

  • 適用于基于rowkey的單行數(shù)據(jù)快速隨機(jī)讀寫(xiě)

  • 適合基于rowkey前綴的范圍掃描

1 hbase-arch.png

2 hbase-region-splits.jpg

02 為什么需要HBse二級(jí)索引

HBase里面只有rowkey作為一級(jí)索引, 如果要對(duì)庫(kù)里的非rowkey字段進(jìn)行數(shù)據(jù)檢索和查詢(xún), 往往要通過(guò)MapReduce/Spark等分布式計(jì)算框架進(jìn)行,硬件資源消耗和時(shí)間延遲都會(huì)比較高。

為了HBase的數(shù)據(jù)查詢(xún)更高效、適應(yīng)更多的場(chǎng)景, 諸如使用非rowkey字段檢索也能做到秒級(jí)響應(yīng),或者支持各個(gè)字段進(jìn)行模糊查詢(xún)和多字段組合查詢(xún)等, 因此需要在HBase上面構(gòu)建二級(jí)索引, 以滿(mǎn)足現(xiàn)實(shí)中更復(fù)雜多樣的業(yè)務(wù)需求。

03 HBse二級(jí)索引方案

基于Coprocessor方案


1、官方特性

其實(shí)從0.94版本開(kāi)始,HBase官方文檔已經(jīng)提出了hbase上面實(shí)現(xiàn)二級(jí)索引的一種路徑:

  • 基于Coprocessor(0.92版本開(kāi)始引入,達(dá)到支持類(lèi)似傳統(tǒng)RDBMS的觸發(fā)器的行為)

  • 開(kāi)發(fā)自定義數(shù)據(jù)處理邏輯,采用數(shù)據(jù)“雙寫(xiě)”(dual-write)策略,在有數(shù)據(jù)寫(xiě)入同時(shí)同步到二級(jí)索引表


2、開(kāi)源方案:


雖然官方一直也沒(méi)提供內(nèi)置的支持二級(jí)索引的工具, 不過(guò)業(yè)界也有些比較知名的基于Coprocessor的開(kāi)源方案:


  • 華為的hindex : 基于0.94版本,當(dāng)年剛出來(lái)的時(shí)候比較火,但是版本較舊,看GitHub項(xiàng)目地址最近這幾年就沒(méi)更新過(guò)。

  • Apache Phoenix: 功能?chē)@著SQL on hbase,支持和兼容多個(gè)hbase版本, 二級(jí)索引只是其中一塊功能。     二級(jí)索引的創(chuàng)建和管理直接有SQL語(yǔ)法支持,使用起來(lái)很簡(jiǎn)便, 該項(xiàng)目目前社區(qū)活躍度和版本更新迭代情況都比較好。


ApachePhoenix在目前開(kāi)源的方案中,是一個(gè)比較優(yōu)的選擇。主打SQL on HBase , 基于SQL能完成HBase的CRUD操作,支持JDBC協(xié)議。 Apache Phoenix在Hadoop生態(tài)里面位置:

3 phoenix-arch.png

3、Phoenix二級(jí)索引特點(diǎn):


  • Covered Indexes(覆蓋索引) :把關(guān)注的數(shù)據(jù)字段也附在索引表上,只需要通過(guò)索引表就能返回所要查詢(xún)的數(shù)據(jù)(列), 所以索引的列必須包含所需查詢(xún)的列(SELECT的列和WHRER的列)。

  • Functional indexes(函數(shù)索引): 索引不局限于列,支持任意的表達(dá)式來(lái)創(chuàng)建索引。

  • Global indexes(全局索引):適用于讀多寫(xiě)少場(chǎng)景。通過(guò)維護(hù)全局索引表,所有的更新和寫(xiě)操作都會(huì)引起索引的更新,寫(xiě)入性能受到影響。 在讀數(shù)據(jù)時(shí),Phoenix SQL會(huì)基于索引字段,執(zhí)行快速查詢(xún)。

  • Local indexes(本地索引):適用于寫(xiě)多讀少場(chǎng)景。 在數(shù)據(jù)寫(xiě)入時(shí),索引數(shù)據(jù)和表數(shù)據(jù)都會(huì)存儲(chǔ)在本地。在數(shù)據(jù)讀取時(shí), 由于無(wú)法預(yù)先確定region的位置,所以在讀取數(shù)據(jù)時(shí)需要檢查每個(gè)region(以找到索引數(shù)據(jù)),會(huì)帶來(lái)一定性能(網(wǎng)絡(luò))開(kāi)銷(xiāo)。


其他的在網(wǎng)上也很多自己基于Coprocessor實(shí)現(xiàn)二級(jí)索引的文章,大體都是遵循類(lèi)似的思路:構(gòu)建一份“索引”的映射關(guān)系,存儲(chǔ)在另一張hbase表或者其他DB里面。


4、方案優(yōu)缺點(diǎn):


  • 優(yōu)點(diǎn): 基于Coprocessor的方案,從開(kāi)發(fā)設(shè)計(jì)的角度看, 把很多對(duì)二級(jí)索引管理的細(xì)節(jié)都封裝在的Coprocessor具體實(shí)現(xiàn)類(lèi)里面, 這些細(xì)節(jié)對(duì)外面讀寫(xiě)的人是無(wú)感知的,簡(jiǎn)化了數(shù)據(jù)訪問(wèn)者的使用。

  • 缺點(diǎn): 但是Coprocessor的方案入侵性比較強(qiáng), 增加了在Regionserver內(nèi)部需要運(yùn)行和維護(hù)二級(jí)索引關(guān)系表的代碼邏輯等,對(duì)Regionserver的性能會(huì)有一定影響。


非Coprocessor方案


選擇不基于Coprocessor開(kāi)發(fā),自行在外部構(gòu)建和維護(hù)索引關(guān)系也是另外一種方式。


常見(jiàn)的是采用底層基于Apache Lucene的Elasticsearch(下面簡(jiǎn)稱(chēng)ES)或Apache Solr ,來(lái)構(gòu)建強(qiáng)大的索引能力、搜索能力, 例如支持模糊查詢(xún)、全文檢索、組合查詢(xún)、排序等。


1、Lily HBase Indexer:


LilyHBase Indexer(也簡(jiǎn)稱(chēng) HBase Indexer)是國(guó)外的NGDATA公司開(kāi)源的基于solr的索引構(gòu)建工具, 特色是其基于HBase的備份機(jī)制,開(kāi)發(fā)了一個(gè)叫SEP工具, 通過(guò)監(jiān)控HBase 的WAL日志(Put/Delete操作),來(lái)觸發(fā)對(duì)solr集群索引的異步更新, 基本對(duì)HBase無(wú)侵入性(但必須開(kāi)啟WAL ), 流程圖如下所示:

4 lily-hbase-indexer.png


2、CDH Search:


CDHSearch是Hadoop發(fā)行商Cloudera公司開(kāi)發(fā)的基于solr的HBase檢索方案,部分集成了Lily HBase Indexer的功能。


下面是CDH search的核心組件交互圖, 體現(xiàn)了在單次client端查詢(xún)過(guò)程中,核心的zookeeper和solr等的交互流程:

5 cdh-search.png



3、CDH 支持構(gòu)建索引方式:


  • 批量索引:

  •  使用 Spark :CDH自帶 spark 批量index工具

  • 使用MapReduce :集成Lily Indexer、自帶MR index等工具

  • 近實(shí)時(shí)索引(增量場(chǎng)景):

  • 使用 Flume 近實(shí)時(shí)(NRT)索引

  • 集成Lily NRT Indexer

  • 基于Solr REST API自定義索引場(chǎng)景


4、CDH Solr 索引查詢(xún)流程示意圖:

6 cdh-index-query.png

04 DataStory二級(jí)索引方案介紹


其實(shí)對(duì)于在外部自定義構(gòu)建二級(jí)索引的方式, 有自己的大數(shù)據(jù)團(tuán)隊(duì)的公司一般都會(huì)針對(duì)自己的業(yè)務(wù)場(chǎng)景進(jìn)行優(yōu)化,自行構(gòu)建ES/Solr的搜索集群。 例如數(shù)說(shuō)故事企業(yè)內(nèi)部的百億級(jí)數(shù)據(jù)全量庫(kù),就是基于ES構(gòu)建海量索引和檢索能力的案例。 主要優(yōu)化點(diǎn)包括:


  • 對(duì)企業(yè)的索引集群面向的業(yè)務(wù)場(chǎng)景和模式定制,對(duì)通用數(shù)據(jù)模型進(jìn)行抽象和平臺(tái)化復(fù)用

  • 需要針對(duì)多業(yè)務(wù)、多項(xiàng)目場(chǎng)景進(jìn)行ES集群資源的合理劃分和運(yùn)維管理

  • 查詢(xún)需要針對(duì)多索引集群、跨集群查詢(xún)進(jìn)行優(yōu)化

  • 共用集群場(chǎng)景需要做好防護(hù)、監(jiān)控、限流


下面顯示了數(shù)說(shuō)基于ES做二級(jí)索引的兩種構(gòu)建流程,包含:

  • 增量索引: 日常持續(xù)接入的數(shù)據(jù)源,進(jìn)行增量的索引更新

  • 全量索引: 配套基于Spark/MR的批量索引創(chuàng)建/更新程序, 用于初次或重建已有HBase庫(kù)表的索引

7 ds-all-db.png

數(shù)據(jù)查詢(xún)流程:

8 ds-alldb-query.png

Datastory在做全量庫(kù)的過(guò)程中,還是有更多遇到的問(wèn)題要解決,諸如數(shù)據(jù)一致性、大量小索引、多版本ES集群共存等, 會(huì)在后續(xù)進(jìn)行更細(xì)致的介紹和分享。


參考資料:

HBase coprocessor:

https://blogs.apache.org/hbase/entry/coprocessor_introduction

Cloudera Search:

https://www.cloudera.com/documentation/enterprise/5-14-x/topics/search.html

Apache Phoenix Secondary indexing:

https://phoenix.apache.org/secondary_indexing.html

NGDATA Lily HBase Indexer:

https://github.com/NGDATA/hbase-indexer/wiki

https://www.ngdata.com/the-hbase-side-effect-processor-and-hbase-replication-monitoring/

深入理解HBase Indexer:

https://blog.csdn.net/d6619309/article/details/51500368

華為hindex:

https://github.com/Huawei-Hadoop/hindex

    評(píng)論

    文明發(fā)言,無(wú)意義評(píng)論將很快被刪除,異常行為可能被禁言
    DIGITALING
    登錄后參與評(píng)論

    評(píng)論

    文明發(fā)言,無(wú)意義評(píng)論將很快被刪除,異常行為可能被禁言
    800

    推薦評(píng)論

    暫無(wú)評(píng)論哦,快來(lái)評(píng)論一下吧!

    全部評(píng)論(0條)

    主站蜘蛛池模板: 牡丹江市| 稻城县| 泸州市| 杭州市| 仪陇县| 德庆县| 娄烦县| 固始县| 三门峡市| 昌黎县| 视频| 营山县| 灵寿县| 綦江县| 阜新市| 九江市| 青龙| 崇仁县| 余姚市| 浦东新区| 溆浦县| 天等县| 吴忠市| 静乐县| 华安县| 调兵山市| 定南县| 富锦市| 阳原县| 呼和浩特市| 抚州市| 陆河县| 桦甸市| 天台县| 吴堡县| 壶关县| 库尔勒市| 通城县| 澄迈县| 华蓥市| 庆阳市|