2012-06-01 139 views
2

我是hadoop mapreduce框架的新手。我自己閱讀了很多教程並理解了框架。我已經成功配置了僞分佈式模式的hadoop設置。我有兩個特定的任務需要在Hadoop MapReduce中完成。Hadoop MapReduce思維

我有很多很多數據文件,格式如下。

交換消息的數量; USER1;用戶2;時間戳;

一個例子是:5; John Doe;約翰·史密斯; 1/1/1900;

我想什麼來完成是

  1. 做數據上的用戶名遮蔽(像用戶名上構建SHA256,所以他們是匿名的。)

  2. 聚集的數交換在一定時期內的消息(比如一週)

現在讓我們來對我的問題: 據我目前所知,該hadoop mapreduce框架旨在完成第二項任務。我可以映射鍵值(兩個用戶名之間交換消息,消息的數量),並減少它獲得在給定的時間段內(例如1周)的消息總數。但是第一項任務呢?當我做數據屏蔽時,沒有減少操作,這個任務不是hadoop mapreduce的東西嗎?我想要並行執行,但不能真正想到應用hadoop mapreduce來完成第一項任務。我需要處理的數據文件數量非常大,因此無論如何都會考慮使用hadoop mapreduce。

感謝您的意見!

P.S .:這個問題可以概括爲「哪種類型的任務是hadoop MapReduce最適合的?」

+0

爲什麼你不能做地圖部分做轉換? Map/Reduce的Map部分也可以用來轉換數據,所以你的任務是:Map - > Record to#;編碼用戶1;編碼用戶2;日期。 Reduce會將它轉換成你需要的統計數字 – abatyuk

+0

你說得對,我只能做地圖部分。當我只做地圖部分時,是否是一種很好的方法,將被屏蔽的記錄文件存儲回HDFS,並再次讀取它以在被屏蔽的記錄上執行減少作業?主內存不能保存整個數據集。 – Bob

+0

據我瞭解,reducer等待mappers完成他們的工作,在我的情況下意味着所有的數據文件都必須進行轉換。你能解釋一下你在想的工作流程嗎? – Bob

回答

2

第一個任務是一個完美適合只有地圖的工作。 MapReduce通常適用於排序,映射(對數據應用一些奇特功能)並減少數據。

所以你的問題很適合MR。

如果您需要強大的任務之間的通信或迭代繁重的任務(如圖算法),MapReduce並不適合。因爲BSP最適合,所以您可以選擇Hama或Giraph,而Giraph提供主要的圖形處理,而Hama則是純粹的BSP框架,它也具有圖形處理模塊。

+0

我可以分開地圖並相互減少嗎?我以爲我總是需要在啓動一切的驅動程序類的同時實現映射器和減速器? – Bob

+1

您可以運行映射器。但是,如果你只需要一個減速器,你必須運行馬歇爾。驅動程序類只是設置作業,在那裏您可以將numReduceTasks設置爲零並且不定義reduce類。 –