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,那麼讀取的時候,遵循的規則是,優先讀取本機機架上的資料。