2012-07-04 24 views
8

我必須在Hbase中加入表格。如何在hbase中加入表格

我整合了HIVE和HBase,並且運行良好。我可以使用HIVE進行查詢。

但有人可以幫助我如何在不使用HIVE的情況下在HBase中連接表。我認爲使用mapreduce可以實現這一點,如果有的話,任何人都可以共享一個我可以參考的工作示例。

請分享您的觀點。

我有一個想法。也就是,

如果我需要加入表格A×B×C; 我可以使用TableMapReduceUtil遍歷A,然後在TableMapper內部從B和C獲取Data。然後使用TableReducer寫回到另一個表Y.

這種方法是否合適?

回答

12

這當然是一種方法,但是如果您對每個掃描行執行2次隨機讀取,那麼您的速度將會直線下降。如果您要顯着過濾行,或者在A中有小數據集,這可能不是問題。

排序合併連接

但是最好的方法,這將是HBase的0.96可用,是MultipleTableInput方法。這意味着它將掃描表A並使用唯一鍵寫入輸出,這將允許表B匹配。

E.g.表A發出(b_id,a_info)並且表B將發出(b_id,b_info)在縮減器中合併在一起。

這是排序合併連接的示例。

嵌套循環連接

如果要加入該行鍵或連接屬性與表B線排序,你可以在其中依次從表B中讀取,直到每個任務掃描儀的一個實例它發現它在尋找什麼。

E.g.表A行鍵=「companyId」和表B行鍵=「companyId_employeeId」。然後,對於表A中的每個公司,您可以使用嵌套循環算法獲得所有員工。

僞代碼:

for(company in TableA): 
    for(employee in TableB): 
     if employee.company_id == company.id: 
      emit(company.id, employee) 

這是一個巢循環的示例加入。

更詳細的連接算法在這裏:

+0

MultipleTableInput - 是在現在的HBase的任何版本中,此可用?它是基於map-reduce嗎?或者它可以實現Real-Timeish響應? – Shengjie

+0

@Shengjie,MultipleTableInput如答案中所提到的那樣包含在0.96中,但如果您有權訪問更改日誌查找HBASE-3996。 https://issues.apache.org/jira/browse/HBASE-3996 – Bryan