MapReduce的一個通俗解釋
阿新 • • 發佈:2018-12-11
1. 輸入(input):如給定一個文件,包含如下四行:
Hello Java
Hello C
Hello Java
Hello
C++
2. 拆分(split):將上述文件中每一行的內容轉換為key-value對,即:
0 - Hello Java
1 - Hello C
2 – Hello Java
3 - Hello C++
3. 對映(map):將拆分之後的內容轉換成新的key-value對,即:
(Hello , 1)
(Java , 1)
(Hello , 1)
(C , 1)
(Hello , 1)
(Java , 1)
(Hello , 1)
(C++ , 1)
4. 派發(shuffle):將key相同的扔到一起去,即:
(Hello , 1)
(Hello , 1)
(Hello , 1)
(Hello , 1)
(Java , 1)
(Java , 1)
(C , 1)
(C++ , 1)
注意:這一步需要移動資料,原來的資料可能在不同的datanode上,這一步過後,相同key的資料會被移動到同一臺機器上。最終,它會返回一個list包含各種k-value對,即:
{ Hello: 1,1,1,1}
{Java: 1,1}
{C: 1}
{C++: 1}
5. 縮減(reduce):把同一個key的結果加在一起。如:
(Hello , 4)
(Java , 2)
(C , 1)
(C++,1)
6. 輸出(output): 輸出縮減之後的所有結果。