是否有一个聪明的 HBase 模式来帮助发现缺失值?

Posted

技术标签:

【中文标题】是否有一个聪明的 HBase 模式来帮助发现缺失值?【英文标题】:Is there a clever HBase Schema to Aid with Discovering Missing Value? 【发布时间】:2017-01-25 21:33:48 【问题描述】:

假设我的 HBase 表中有数十亿行。此表中的行变化缓慢,这意味着会有新的行键和一些行键被删除。

我每行收到很多事件。但是,将有非常少 行没有与之关联的任何事件。

最后,我想报告未收到任何事件的行。

我天真的解决方案是引入一个 cf:c 来保存一个标志,每次我看到它的事件时都将标志设置为 1。然后对表进行全扫描,查找缺少列值的行键。这似乎是一种浪费,因为我将查看 100 亿行以发现少数行键(我们谈论的是 100 或低 1000)。

是否有一种巧妙的方法来设计 hbase 架构,以便可以快速找到丢失事件的行键(无需遍历每一行)?

【问题讨论】:

【参考方案1】:

如果我理解正确,您有一个行键 xxxxyyyyzzzz1 ... xxxxyyyyzzzzn。 您有某些行的事件,而其他行没有事件。 c 是您了解事件是否存在以及您拥有大量数据的标志。


HBase 中的经验法则RowFilters 总是比列值过滤器更快、更高效(要搜索该标志,需要进行全表扫描)。

您扫描整个表以查找丢失事件的方法(列值过滤器)将导致全表扫描并且效率不高。

结论:你必须使用行键过滤器来扫描这么大的表。

所以我建议你在行键中写入标志。例如:

0 -- 没有事件 1 -- 是否有事件

xxxxyyyyzzzz1_0 // 没有事件的行

xxxyyyyzzzz1_1 // 包含事件的行

现在您可以使用模糊行过滤器来捕获丢失的事件行并生成报告。

Option 2 of your another question which was answered by me

是否有一个聪明的 HBase 架构来帮助发现缺失值?

从我对hbase的经验来看,没有这样的事情。

【讨论】:

感谢您的建议...一个问题当有事件发生时如何更改行键?那么我是不是从row-key-0开始,当我得到一个事件时,删除row-key-0并添加row-key-1? 是的,这就是我的意思,0 表示没有事件 1 表示存在事件。希望有用 不意味着表上有数十亿的删除吗?我认为没有办法更新行键? 好吧,我想你误解了我的意思。在插入行时(第一次)本身以上述方式设计行键,然后根据行键后缀扫描丢失的行。 “我认为没有办法更新行键?”是的,行键无法更新。 您好,我们可以私聊详细讨论

以上是关于是否有一个聪明的 HBase 模式来帮助发现缺失值?的主要内容,如果未能解决你的问题,请参考以下文章

为啥要创建一个二进制列来指示具有缺失值的记录

HBase + HDFS - 缺少 hdfs 块

缺失值处理

通过从现有分布中抽样来估算缺失值

特征工程之缺失值与离群值处理

P1314 聪明的质监员