来自两个HBase表的MapReduce

时间:2014-03-12 09:44:19

标签: hadoop mapreduce hbase

我是Hadoop和HBase概念的新手。如果我的问题的答案太明显,请原谅我。

我需要从两个HBase表中获取销售报告。我试图在这里代表我正在处理的问题最简化的形式。有两个表,产品和销售。

产品表

ProductCode   ProductName
-----------   -----------
APL                Apple
BAN                Banana
MNG                Mango
ORG                Orange

销售表

ProductCode    Quantity
---------    ----------
MNG                 100
BAN                   8
MNG                   3
APL                  24
APL                  57
BAN                  33
ORG                  40
ORG                  15

我需要减少的输出类型:

报告

Product Name    Total Sales
==========     ========
Apple              81
Banana             41
Mango             103
Orange             55

唯一不同的是,这两个表都包含数百万条记录。

我正在尝试使用Apache HBase Documentation中的map reduce示例: http://hbase.apache.org/book/mapreduce.example.html

但是我找不到在Map Reduce中使用两个表的方法。

这样做的正确方法是什么?

此时任何建议都会有很大帮助。

2 个答案:

答案 0 :(得分:1)

嗯,这是一个'加入'问题:

1 /如果产品表很小,假设少于200MB,您可以通过导出表来执行复制连接,并在仅映射器驱动程序中使用它

2 /如果两个表都非常大,请使用链式作业:销售组/计数的作业然后将输出用于产品上的下一个作业

3 /如果两个表都是真正的biiiiiiig,Hbase在平面数据方面表现非常好。因此,最有效的方法应该是将产品数据放在sales表中。非规范化是Hadoop的关键。

我建议你阅读这本优秀的书:MapReduce设计模式(http://shop.oreilly.com/product/0636920025122.do

答案 1 :(得分:1)

假设两个表都由产品代码键入,您可以执行合并连接:映射一个表,然后使用第一个表中的键扫描第二个表(开始行==键,结束行==密钥,最后一个字节递增)。

如果你有复合键,这甚至可以工作,只要产品代码(你要加入的东西)是两个表中键的第一部分。

否则,@ Treydone的建议是要走的路。