如何在 HBase 中联接表

  • 本文关键字:HBase mapreduce hbase
  • 更新时间 :
  • 英文 :


我必须连接 Hbase 中的表。

我整合了HIVE和HBase,效果很好。我可以使用 Hare 进行查询。

但是有人可以帮助我如何在不使用 Hbe 的情况下连接 HBase 中的表。我认为使用mapreduce我们可以实现这一目标,如果是这样,任何人都可以分享一个我可以参考的工作示例。

请分享您的意见。

我心里有办法。那是

如果我需要连接表 A x B x C;我可以使用 TableMapReduceUtil 遍历 A,然后在 TableMapper 中从 B 和 C 获取数据。然后使用 TableReducer 写回另一个表 Y。

这种方法会很好吗?

这当然是一种方法,但是如果您每个扫描行进行 2 次随机读取,那么您的速度将直线下降。 如果要显著筛选出行,或者 A 中的数据集很小,则可能不是问题。

排序合并联接

但是,HBase 0.96 中提供的最佳方法是 MultipleTableInput 方法。 这意味着它将扫描表 A 并使用允许表 B 匹配的唯一键写入其输出。

例如,表 A 发射(b_id、a_info),表 B 将发出(b_id、b_info)在减速器中合并在一起。

这是排序-合并联接的一个示例。

嵌套循环联接

如果要在行键上联接,或者联接属性按照表 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)

这是嵌套循环联接的一个示例。

更详细的连接算法在这里:

  • http://en.wikipedia.org/wiki/Nested_loop_join
  • http://en.wikipedia.org/wiki/Hash_join
  • http://en.wikipedia.org/wiki/Sort-merge_join

相关内容

  • 没有找到相关文章

最新更新