如何在hbase中连接表

dha*_*han 10 hbase mapreduce

我必须在Hbase中加入表.

我整合了HIVE和HBase,效果很好.我可以使用HIVE查询.

但有人可以帮助我如何在不使用HIVE的情况下连接HBase中的表.我认为使用mapreduce我们可以实现这一点,如果有的话,任何人都可以共享一个我可以参考的工作示例.

请分享您的意见.

我有一个方法.那是,

如果我需要加入表格A x B x C; 我可以使用TableMapReduceUtil迭代A,然后从TableMapper中的B和C获取数据.然后使用TableReducer写回另一个表Y.

这种方法是否会很好.

Bry*_*yan 13

这当然是一种方法,但如果你每扫描一行进行2次随机读取,那么你的速度将会直线下降.如果要显着过滤行,或者在A中有一个可能不是问题的小数据集.

排序合并加入

然而,在HBase 0.96中可用的最佳方法是MultipleTableInput方法.这意味着它将扫描表A并使用允许表B匹配的唯一键来编写它的输出.

例如,表A发出(b_id,a_info),表B将发出(b_id,b_info)在reducer中合并在一起.

这是排序合并连接的示例.

嵌套循环连接

如果要加入行键或连接属性按表B排序,则可以在每个任务中都有一个扫描程序实例,它从表B中顺序读取,直到找到它要查找的内容.

例如,表A行键="companyId"和表B行键="companyId_employeeId".然后,对于表A中的每个公司,您可以使用嵌套循环算法获得所有员工.

伪代码:

for(company in TableA):
    for(employee in TableB):
        if employee.company_id == company.id:
            emit(company.id, employee)
Run Code Online (Sandbox Code Playgroud)

这是嵌套循环连接的示例.

更详细的连接算法如下: