Hadoop2.2.0 入門教程(序言)

學習全部的知識都是經歷這麼三個過程,what,why,how 

what:what is hadoop

那麼學習hadoop以前,先找到apache hadoop 官網,瞭解hadoophtml

hadoop官方網站
java

http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/CommandsManual.html

hadoop百度百科
node


1.1.1. hadoop的核心思想

Hadoop包括兩大核心,分佈式存儲系統和分佈式計算系統。apache

1.1.1.1. 分佈式存儲

爲何數據須要存儲在分佈式的系統中哪,難道單一的計算機存儲不了嗎,難道如今的幾個TB的硬盤裝不下這些數據嗎?事實上,確實裝不下。好比,不少的電信通話記錄就存儲在不少臺服務器的不少硬盤中。那麼,要處理這麼多數據,必須從一臺一臺服務器分別讀取數據和寫入數據,太麻煩了!安全

咱們但願有一種文件系統,能夠管轄不少服務器用於存儲數據。經過這個文件系統存儲數據時,感受不到是存儲到不一樣的服務器上的。當讀取數據時,感受不到是從不一樣的服務器上讀取。如圖2-1所示。這就是分佈式文件系統。服務器

wps_clip_image-24298

圖2-1網絡

分佈式文件系統管理的是一個服務器集羣。在這個集羣中,數據存儲在集羣的節點(即集羣中的服務器)中,可是該文件系統把服務器的差別屏蔽了。那麼,咱們就能夠像使用普通的文件系統同樣使用,可是數據卻分散在不一樣的服務器中。分佈式

在分佈式存儲系統中,分散在不一樣節點中的數據可能屬於同一個文件,爲了組織衆多的文件,把文件能夠放到不一樣的文件夾中,文件夾能夠一級一級的包含。咱們把這種組織形式稱爲命名空間(namespace)。命名空間管理着整個服務器集羣中的全部文件。很明顯,命名空間的職責與存儲真實數據的職責是不同的。集羣中不一樣的節點承擔不一樣的職責。負責命名空間職責的節點稱爲主節點(master node),負責存儲真實數據職責的節點稱爲從節點(slave node)。主節點負責管理文件系統的文件結構,從節點負責存儲真實的數據,稱爲主從式結構(master-slaves)。用戶操做時,也應該先和主節點打交道,查詢數據在哪些從節點上存儲,而後再從從節點讀取,如圖2-2所示。在主節點,爲了加快用戶訪問的速度,會把整個命名空間信息都放在內存中,當存儲的文件越多時,那麼主節點就須要越多的內存空間。在從節點存儲數據時,有的原始數據文件可能很大,有的可能很小,大小不一的文件不容易管理,那麼能夠抽象出一個獨立的存儲文件單位,稱爲塊(block)。數據存放在集羣中,可能由於網絡緣由或者服務器硬件緣由形成訪問失敗,最好採用副本(replication)機制,把數據同時備份到多臺服務器中,這樣數據就安全了,數據丟失或者訪問失敗的機率就小了。oop

wps_clip_image-9420

圖2-2學習

在以上的主從式結構中,因爲主節點含有整個文件系統的目錄結構信息,由於很是重要。另外,因爲主節點運行時會把命名空間信息都放到內存中,所以存儲的文件越多,主節點的內存就須要的越多。

在hadoop中,分佈式存儲系統稱爲HDFS(hadoop distributed file system)。其中,主節點稱爲名字節點(namenode),從節點稱爲數據節點(datanode)。

1.1.1.2. 分佈式計算

對數據進行處理時,咱們會把數據讀取到內存中進行處理。若是咱們對海量數據進行處理,好比數據大小是100GB,咱們要統計文件中一共有多少個單詞。要想把數據都加載到內存中幾乎是不可能的,稱爲移動數據。隨着技術發展,即便服務器有100GB內存,那麼服務器價格也會很高,不是普通老百姓可以消受得了得。即便數據可以加載到內存,那麼加載這100GB的數據到內存也要消耗很長時間。這些問題都在困撓着咱們對大數據的處理。也就是說移動計算的處理方式不適合大數據計算。

換個思路,既然移動數據不合適,那麼是否能夠把程序代碼放到存放數據的服務器上哪?由於程序代碼與原始數據相比,通常很小,幾乎能夠忽略的,因此省下了原始數據傳輸的時間了。如今,數據是存放在分佈式文件系統中,100GB的數據可能存放在不少的服務器上,那麼就能夠把程序代碼分發到這些服務器上,在這些服務器上同時執行,也就是並行計算,也是分佈式計算。這就大大縮短了程序的執行時間。咱們把程序代碼移動到數據節點的機器上執行的計算方式稱爲移動計算。

分佈式計算須要的是最終的結果,程序代碼在不少機器上並行執行後會產生不少的結果,所以須要有一段代碼對這些中間結果進行彙總。Hadoop中的分佈式計算通常是由兩階段完成的。第一階段負責讀取各數據節點中的原始數據,進行初步處理,對各個節點中的數據求單詞數。而後把處理結果傳輸到第二個階段,對中間結果進行彙總,產生最終結果,求出100GB文件總共有多少個單詞,如圖2-3所示。

wps_clip_image-23738

圖2-3

在分佈式計算中,程序代碼應該容許在哪些數據節點上,哪些節點運行第一階段的代碼,哪些節點運行第二階段的代碼;第一階段代碼執行完畢後,傳輸到第二階段代碼所在的節點;若是中間執行失敗了,怎麼辦?等等問題,都須要管理。運行這些管理職責代碼的節點稱爲主節點(master node),運行第一二階段程序代碼的節點稱爲從節點(slave node)。用戶的代碼應該提交給主節點,由主節點負責把代碼分配到不一樣的節點執行。

在hadoop中,分佈式計算部分稱爲MapReduce。其中,主節點稱爲做業節點(jobtacker),從節點稱爲任務節點(tasktracker)。在任務節點中,運行第一階段的代碼稱爲map任務(map task),運行第二階段的代碼稱爲reduce任務(reduce task)。

相關文章
相關標籤/搜索