我正在尝试为HBase表中的数据写一个链式MapReduce作业,需要一些概念方面的帮助。我不期望人们提供基于HBase的Java API的伪代码,这会很好。
简而言之,我想做的是,
MapReduce Job 1:从两个没有公共行键的表中读取数据,并在reducer中创建汇总。reducer的输出是一个Java对象,其中包含已序列化为字节码的摘要。我将这个对象存储在HBase的临时表中。
MapReduce Job 2:这就是我的问题所在。现在我需要读取这个摘要对象,使它在每个映射器中都可用,以便当我从第三个(不同的)表中读取数据时,我可以使用这个摘要对象对从第三个表中读取的数据执行更多的计算。
我读了关于分布式缓存的文章,并试图实现它,但似乎没有成功。如果需要的话,我可以以编辑的形式提供更多的细节,因为我现在不想用可能不相关的细节来垃圾邮件这个问题。
好吧,这可能听起来很愚蠢,但是如果我们有一个非常小的表要查询,我们可能可以使用HBase Java API读取值(即使在MapReduce作业中),然后将它们存储在静态变量中。这样,每个Mapper只需要读取一次这些值,并且不会有太多的开销。