大家好,我是不溫蔔火,是一名計算機學院大資料專業大二的學生,昵稱來源于成語—<code>不溫不火</code>,本意是<code>希望自己性情溫和</code>。作為一名網際網路行業的小白,部落客寫部落格一方面是為了記錄自己的學習過程,另一方面是總結自己所犯的錯誤希望能夠幫助到很多和自己一樣處于起步階段的萌新。但由于水準有限,部落格中難免會有一些錯誤出現,有纰漏之處懇請各位大佬不吝賜教!暫時隻有csdn這一個平台,
此篇為大家帶來的是一文教你如何在Phoenix中建立 HBase 二級索引。
一. HBase 的二級索引
二. 配置 HBase 支援 Phoenix 建立二級索引
三. Phoenix 建立索引
1. Phoenix 索引分類
2. 建立索引總結

在前面的學習中, 我們知道 HBase 隻能通過 rowkey 進行搜尋, 一般把 rowkey 稱作一級索引. 在很長的一段時間裡 HBase 就隻支援一級索引.
HBase 裡面隻有 rowkey 作為一級索引, 如果要對庫裡的非 rowkey 字段進行資料檢索和查詢, 往往要通過 MapReduce/Spark 等分布式計算架構進行,硬體資源消耗和時間延遲都會比較高。
為了 HBase 的資料查詢更高效、适應更多的場景, 諸如使用非 rowkey 字段檢索也能做到秒級響應,或者支援各個字段進行模糊查詢和多字段組合查詢等, 是以需要在 HBase 上面建構二級索引, 以滿足現實中更複雜多樣的業務需求。
從 0.94 版本開始, HBase 開始支援二級索引.
HBase 索引有多種放方案, 我們今天要做的是使用 Phoenix 給 HBase 添加二級索引.
需要先給 HBase 配置支援建立二級索引
1. 添加如下配置到 HBase 的 Hregionerver 節點的 hbase-site.xml
2. 添加如下配置到 HBase 的 Hmaster 節點的 hbase-site.xml
3. 測試是否支援
準備資料:
預設情況下, 隻要 rowkey 支援索引(就是上面的 id)
其他字段是不支援索引的:
給 name 字段添加索引:
注意: 這種索引, 對 name 建立的索引, 則查詢的時候也必須隻查詢 name 字段.
Phoenix 索引分全局索引和局部索引
1. 全局索引
global index 是預設的索引格式。
适用于多讀少寫的業務場景。寫資料的時候會消耗大量開銷,因為索引表也要更新,而索引表是分布在不同的資料節點上的,跨節點的資料傳輸帶來了較大的性能消耗。
在讀資料的時候 Phoenix 會選擇索引表來降低查詢消耗的時間。
如果想查詢的字段不是索引字段的話索引表不會被使用,也就是說不會帶來查詢速度的提升。
建立全局索引的方法:
2.局部索引
local index 适用于寫操作頻繁的場景。索引資料和資料表的資料是存放在相同的伺服器中的,避免了在寫操作的時候往不同伺服器的索引表中寫索引帶來的額外開銷。
查詢的字段不是索引字段索引表也會被使用,這會帶來查詢速度的提升。
建立局部索引的方法(相比全局索引多了一個關鍵字 local):
3. Local index 和 Global index差別:
Local index 由于是資料與索引在同一伺服器上,是以要查詢的資料在哪台伺服器的哪個region是無法定位的,隻能先找到region然後再利用索引。
Global index 是一種分布式索引,可以直接利用索引定位伺服器和region,速度更快,但是由于分布式的原因,資料一旦出現新增變化,分布式的索引要進行跨服務的同步操作,帶來大量的通信消耗。是以在寫操作頻繁的字段上不适合建立Global index。
1. 建立全局索引, 也支援查詢其他字段
2. 建立局部索引
3. 删除索引
本次的分享就到這裡了,
好書不厭讀百回,熟讀課思子自知。而我想要成為全場最靓的仔,就必須堅持通過學習來擷取更多知識,用知識改變命運,用部落格見證成長,用行動證明我在努力。 如果我的部落格對你有幫助、如果你喜歡我的部落格内容,聽說點贊的人運氣不會太差,每一天都會元氣滿滿呦!如果實在要白嫖的話,那祝你開心每一天,歡迎常來我部落格看看。 碼字不易,大家的支援就是我堅持下去的動力。