2015-02-23 19 views
1

我有一個巨大的txt數據存儲,我想在其中收集一些統計數據。Python&MapReduce:超越基礎知識 - 如何在一個數據庫上執行更多任務

使用Hadoop流和Python我知道如何實現MapReduce來收集單個列的統計信息,例如,請計算100個類別中每個類別的記錄數量。我創建了一個簡單的mapper.py和reducer.py,分別將它們作爲-mapper和-reducer插入到hadoop-streaming命令中。

現在,我在如何處理更復雜的任務時遇到了一些問題:除上述類別(例如地理位置,類型,日期等)之外,還收集各種其他列上的各種統計數據。所有這些數據都在相同的txt文件中。

我是否將mapper/reducer任務鏈接在一起?我最初是否會傳遞鍵值對(包括所有數據),並在處理過程中逐一「剝離」它們有趣的值?或者這是一個錯誤的道路?我需要關於人們如何在Python中爲單個數據源「粘合」各種MapReduce任務的實用建議。

回答

0

這個問題對我來說似乎很普通。 許多map-reduce作業鏈是生產就緒解決方案最常見的模式。但作爲程序員,我們應該總是嘗試使用較少數量的MR作業來獲得最佳性能(爲了實現這個目標,您必須聰明地選擇作業中的鍵值對),但是當然這取決於用例。有些人使用不同的Hadoop Streaming,Pig,Hive,JAVA MR等組合來解決一個業務問題。藉助任何工作流管理工具(如Oozie或bash腳本)的幫助,您可以設置作業之間的依賴關係。爲了在RDBMS和HDFS之間導出/導入數據,您可以使用Sqoop。

這是您的查詢的最基本的答案。如果你想對任何一點有進一步的解釋,請告訴我。

+0

Ashish,謝謝你提供這個答案。是的,這個問題本來就是通用的 - 我想知道開發人員在現實世界中如何處理這種情況,以及是否有最佳方法。您確認了我的想法:需要即興創作以最適合特定場景,並將多種技術粘合在一起。再次感謝你! – dust 2015-02-27 11:00:09