gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 15:05:17 25 4
gpt4 key购买 nike

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

最佳答案

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

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

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

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

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

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

关于java - 如何通过修改org.apache.hadoop.hbase.mapreduce.RowCounter处理hbase中的海量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31847091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com