HDFS體系結構簡介及優缺點數據庫
體系結構簡介網絡
HDFS是一個主/從(Master、Slave)體系結構,從最終用戶的角度來看,它就像傳統的文件系統同樣,能夠經過目錄路徑對文件執行CRUD(建立,讀取,修改,刪除)等操做。但因爲分佈式存儲的性質,HDFS集羣擁有一個NameNode和多個DataNode。NameNode管理文件系統的元數據,DataNode存儲實際的數據。客戶端經過同NameNode和DataNode的交互訪問文件系統。客戶端聯繫NameNode以獲取文件的元數據,而真正的文件I/O操做是直接和DataNode進行交互的。分佈式
NameNode:oop
NameNode是整個文件系統的管理節點.spa
做用:日誌
一、負責管理文件系統的命名空間、集羣配置信息和存儲塊的複製;xml
二、維護着整個文件系統的文件目錄樹和文件根目錄的元信息和每一個文件對應的數據塊列表;內存
三、接收用戶的操做請求;同步
四、管理文件與block之間的關係,block與DataNode之間的關係;it
NameNode會將文件系統的Meta-Data存儲在內存中,這些信息主要包括了文件信息、每個文件對應的文件塊的信息和每個文件塊在DataNode的信息等。沒有NameNode,文件系統將沒法使用。實現上,若是運行NameNode服務的機器毀壞,文件系統上全部的文件將會丟失,由於咱們不知道若是根據DataNode的塊來重建文件。所以,對NameNode實現容錯很是重要,Hadoop爲此提供了2種機制:
第一種機制:備份哪些組成文件系統元數據持久狀態的文件。Hadoop能夠經過配置使NameNode在多個文件系統上保存元數據的持久狀態,這些寫操做是實時同步的,是原子操做,通常的配置是將持久狀態寫入本地磁盤的同時,寫入一個遠程掛載的網絡文件系統(NFS)。
第二種機制:運行一個輔助NameNode,但它不能被用做NameNode.這個輔助NameNode的重要做用是按期經過編輯日誌合併命名空間鏡像,以防止編輯日誌過大。這個輔助NameNode通常在另外一臺單獨的物理計算機上運行,由於它須要佔用大量CPU時間與NameNode相同容量的內存來執行合併操做。它會報出合併後的命名空間鏡像的副本,並在NameNode發送故障時啓用,可是,輔助NameNoDE報錯的狀態總數滯後於主節點,因此在主節點所有失效時,不免會丟失部分數據。在這種狀況下,通常把存儲在NFS上的NameNode元數據複製到輔助NameNode並做爲新的主NameNode運行。
NameNode中的文件:
fsimage:元數據鏡像文件。存儲某一時段NameNode內存中的元數據信息。
edits:操做日誌文件。
fstime:保存最近一次checkpoint的時間。
SecondaryNameNode:
HA(雙機集羣系統簡稱)的一個解決方案,並不是NameNode的熱備。
做用:
一、輔助NameNode分擔其工做量;
二、按期合併fsimage和edits,並推送給NameNode;
三、減小NameNode啓動時間;
四、在緊急狀況下,可輔助恢復NameNode;
執行過程:
從NameNode上下載元數據信息(fsimage,edits),而後把兩者合併,生成新的fsimage,在本地保存,並將其推送到NameNode,同時重置NameNode的edits。
DataNode:
DataNode是提供真實文件數據的存儲服務,是文件存儲的基本單元,它將Block存儲在本地文件系統中,保存了Block的Meta-data,同時週期性地將全部存在的Block信息發送給NameNode。
DataNode也是文件系統的工做節點,它們根據須要存儲並檢索數據庫(受客戶端或NameNode調度),而且按期向NameNode發送它們所在存儲的塊的列表。
塊(Block)是DataNode中最基本的存儲單位。
數據塊的概念:
對於文件內存而言,一個文件的長度大小是size,那麼從文件的0偏移開始,按照固定的大小,順序對文件進行劃分並編號,劃分好的每個塊稱爲一個Block。
在HDFS中,HDFS默認Block大小是64MB,不一樣於普通文件系統的是,HDFS中,若是一個文件小於一個數據塊的大小,並不會佔用整個block的存儲空間。
爲何HDFS中的數據塊如此之大?
HDFS的塊比磁盤塊大,其目的是爲了最小化尋址開銷。若是塊設置得足夠大,從磁盤傳輸數據的時間能夠明顯大於這個快開始位置所需的時間。這樣,傳輸一個由多個塊組成的文件的時間取決於磁盤傳輸速率。
在不少狀況下HDFS使用128MB的設置。可是該參數也不會設置得過大,MapReduce中的map任務一般一次處理一個塊中的數據,所以若是任務數太少(少於集羣中的節點數據),做業的運行速度就會比較慢。
每一個文件有多個複本,HDFS中默認是3個。可在hdfs-site.xml中配置(dfs.replication屬性)。
HDFS中的Master:
在Hadoop中的conf下的Master配置文件中,在此文件中的節點主要的做用:
一、管理HDFS的名稱空間;
二、管理數據塊映射信息;
三、配置複本策略;
四、處理客戶端讀寫請求;
HDFS中的Slave:
配置在Hadoop中conf目錄下的Slaves文件中的節點主要做用:
一、存儲實際的數據塊;
二、執行數據塊讀/寫;
HDFS中的Client:
做用:
一、文件切分與NameNode交互,獲取文件位置信息;
二、與DataNode交互,讀取或者寫入數據;
三、管理HDFS;
四、訪問HDFS;