HBase 链 MapReduce 作业,将较小的表广播到所有 Mapper

Posted

技术标签:

【中文标题】HBase 链 MapReduce 作业,将较小的表广播到所有 Mapper【英文标题】:HBase chain MapReduce job with broadcasting smaller tables to all Mappers 【发布时间】:2014-07-02 23:47:49 【问题描述】:

我正在尝试针对 HBase 表中存在的数据编写一个链式 MapReduce 作业,并且需要一些有关此概念的帮助。我不希望人们基于 HBase 的 Java API 通过伪代码提供代码会很好。

简而言之,我想做的是,

MapReduce 作业 1: 从没有公共行键的两个表中读取数据,并在 reducer 中从它们中创建摘要。 reducer 的输出是一个 Java 对象,其中包含已序列化为字节码的摘要。我将此对象存储在 HBase 的临时表中。

MapReduce 作业 2: 这是我遇到问题的地方。我现在需要读取这个摘要对象,以便它在每个映射器中都可用,这样当我从第三个(不同的)表中读取数据时,我可以使用这个摘要对象对我从第三个表中读取的数据执行更多计算.

我阅读了分布式缓存并尝试实现它,但这似乎没有成功。如果需要,我可以以编辑的形式提供更多详细信息,因为我现在不想用可能无关紧要的细节向这个问题发送垃圾邮件。

【问题讨论】:

【参考方案1】:

好吧,这听起来可能很愚蠢,但是如果我们有一个非常小的要查询的表,我们可能会使用 HBase Java API(即使在 MapReduce 作业中)读取值,然后将它们存储在静态变量中.这样,我们每个 Mapper 只需要读取一次这些值,而且开销不会太大。

【讨论】:

以上是关于HBase 链 MapReduce 作业,将较小的表广播到所有 Mapper的主要内容,如果未能解决你的问题,请参考以下文章

如何以编程方式确定如何将较小的盒子装入较大的包装中? [关闭]

Android ImageView 将较小的图像缩放到具有灵活高度的宽度,而不会裁剪或扭曲

在 git 中,如何避免将较小的更正合并到在原始内容的每一行之间插入一行新内容的分支中的冲突?

原生 mapreduce VS hbase mapreduce

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

将多个顺序 HBase 查询的结果传递给 Mapreduce 作业