我不得不加入表中的HBase。
我综合HIVE和HBase的,并且运作良好。 我可以查询使用HIVE。
但有人可以帮助我如何加入HBase的表,而无需使用HIVE。 我认为使用MapReduce的,我们可以做到这一点,如果是的话有谁能够分享工作的例子,我可以参考。
请分享您的观点。
我想到的方法。 那是,
如果我需要JOIN表阿X B X C。; 我可以用TableMapReduceUtil遍历A,再由B和C的TableMapper内获取数据。 然后使用TableReducer写回另一个表Y.
请问这种做法是一个很好的一个。
这当然是一种方法,但每行的扫描,如果你正在做2随机读取,然后你的速度将下降。 如果你是出显著过滤行或有一个小的数据集可能不会是一个问题。
排序合并连接
但是最好的方法,这将是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