1. 程式人生 > >Hadoop的執行原理

Hadoop的執行原理

簡介:

HDFS(Hadoop Distributed File System )Hadoop分散式檔案系統。是根據google發表的論文翻版的。論文為GFS(Google File System)Google 檔案系統(中文英文

HDFS

     儲存多個副本,且提供容錯機制,當副本丟失或宕機自動恢復。執行在廉價的機器上。HDFS預設將檔案block,64M為一個block。然後將block按鍵值對儲存在hdfs上,並將鍵值對的對映存到記憶體中。

hdfs是按照Moster和Slave的結構。分別問NameDode,DataNode,SecondaryNameDode

NameDode:是Moster節點,是管理層。管理資料塊,處理客戶端的讀寫要求,配置副本,管理HDFS的名稱空間。

SecondaryNameDode:幫忙分擔NameDode的工作量,是NameDode的冷備份,合併fsimage和edits然後再發給namenode。

DataNode:Slave節點,負責儲存client發來的資料塊block,執行資料塊的讀寫操作。

熱備份:2是1的熱備份,如果1壞掉,那麼2馬上代替1進行工作。

冷備份:2是1的冷備份,如果1壞掉,那麼2不能馬上代替1工作,但是2上面儲存著1的資訊,減少1壞掉後的損失。

fsimage:元資料映象檔案(檔案系統的目錄樹)

edits:元資料的操作日誌(針對檔案系統做的修改操作記錄)

NameDode記憶體中儲存的是fsimage和edits

SecondaryNameDode:負責定時預設一個小時,從NameDode上,獲取fsimage和edits合併,然後在傳送給NameDode,減少NameDode的工作量。

工作原理

寫的操作:

有一個檔案為File1,為一百兆左右。Client將file1寫道HDFS上。

HDFS按預設配置,HDFS分佈在三個機器上Rack1,Rack2,Rack3。

Client將檔案File1按照64兆分塊,分成兩塊,為block1和block2。

client向NameDode傳送寫資料請求,如圖藍色虛線。

NameDode節點,記錄block資訊,並返回可用的DataDode。如圖粉色虛線。

block1:host1,host2,host3

block2:host7,host7,host4

原理:NameDode具有RackAware機架感知功能。

           若client為DataDode節點,那麼儲存block時,規則為:副本1,同client的節點上,副本2,不同機架的節點上,副本3,同第二個副本上的另一個節點上,其他副本為隨機挑選。

           若client不為DataDode節點,那麼儲存block時,規則為:副本1,隨機選擇一個節點上,副本2,不同副本1的機架上,副本3,同於副本2上的一個機架上,不同的一個節點,其他副本隨機挑選。

client向DataDode傳送block1,傳送過程是以流式寫入。

寫入過程為

將64M的block1按照64k的package劃分:

 然後將第一個package傳送給host2;

host2接受完後,將第一個package傳送給host1,同時client向host2傳送第二個package。

 host1接受完後第一個package後,傳送給host3,同時接受host2傳送來的第二個package。

以此類推,如圖紅色實線,直到將block1傳送完畢。

host2,host1,host3向NameDode,host2箱client反饋訊息,已完成。粉紅實線。

傳送完block1後,再向host7,host8,host4,傳送block2如圖藍色實線。

傳送完block2後,host7,host8,host4向NameDode反饋,host7向client反饋資訊,如圖淺綠色實線。

client向NameDode傳送訊息,已完成。如圖黃色粗線實線。

分析,通過寫過程,我們可以瞭解到:

    寫1T檔案,我們需要3T的儲存,3T的網路流量貸款。

    在執行讀或寫的過程中,NameNode和DataNode通過HeartBeat進行儲存通訊,確定DataNode活著。如果發現DataNode死掉了,就將死掉的DataNode上的資料,放到其他節點去。讀取時,要讀其他節點去。

    掛掉一個節點,沒關係,還有其他節點可以備份;甚至,掛掉某一個機架,也沒關係;其他機架上,也有備份

讀操作:

如圖所示,client要從DataNode上讀取file1,file1是由block1和block2組成。

讀操作流程為:

client向NameDode傳送請求。

NameDode檢視Metadata資訊,返回file1的block的位置。

block1:host1,host2,host3

block2:host7,host8,host4

block的位置是有先後順序,先讀block1,再讀block2,而且block1去host2上讀取,然後block2,,去host7上讀取。

如果client位於機架外,那麼如果client,位於機架內摸個DataNode上,列如,client是host6,那麼讀取的時候,遵循的規則是,優先讀取本機機架上的資料。