如何通过修改org.apache.hadoop.hbase.mapreduce.RowCounter来处理hbase中的海量数据?

How to process huge data in hbase by modifying org.apache.hadoop.hbase.mapreduce.RowCounter?

我的 hbase table 包含数百万行。如果我们进行扫描,至少需要一个小时才能显示所有记录。我们将日期存储为行键。我需要获取日期的最小值和最大值。我看到一个实用程序 org.apache.hadoop.hbase.mapreduce.RowCounter,它可以在 5 分钟内统计数百万行。有没有办法以同样的方式完成我的工作?仅供参考:我正在使用 java.

你的方向是正确的。 RowCounter 用法是计算 Hbase 行数的有效方法,它有数百万条记录。您可以获取 RowCounter 的源代码并进行一些调整以达到您的要求

  1. Rowcounter 将在内部执行扫描。那为什么运行快,是因为Map reduce中的parellelism。现在,一旦你扫描了,我想,你可以随时保留过滤器。这样您就可以识别那段代码并为其添加过滤器。
  2. 现在,通过上述更改,您的行计数器将计算与过滤条件匹配的行数。要扩展它,您可以参数化、列族、列限定符、值、运算符等。

希望对你的事业有所帮助

如果您使用的是 HBase 0.98,您的问题应该很简单。您所要做的就是获取 table 中的第一行和最后一行(因为条目是有序的):

  • 通过执行限制为 1 的 扫描 获得的第一行。
  • 您通过执行具有限制的反向扫描获得的最后一行 1.

您可以在此处找到有关反向扫描的更多信息:https://issues.apache.org/jira/browse/HBASE-4811

如果您使用的是以前版本的 HBase,那么您应该考虑为您的 table 使用一些 model/convention。第一行很容易获得(再次只是在 table 上扫描,限制为 1),但对于最后一行,不幸的是你没有 反向扫描 功能.

  1. 您可以按照此处所述设计 "upside-down" table:http://staltz.blogspot.com/2012/05/first-and-last-rows-in-hbase-table.html
  2. 由于您使用日期作为行键,因此您很可能无法以降序方式接收数据(请参阅第 1 项上的博客 post。),因此您可以保留次要 table,您始终在其上保留日期的最小值和最大值(也意味着您必须对代码中的每条记录执行检查 insert/delete 并更新次要 table.
  3. 重新设计存储数据的方式。一个建议是保留您的初始 table 加上一个反向索引 table 并在您的反向索引 table 中存储数据(在行键上),例如: MAX_INTEGER - dataTimestamp,因此最晚日期将是您在反向 table 上的第一个条目,您可以通过扫描检索它(限制为 1)。

由于 HBase 0.98 的解决方案非常简单,无需变通,如果您没有该版本,我建议您进行迁移。