Hadoop基本原理之一:MapReduce
1、為什么需要Hadoop
? ? 目前,一塊硬盤容量約為1TB,讀取速度約為100M/S,因此完成一塊硬盤的讀取需時約2.5小時(寫入時間更長)。若把數(shù)據(jù)放在同一硬盤上,且全部數(shù)據(jù)均需要同一個程序進行處理,此程序的處理時間將主要浪費在I/O時間上。
? ? 在過去幾十年,硬盤的讀取速度并未明顯增長,而網(wǎng)絡(luò)傳輸速度此飛速上升。
? ? 因此,若把數(shù)據(jù)分散到多個硬盤上進行存儲(如分成100份存儲在100個硬盤上),則讀取數(shù)據(jù)所需時間大大減少,并將各節(jié)點處理好的結(jié)果通過網(wǎng)絡(luò)進行傳輸。
? ?但這將導致2個問題
? ?(1)數(shù)據(jù)被分散到多個硬盤中,某個盤發(fā)生故障導致部分數(shù)據(jù)出錯的可能性大大增加,因此需要對數(shù)據(jù)進行復制備份======>> HDFS!!
? ?(2)數(shù)據(jù)分散在多個盤,一般會在本地進行初步處理,,如何將處理結(jié)果進行合并============>>MapReduce!!!
2、基本節(jié)點
在Hadoop中,主要有以下5類節(jié)點:
(1) JobTracker?
(2) TaskTracker?
(3) NameNode?
(4) DataNode?
(5) SecondaryNameNode?
3、零碎理論
(1)Hadoop將MapReduce的輸入分成固定大小的切片,稱為input split。大多數(shù)情況下,切片的大小與HDFS塊的大小相等(默認情況下是64M)。
(2)
4、本地數(shù)據(jù)優(yōu)先
Hadoop傾向于在存儲數(shù)據(jù)的節(jié)點上進行map處理,這稱為data locality optimization。
(1)首先,hadoop傾向于將數(shù)據(jù)在本地節(jié)點進行數(shù)據(jù),如圖中的a.
(2)若存儲數(shù)據(jù)的節(jié)點有其它task正在進行處理,則在本機架內(nèi)尋找另一個節(jié)點進行數(shù)據(jù)處理,如圖中b。
(3)若本機架內(nèi)所有節(jié)點均有task正在進行處理,則在其它機架內(nèi)尋找節(jié)點進行數(shù)據(jù)處理。
5、MapReduce的數(shù)據(jù)流向
(1)單reducer情況
(2)多reducer情況
6、Combiner?
在map與reduce之間,可以增加combiner函數(shù),對map產(chǎn)生的結(jié)果進行預(yù)處理。
總結(jié)
以上是生活随笔為你收集整理的Hadoop基本原理之一:MapReduce的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Nutch2.2.1基础教程之6】Nu
- 下一篇: 8大排序算法图文讲解