主從結構
主節點,隻有一個: namenode
從節點,有很多個: datanodes
在版本1中,主節點隻有一個,在 版本2中主節點有兩個。
namenode 負責(管理):
接收使用者操作請求 維護檔案系統的目錄結構 管理檔案與 block 之間的關系, block 與 datanode 之間關系
block 是 檔案分成的 塊, hdfs 中預設的 block 塊的大小是64M ,實際的檔案肯定會分很多塊存儲。
datanode 負責(存儲):
存儲檔案 檔案被分成 block 存儲在磁盤上 為了保證資料安全,檔案會有多個副本
在MapReduce 執行計算任務的時候,計算任務的節點。
Hadoop 在存儲檔案的時候,檔案會有多個副本。
因為 Hadoop 是分布式的存儲與計算平台,他使用的是廉價的伺服器,廉價的伺服器可能會發生故障,如果發生故障了,那麼資料就不能用了,
hadoop 為了提高系統的安全性,對資料進行了備援存儲, 預設情況下資料的副本 是 3. 比如 10G的電影,實際在HDFS中存放的大小不是10G ,而是 30G 。
而在具體資料通路的時候,namenode 會根據不同的 datanode 具體的狀況,這種狀況包括 他的存儲空間、繁忙情況、記憶體等等從三個副本中選出一個副本去使用 , 另外兩個副本就是空閑狀态。當這個副本出現問題的時候就會切換到另外一個副本。當然切換回去之後,這個出問題的副本可以得到恢複(與其他副本同步)。
從用戶端(java、指令端、其他語言開發的終端….)送出的資料到 namenode , namenode 這時就會看整個叢集中的 datanode 中誰屬于空閑,誰可用,都會有自己的算法 (關于算法可以從源碼的方向上進行了解), 然後确定把資料存儲在哪幾台機器上,然後 這些用戶端就會直接和這些 datanodes打交道,把資料直接交給具體的資料節點。當然資料節點在存儲資料的過程中,肯定會有一些日志資訊(管理與block之間的關系、block與datanode之間的關系),每一次叢集啟動的時候,datanode都會把中繼資料資訊(關于 datanode内部怎麼組織的)報告給 namenode, 這樣namenode 才能知道 datanode 具體是怎麼組織的 然後才能夠管理。
開始做,堅持做,重複做