2014-05-22 72 views
1

我是新來的MapReduce,我有處理大量數據(記錄行)的任務。有一件事我應該用在我的映射器特定記錄的行號,然後減速機處理基於映射行號信息。數據如何在MapReduce的datanodes中分佈?

舉例來說,現在假設我有一個input.txt中,這是非常大的,每一行看起來是這樣的:

1. Melo, apple, orange 
2. orange, perl 
3. apple, banana, car 
... 
10000. Apple 
... 

如果我想cacluate蘋果occurency在其occurency線數量方面有什麼,然後cacluate這些不同的水果之間的關係,如:

Apple => orange 

我可以在鍵/值對像行號的列表中選擇值。但是由於我不知道數據是如何分配給不同的數據節點的,因此原始輸入文件的行號信息將會丟失。我不知道數據如何在數據節點之間分配,它是基於第一個記錄的偏移量嗎?或分區數據的大小?

我已經看過了幾個教程,我仍然感到困惑的MapReduce的確切工作流。另外,我打算使用亞馬遜彈性mapreduce並使用Python。

也許我在此討論談論同樣的事情,但據我所知,有當時或討論中沒有解決方案。這樣對嗎?

http://lucene.472066.n3.nabble.com/current-line-number-as-key-td2958080.html

謝謝!

回答

0

這裏是映射精簡的確切工作流:

輸入文件被分成將由映射器處理多個塊, 每個映射器的輸出將是一個(鍵,值)對。

所有這些對(鍵,值)分發到減速之前,需要對它們進行洗牌,通過鍵排序,使相關聯的特定鍵的所有值將被髮送到相同的減速。

因此減速將得到作爲輸入(鍵,[值1,值2,值3,...,值N])。 (蘋果,2),(蘋果,3)..我們回到你的例子,你可以使用地圖級別(術語,行號)作爲(鍵,值) (蘋果,10000)

的減速將收到(蘋果,[2,3,...,10000]),然後只要你喜歡,你可以處理它。