2017-03-08 111 views
4

因此,让我们看看我能否简单解释我的问题。HBase扫描 - RowKey过滤器

假设我们得到了有迪斯科每次访问的信息的HBase的表: 每迪斯科注册其,访问者的名称,天他参观了它。 (是的这是一个愚蠢的例子,我知道 ..)。

因此,举例来说,这些将是表中的一些值:

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

RowKey具有以下结构:

discoName

PERSONNAME

dayOfTheYear

(表中有一些其他列/限定符,但我不介意这个问题)。


的问题是:想象一个男孩,单纯喜欢去省声。他只是喜欢它,他花他所有的钱在迪斯科和药物(,但这不是点)。

我的目标是要输出每个人都出席Ministry Of Sound。在我的扫描中,这个家伙不断出现在结果中,所以我必须放弃搜索下一位访问者的许多条目。 F.E:

.. 
ministryOfSoundJohnnyYonkie01022017 
ministryOfSoundJohnnyYonkie02022017 
ministryOfSoundJohnnyYonkie03022017 
ministryOfSoundJohnnyYonkie04022017 
ministryOfSoundJohnnyYonkie05022017 
ministryOfSoundAnotherDude02022017 
... 

为了注册AnotherDude,我必须从约翰尼放弃4项。

最后,问题是:


有没有办法告诉HBase的,从字节重复条目(X),以字节(X + Y)X是字节从数discoName和y的字节数从personName]必须是自动丢弃


非常感谢!第一

+0

什么是数据访问模式?你使用Hadoop和MapReduce,还是只使用HBase客户端API扫描表?您是否想跳过HBase服务器端或客户端上的条目,因此数据处理功能将只接受独特的迪斯科用户条目?我没有完全理解这种情况。 – AdamSkywalker

+0

嗨@AdamSkywalker!我们通过客户端API(使用thrift和C#)连接到Hbase,我们的目标是跳过服务器端的条目。 谢谢! –

+1

您是否考虑用给定的startKey创建新的扫描以跳过条目?例如,当您找到JohnnyYonkie时,使用开始键'ministryOfSoundJohnnyYonkie99999'创建新的扫描。 – AdamSkywalker

回答

1

一件事:如果你只有客户端访问,我也帮不了你:(

如果您有其他访问,那么你可以看看下面的命题,但默认的回答是: 如果这是您的访问模式,请优化您的模式。

如果您需要以某种方式访问​​数据,请确保您首先以这种方式编写数据。如果您必须执行迁移,请使用map-reduce API。

我可能会简单地添加一个表,只写一行ministryOfSound和每个访问者的列。 (一般来说,您提出的模式听起来不太适合HBase--因为如果后处理重复结果的确是性能问题,那么您有大量的单行增加的写入操作)

On the另一方面,如果这是一个临时查询,那么您可能想要马上使用mapreduce-API - 可能使用Apache Spark互连并对数据执行“不同的”调用。

使用Scans进行分析查询并不是我该怎么做的。

如果你不得不使用Scans来做,那么我会建议你实现一个CoProcessor。这些可以增加Filter的状态,并且您可以在Region Server端投影PrefixFilter'd Scan的结果。如果您是CoProcessors的新手,请参阅:HBase: The Definitive Guide。这要求您可以将jar部署到RegionServer类路径中。

但是,如果您通过在那里进行不同的过滤来炸毁客户端,那么由于插入点上的热点,您可能也炸毁了您的区域。

作为最后的选择:你可能想看看Apache Phoenix,看看你是否可以将你的rowkey强制到一个模式中,从中你可以对rowkey的前两部分做出不同的选择。这显然要求你在你的rowkey中有分隔符,或者至少有一个固定的长度。

+0

没有达到解决方案,但您的文章是丰富的,所以给你打勾 –