我必须在Hbase中加入表格。
我整合了HIVE和HBase,而且效果很好。我可以使用HIVE查询。
但有人可以帮助我如何在不使用HIVE的情况下连接HBase中的表格。我认为使用mapreduce我们可以实现这一点,如果有的话,任何人都可以分享一个我可以参考的工作示例。
请分享您的意见。
我有一个方法。也就是说,
如果我需要加入表格A x B x C; 我可以使用TableMapReduceUtil迭代A,然后从TableMapper中的B和C获取数据。然后使用TableReducer写回另一个表Y。
这种做法会不会很好。
答案 0 :(得分:13)
这当然是一种方法,但如果你每个扫描行进行2次随机读取,那么你的速度将会直线下降。如果要显着过滤掉行,或者在A中有一个可能不是问题的小数据集。
然而,HBase 0.96中可用的最佳方法是MultipleTableInput方法。这意味着它将扫描表A并使用允许表B匹配的唯一键来编写它的输出。
E.g。表A发出(b_id,a_info),表B将发出(b_id,b_info)在reducer中合并在一起。
这是排序合并连接的一个示例。
如果要加入行键或连接属性按表B排序,则可以在每个任务中都有一个扫描程序实例,它从表B中顺序读取,直到找到它要查找的内容。
E.g。表A row key =“companyId”和表B row key =“companyId_employeeId”。然后,对于表A中的每个公司,您可以使用嵌套循环算法获得所有员工。
for(company in TableA):
for(employee in TableB):
if employee.company_id == company.id:
emit(company.id, employee)
这是一个嵌套循环连接的例子。