1. 程式人生 > >Hadoop筆記系列一

Hadoop筆記系列一

Hadoop

hadoop起源:

Hadoop起源於開源網路搜尋引擎Apache Nutch。Apache Nutch是Lucene專案的一部分,Lucene是文字搜尋系統庫,Nutch是一個執行的網頁爬取工具和搜尋引擎系統。2003年的論文,描述谷歌產品架構,GFS(Google File System),2004年Nutch開發者開始著手做開源版本的實現,即Nutch分散式檔案系統(NDFS),2004年穀歌又發表論文介紹MapReduce系統,Nutch開發人員又在Nutch上實現了MapReduce系統,2006年,開發人員將NDFS和MapReduce移出Nutch形成了Lucene的一個子專案,命名為Hadoop。

MapReduce:(hadoop的處理資料方式)

MapReduce是一種可用於資料處理的程式設計模型,Hadoop可以執行各種語言版本的MapReduce程式,MapReduce程式本質上是並行的,可將大規模的資料分析任務分發給任何一個擁有足夠多機器的資料中心。

map,reduce分為兩個階段,每階段都是以鍵值對作為輸入和輸出,需要提供map和reduce函式,

map階段的輸入是原始資料,它產生中間結果,而reduce是接受中間結果,對資料繼續進行處理,產生最終的結果。

hadoop提供了不同語言的map和reduce實現方式,可根據需要使用。

MapReduce作業(job):客戶端需要執行的工作單元,包括輸入資料,MapReduce程式,配置資訊。

任務(task):hadoop將作業分成若干個任務來執行,任務分兩類,map任務和reduce任務,任務在叢集上執行,並通過YARN進行排程,如果任務失敗,則將在另一個不同的節點上自動重新排程執行。

分片:hadoop將MapReduce的輸入資料劃分成等長的小資料塊,稱為輸入分片或簡稱分片,hadoop為每個分片構建一個map任務,並由改任務來執行使用者自定義的map函式從而處理分片中的每條記錄。一個合理的分片大小趨向於HDFS的一個塊的大小,即預設是128MB。原因:在HDFS中,資料的儲存是按照HDFS儲存塊來進行的,HDFS的塊大小為128MB,如果分片的大小大於塊的大小,則對於任何一個HDFS節點,基本都不可能同時儲存這兩個資料塊,因此分片中的部分資料需要通過網路傳輸到map任務執行的節點,這樣會降低執行效率。      

HDFS分散式檔案系統

管理跨多臺計算機儲存的檔案系統稱分散式檔案系統,Hadoop提供一個分散式檔案系統,稱之HDFS.

對計算機的磁碟來說,磁碟中最小的物理儲存單位是扇區,通常情況下每個扇區是512位元組,部分廠商擴充扇區為4096個位元組,而磁碟塊,是作業系統中最小的邏輯儲存單位,作業系統與磁碟打交道的最小單位是磁碟塊,因為扇區的儲存資料的量比較小,定址比較麻煩,作業系統將相鄰的扇區組合在一起,形成一個塊,再對塊進行整體的操作,作業系統是通過塊做為單位讀取和操作資料,檔案系統是作業系統的一部分,所以檔案系統操作檔案的最小單位是塊,一個塊=一個扇區*2n次方。

HDFS中的塊的大小預設為128MB,HDFS上的檔案被劃分為塊大小的多個分塊,作為獨立的儲存單元,優點是:塊可以大於網路中任意一個磁碟的容量,同時,簡化了儲存子系統的設計。

HDFS的節點型別:namenode(管理節點),datanode(工作節點)

namenode管理名稱空間,它維護檔案系統樹即整個樹內的所有檔案和目錄,這些資訊儲存在本地系統的名稱空間映象檔案和編輯日誌檔案,namenode也記錄各個檔案中各個塊所在的資料節點資訊。namenode節點可以看做是一個索引,他有datanode節點的列表,以及開始地址。

datenode是檔案系統的工作節點,他們根據需要儲存並檢索資料塊,並且定期向namenode傳送它們所儲存的塊的列表。

沒有namenode,檔案系統將無法使用,namenode損壞,所有檔案將丟失,因為不知道如何根據datanode的塊重建檔案。

對namenode的保護機制是⑴備份組成檔案系統元資料持久狀態的檔案⑵執行一個輔助namenode,但是它不能被用作namenode,輔助namenode定期合併編輯日誌與名稱空間映象,防止編輯日誌過大,輔助namenode一般在另一臺機器上執行,因為其會消耗大量的CPU,同時輔助namenode儲存的狀態會滯後於主節點,所以當主節點發生故障的時候,有可能會丟失一些資訊。

YARN:

YARN(Yet Another Resource Negotiator)是hadoop的叢集資源管理系統,YARN提供了請求和使用叢集資源的API,但這些API很少直接用於使用者程式碼,YARN是為了改善MapReduce的實現。

YARN的兩類守護程序:管理叢集上資源使用的資源管理器(resource manager),執行在叢集中所有節點上且能夠啟動和監控容器的節點管理器(node manager),容器用於執行特定應用程式的程序,每個容器都有資源限制。容器可以是一個程序。

YARN中的排程:

如何處理YARN應用發出的資源請求(資源請求:任務所需要的容器資源,即容器需要的計算機資源數量(記憶體,CPU)),YARN排程器的工作就是根據既定的策略為應用分配資源。YARN中有三種排程器:

⑴FIFO排程器:不需要任何配置,不適合共享叢集,FIFO排程器將應用放置在一個佇列中,然後按照提交的順序執行應用,但是如果先進入佇列的應用請求分配的資源過大,則後面的小的請求則一直處於等待狀態。

⑵容量排程器:允許多個組織共享一個Hadoop叢集,每個組織可以分配到全部叢集資源的一部分,沒哥哥組織被配置一個專門的佇列,每個佇列被配置為可以使用一定的叢集資源。彈性佇列:單個作業使用的資源不會超過其佇列的容量,當佇列中有多個作業,恰好佇列中有可用的空閒資源,那麼容量排程器可能會將空餘的資源分配給佇列中的作業,即使會超出佇列容量。

⑶公平排程器:不需要預留一定量的資源,排程器會在所有執行的作業之間動態平衡資源。