我是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中使用两个表的方法。
这样做的正确方法是什么?
此时任何建议都会有很大帮助。
答案 0 :(得分:1)
嗯,这是一个'加入'问题:
1 /如果产品表很小,假设少于200MB,您可以通过导出表来执行复制连接,并在仅映射器驱动程序中使用它
2 /如果两个表都非常大,请使用链式作业:销售组/计数的作业然后将输出用于产品上的下一个作业
3 /如果两个表都是真正的biiiiiiig,Hbase在平面数据方面表现非常好。因此,最有效的方法应该是将产品数据放在sales表中。非规范化是Hadoop的关键。
我建议你阅读这本优秀的书:MapReduce设计模式(http://shop.oreilly.com/product/0636920025122.do)
答案 1 :(得分:1)
假设两个表都由产品代码键入,您可以执行合并连接:映射一个表,然后使用第一个表中的键扫描第二个表(开始行==键,结束行==密钥,最后一个字节递增)。
如果你有复合键,这甚至可以工作,只要产品代码(你要加入的东西)是两个表中键的第一部分。
否则,@ Treydone的建议是要走的路。