用hbase serde读取用蜂巢中的凤凰腌制的hbase表

时间:2017-06-15 02:12:26

标签: apache-spark hbase phoenix

我创建了一个带有Phoenix SQL创建表查询的hbase表,并且还指定了salt_buckets。 Salting按预期为rowkey添加前缀。

我创建了一个外部hive表,用hbase serde映射到这个hbase表问题是当我通过对rowkey进行过滤来查询这个表时:

其中key =“value”

它不起作用,因为我认为盐预修复也是为了获取密钥。这限制了在密钥上过滤数据的能力。选项:

“其中rowkey喜欢”%value“

有效,但整个表扫描的时间可能很长。

我的问题是如何在hive中的行键值上有效地查询此表(剥离盐预修复)?

1 个答案:

答案 0 :(得分:0)

是的,在提及

时你是对的
  

它不起作用,因为我认为盐预修复也是为了获取密钥。 '

缓解的一种方法是使用散列而不是随机前缀。 并使用计算的哈希为rowkey添加前缀 使用此技术,您可以计算要扫描的rowkey的哈希值。:

  

mod(hash(rowkey),n)其中n是区域数量将删除热点问题

使用随机前缀会带来您在问题中提到的问题。

  

选项:   "其中rowkey喜欢"%value"   可行,但整个表扫描的时间可能很长。

这正是随机前缀salting所做的。 HBase被强制扫描整个表以获得所需的值,因此如果你可以为你的rowkey添加其计算的Hash前缀会更好。 但是这种散列技术在范围扫描中不会很好。

现在你可能会问,为什么我不能简单地用它的Hash替换我的rowKey并将rowkey存储为单独的列。 它可能/可能不起作用,但我建议以这种方式实现它,因为HBase在列系列方面已经非常敏感。 但是我再也不清楚这个解决方案了。

您还可以阅读this以获取更详细的说明。