Java 如何将HBase扫描限制为仅针对MapReduce作业的相关(未过滤)区域

Java 如何将HBase扫描限制为仅针对MapReduce作业的相关(未过滤)区域,java,mapreduce,hbase,Java,Mapreduce,Hbase,我正在运行mapreduce作业以将数据从HBase导出到HDFS。 扫描应用了多个过滤器 无法通过行键限制扫描,因为它不包含所需信息 在运行MR作业时,Thread会为HBase中的每个区域创建一个映射器。其中一些区域仅包含过滤后的数据,因此映射程序不会收到任何要读取的内容,并且在一段时间后会被终止。 要提取的数据量明显小于数据总量,因此由于大量映射程序被终止,作业最终失败 我不是在寻找答案: 在映射器中实现“手动”过滤 增加超时间隔 我要找的是其中之一: 链接到一篇关于如何解决这个问题

我正在运行mapreduce作业以将数据从HBase导出到HDFS。 扫描应用了多个过滤器

无法通过行键限制扫描,因为它不包含所需信息

在运行MR作业时,Thread会为HBase中的每个区域创建一个映射器。其中一些区域仅包含过滤后的数据,因此映射程序不会收到任何要读取的内容,并且在一段时间后会被终止。 要提取的数据量明显小于数据总量,因此由于大量映射程序被终止,作业最终失败

我不是在寻找答案:

  • 在映射器中实现“手动”过滤
  • 增加超时间隔
我要找的是其中之一:

  • 链接到一篇关于如何解决这个问题的文章

  • 这是一个有效的解决方案或想法(不一定需要代码),不需要通过映射程序运行完整的HBase表。或者至少(让我们说实话)减少了映射器中的计算负载

  • 确认没有有效的方法来做这件事,因为我花了相当多的时间来寻找这个

我相信代码示例不是必需的,因为了解HBase的人会知道我的要求


谢谢你的建议。

为了解决这个问题,我创造了一个MR职位

映射器将每一行键分类到一个类别中,并为每个类型选择第一个和最后一个元素(因为所有内容都在一个区域内排序)。为了拾取最后一个元素,我一直在更新单个对象并为每个值赋值,这些值都会登录到映射器中。然后,我在清理阶段将这两个值写入上下文(分类器名称作为键,行键作为值)

映射器的输出很轻(类别数*2),因此我将还原器的数量设置为1,并编写了一些基本逻辑来创建具有low_row/high_row的对象,该对象在飞行中进行了更新,最后我不必对任何内容进行排序。因此,最终输出的形式为:
classifier\u name,start\u rowKey,end\u rowKey

然后我可以使用这些值来限制我的扫描


希望这会对某人有所帮助:)

这不是二级索引。。。《HBase指南》中的章节是关于?感谢你的建议,这是一个一次性的工作,所以我不想仅仅为此创建一个二级索引。最后,我写了另一个mapreduce作业,它对每个行键进行了分类,并生成了一个带有开始行键和结束行键的输出,它允许我为scanCool使用setStart/EndRow属性,感谢更新。值得发布作为您自己问题的答案!所以你还在建立一个索引,有点…:)完成,谢谢你的建议,它指向了正确的方向:)