1. 程式人生 > >什麼是Hadoop 它能做什麼

什麼是Hadoop 它能做什麼

Hadoop是什麼?能做什麼?

隨著我們網路的發達,科技的發達,我們網路上產生的資料越來越多,越來越大,那麼大到什麼地步,有10000G那麼大嗎?告訴你比那個大多了!那有1000T那麼大嗎?比那個也大多了,已經是單一的伺服器解決不了的,那麼我們不是可以多用幾臺伺服器就解決了?一臺一臺伺服器分別寫入和讀取資料是很麻煩的。

接著分散式檔案系統就應運而生了,它可以管轄很多伺服器用來儲存資料,通過這個檔案系統儲存資料時,我們就感覺在操作一臺伺服器一樣。分散式檔案系統管理的是一個伺服器叢集。在這個叢集中,資料儲存在叢集的節點(即叢集中的伺服器)中,但是該檔案系統把伺服器的差異給遮蔽了,我們的資料分佈在不同的伺服器中,分佈在不同節點上的資料可能是屬於同一個檔案

,為了組織眾多的檔案,把檔案放到不同的資料夾中,資料夾可以一級一級的包含。這種組織形式稱為名稱空間(namespace)。名稱空間管理著叢集中的所有檔案。名稱空間的職責和正真儲存真實資料的職責是不一樣的。負責名稱空間職責的節點稱為主節點(master node),負責儲存真實資料的職責的單稱為從節點(slave node)。主節點負責管理檔案系統的檔案結構,從節點負責儲存真實的資料,我們把這樣的結構稱為主從式結構(master-slave。使用者操作時也應該先和主節點打交道,查詢資料在哪些從節點上儲存,然後才從從節點儲存,然後再從從節點讀取。在主節點中,為了加快使用者的訪問速度,會把整個名稱空間資訊都放在記憶體中
,當儲存的檔案越多時,那麼主節點就需要越多的記憶體空間。在從節點儲存資料時,有的原始資料可能很大,有的可能很小,如果大小不一樣的檔案不容易管理,那麼抽象出一個獨立的儲存檔案單位,稱為:塊(block)。然後資料存放在叢集中,可能網路原因或者伺服器硬體原因造成訪問失敗,所以又才用了副本機制(replication),把資料同時備份到多臺伺服器中,這樣資料就更安全了。

對資料進行處理時,我們會把資料讀取到記憶體中進行處理。如果我們對海量資料讀取到記憶體中進行處理,比如資料大小是100T,我們要統計檔案中一共有多少個單詞。要想到檔案載入到記憶體中幾乎是不可能的,要想把資料載入到記憶體中幾乎也是不可能的。隨著技術發展,即使伺服器有

100T記憶體,這樣的伺服器也很昂貴,即使資料能夠載入到內容,那麼載入100T也是需要很長時間的。那麼這就是我們遇到的問題,那麼我們怎麼處理呢?是否可以把程式程式碼放到存放資料的伺服器上呢?(移動計算)因為程式程式碼相對於原始資料來說很小,幾乎是可以忽略不計的,所以省下了原始資料的傳輸的時間。現在資料是存放在分散式的檔案系統中,100T的資料可能存放在很多伺服器上,那麼就可以把程式碼分發到這些伺服器上,在這些伺服器上同時進行,也就是平行計算,這樣就大大縮短了程式執行的時間。分散式計算需要的是最終的結果,程式程式碼在很多伺服器上執行後會產生很多的結果,因此需要一段程式碼對這些中間結果進行彙總。Hadoop中的分散式計算一般分為兩個階段完成的,第一階段負責讀取各資料節點中的原始資料,進行初步處理,對各個節點的資料求單詞書。然後把處理結果傳輸到第二階段,對中間結果進行彙總,產生最終的結果。

在分散式計算中,程式程式碼應該允許放在哪些資料節點上,哪些節點執行第一階段的程式碼,哪些節點執行第二階段的程式碼;第一階段程式碼執行完畢後,傳輸到第二階段程式碼所在節點;如果中間執行失敗了,怎麼辦?等等問題,都需要管理。執行這些管理職責程式碼的節點稱為主節點(master node),執行第一二階段程式程式碼的節點稱為從節點(slave node)。使用者的程式碼應該提交給主節點,由主節點負責把程式碼分配到不同的節點執行。

hadoop中,分散式儲存系統統稱為HDFShadoop distributed file system)。其中,主節點為名位元組點(namenode)namenode就是masternamenode一是管理檔案系統檔案的元資料資訊(包括檔名稱、大小、位置、屬性、建立時間、修改時間等等),二是維護檔案到塊的對應關係和塊到節點的對應關係,三是維護使用者對檔案的操作資訊(檔案的增刪改查);從節點稱為資料節點(datanode),datanode就是slavedatanode主要是儲存資料的。master只有一個,slave可以有多個,這就是master/slave模式

hadoop中,分散式計算部分稱為Mapreduce。其中,主節點稱為作業節點(jobtracker),jobtracker就是masterjobtrackernamenode必須在同一臺伺服器上;從節點稱為從節點(tasktracker),tasktracker就是slavetasktracker必須執行在datanode上。master只有一個,slave可以有多個,這就是master/slave模式。在任務節點中,執行第一段的程式碼稱為map任務,執行第二段程式碼稱為reduce任務。