2011-07-15 60 views
0

我工作的一個解析它使用具有初級和次級鍵記錄的大型數據集:Hadoop的定製與可寫第二遍

  • 主鍵
  • 二級鑰匙
  • 附加字段

初級 - 次級映射是一對多(主要是'一')。我想在我的輸出中使用每個主要唯一輔助數的數量。最多不超過幾千個每小學輔助人員。

我能想到的這樣做的方法有兩種:

  • 定義從地圖輸出的唯一次級自定義可寫類型,其包含了一組(散列表,列表,等等)。在單個map/reduce週期中執行所有操作,其中reducer在輔助鍵集合上進行聯合。
  • 在自己的操作中執行主/次計數,並消耗次要作業中的輸出。

前者可能會遇到一些尺寸問題與輸出(其中密鑰集可能會變得很大)。後者將需要迭代源數據兩次。

任何人都可以提出什麼更好的方法會在這裏?

我也在考慮使用Hive - 也許生成一個包含所有這些數據並使用Hive請求進行分組的表更合理?

回答

0

我會嘗試直接從映射器發射「主要」 - 「次要」鍵值對,然後計算reducer中唯一的輔助鍵。如果最多有幾千個二級值 - 它不應該是任何問題。在同一時間,如果你有外部數據集 - 你可以預料到一些數據的不規則性,它會打擊一些限制在reducer中處理的獨特輔助數的限制 - 例如達到100K值時的停止處理和報告錯誤。
如果您希望在一個分區中使用主要值的良好局部性 - 組合器將會很好地減少中間數據。
關於蜂巢 - 如果數據是合適的格式,絕對有必要嘗試一下。當我們計劃漿液性MR優化時,我發現了一些情況,然後發現Hive做得足夠好。