繁体   English   中英

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

[英]How can I limit the scan of HBase to only relevant (Unfiltered) regions for the MapReduce job

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

不可能通过行键限制扫描,因为它不包含所需的信息。

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

我不是在寻找答案:

  • 在映射器中实现“手动”过滤。
  • 增加超时间隔。

我正在寻找的是其中之一:

  • 有关如何解决此问题的文章的链接。

  • 一个有效的解决方案或想法(不一定带有代码),不涉及通过映射器运行完整的 HBase 表。 或者至少(让我们成为现实)减少映射器内的计算负载。

  • 确认没有有效的方法可以做到这一点,因为我花了很多时间来寻找这一点。

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

谢谢指教。

为了解决这个问题,我创建了一个 MR 工作。

Mapper 将每个行键归入其中一个类别,并为每种类型选择第一个和最后一个元素(因为所有内容都在一个区域内排序)。 为了选择最后一个元素,我一直在更新单个对象并分配每个值,这些值将登陆映射器。 然后我在清理阶段将这两个值写入上下文(classifier_name 作为键,row_key 作为值)。

映射器的输出很轻(类别数 * 2),所以我将减速器的数量设置为 1,并编写了一些基本逻辑来创建具有 low_row/high_row 的对象,这些逻辑在飞行中更新,我不必排序最后什么都可以。 所以最终输出的形式是:
classifier_name, start_rowKey, end_rowKey

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

希望这会帮助某人:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM