簡體   English   中英

HBase Scan - RowKey過濾器

[英]HBase Scan - RowKey Filters

那么,讓我們看看我是否可以簡要解釋一下我的問題。

試想一下,我們得到了有迪斯科每次訪問的信息的HBase的表:每迪斯科注冊其名稱訪問者的名字 ,他參觀了它的一天 是的,這是一個愚蠢的例子,我知道 ...... )。

因此,例如,這些將是表的一些值:

..
ministryOfSoundJamesOliver01022017
ministryOfSoundJamesOliver02022017
ministryOfSoundJamesOliver03022017
ministryOfSoundOliviaNewton04042017
ministryOfSoundOliviaNewton06042017
...
pachaibizaJohnMcKiness06042017
pachaibizaJohnMcKiness04042017
pachaibizaWilliamForrester04042017
..

RowKey具有以下結構:

discoName

PERSONNAME

dayOfTheYear

(該表有一些其他的列/限定符,但我不介意它們的問題)。


問題是:想象一個男孩只是喜歡去聲音部。 他只是喜歡它,他把所有的錢花在迪斯科舞廳和毒品上( 但這不是重點 )。

我的目標是輸出所有參加過聲音部的人 在我的掃描中,這個家伙一直出現在結果中,所以我必須丟棄很多條目來搜索下一個訪客。 FE:

..
ministryOfSoundJohnnyYonkie01022017
ministryOfSoundJohnnyYonkie02022017
ministryOfSoundJohnnyYonkie03022017
ministryOfSoundJohnnyYonkie04022017
ministryOfSoundJohnnyYonkie05022017
ministryOfSoundAnotherDude02022017
...

為了注冊AnotherDude ,我必須丟棄Johnny的 4個條目。

最后,問題是:


有沒有辦法告訴HBase必須自動丟棄從字節(x)到字節(x + y)的重復條目[ x是來自discoName的字節數和來自discoName y字節personName ]?


非常感謝提前!!

首先要做的事情:如果你只有客戶端訪問權限,我無法幫助你:(

如果您有其他訪問權限,那么您可以查看以下命題,但默認答案是: 如果這是您的訪問模式,請為其優化架構。

如果您需要以某種方式訪問​​數據,請確保首先以這種方式編寫數據。 如果必須執行遷移,請使用map-reduce API。

我可能只是添加一個表,只寫一行ministryOfSound和每個訪問者的列。 (一般來說,你提出的模式聽起來不太適合HBase - 因為你有一堆單調增加rowkeys的寫入,如果對重復結果進行后處理實際上是一個性能問題)

另一方面,如果這是一個臨時查詢,那么您可能希望立即使用mapreduce-API - 可能使用Apache Spark-interconnect並對數據執行“不同”調用。

使用掃描進行分析查詢不是我的方法。

如果你必須使用掃描,那么我建議你實現一個CoProcessor。 這些可以使用state擴充Filter,並且可以在Region Server端投影PrefixFilter'd Scan的結果。 如果您是CoProcessors的新手,請參閱以下內容: HBase:The Definitive Guide 這要求您可以將jar部署到RegionServer類路徑中。

但同樣,如果你通過在那里做一個明顯的過濾來炸毀你的客戶,你可能也會因為插件上的熱點而炸毀你的區域。

作為最后的替代方案:您可能希望查看Apache Phoenix,看看是否可以將您的rowkey強制轉換為模式,從中可以對rowkey的前兩部分執行select distinct。 這顯然要求您在rowkey中具有分隔符,或者至少具有固定長度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM