【簡介】node
一、hdfs架構linux
hdfs僞分佈式架構只須要有三個部分便可,NameNode是老大,DataNode是小弟,Secondary NameNode是助理。
安全
客戶端Client跟NameNode通訊(RPC通訊機制,後面會介紹),Secondary NameNode負責數據的同步。
架構
二、元數據的存儲細節分佈式
NameNode的元數據是存放在內存當中的。
ide
數據解讀:有一個文件/test/a.log,保存了3個副本,一共被切分紅了兩塊,第一塊分別存放在了那幾個地方,第二塊存放在了那幾個地方。oop
客戶端須要下載該文件的時候,首先查詢NameNode的元數據,知道該文件分紅了哪幾塊,首先去h0機器下載blk_1,而後去h0下載blk_2,若是h0的blk_2損壞了(如何判斷損壞?校驗和機制),那麼會根據路由器的就近原則去h2下載blk_2,以此類推,將這個文件下載下來。post
【NameNode的工做原理】spa
NameNode是整個文件系統的管理節點。它維護着整個文件系統的文件目錄樹,文件/目錄的元信息和每一個文件對應的數據塊列表(元素據)。接收用戶的操做請求。日誌
NameNode的文件包括三種,這些文件是保存在linux的文件系統中。:
(1)fsp_w_picpath:元數據鏡像文件。存儲某一時段NameNode內存元數據信息,有Secondary NameNode負責同步,某一時段,說明並不能實時同步。
(2)edits:操做日誌文件。
(3)fstime:保存最近一次checkpoint的時間,還原點。
一、NameNode的原理
Namenode始終在內存中保存metedata,用於處理「讀請求」
(1)到有「寫請求」到來時,namenode會首先寫editlog到磁盤,即向edits文件中寫日誌,成功返回後,纔會修改內存,而且向客戶端返回
(2)Hadoop會維護一個fsp_w_picpath文件,也就是namenode中metedata的鏡像,可是fsp_w_picpath不會隨時與namenode內存中的metedata保持一致,而是每隔一段時間經過Secondary namenode將fsp_w_picpath合併edits文件來更新內容。
二、Secondary NameNode的原理
Secondary NameNode是HA(高可靠行)的一個解決方案。但不支持熱備(實時同步)。配置便可。
執行過程:從NameNode上下載元數據信息(fsp_w_picpath,edits),而後把兩者合併,生成新的fsp_w_picpath,在本地保存,並將其推送到NameNode,替換舊的fsp_w_picpath.
默認在安裝在NameNode節點上,但這樣...不安全!
三、Secondary NameNode的工做流程
(1)secondary通知namenode切換edits文件,生成edits.new
(2)NameNode複製edits和fsp_w_picpath文件,傳遞給secondary從namenode(經過http)
(3)secondary將fsp_w_picpath載入內存,而後開始合併edits,生成fsp_w_picpath.ckpt
(4)secondary經過http post將fsp_w_picpath.ckpt發送給NameNode
(5)NameNode將fsp_w_picpath替換爲fsp_w_picpath.ckpt
(6)NameNode將eidts替換爲edits.new
(7)等待下一次的同步(checkpoint)
什麼時候進行checkpoint?兩種狀況下會進行checkpoint:
(1)fs.checkpoint.period 指定兩次checkpoint的最大時間間隔,默認3600秒。即每隔3600秒checkpoint一次。
(2)fs.checkpoint.size規定了edits文件的最大值,一旦超過這個值則強制checkpoint,無論是否到達最大時間間隔。默認大小是64M。
【DateNode的工做原理】
(1)提供真實文件數據的存儲服務。
(2)文件塊(block):最基本的存儲單位。對於文件內容而言,一個文件的長度大小是size,那麼從文件的0偏移開始,按照固定的大小,順序對文件進行劃分並編號,劃分好的每個塊稱一個Block。HDFS默認Block大小是128MB,以一個256MB文件,共有256/128=2個Block.
(3)不一樣於普通文件系統的是,HDFS中,若是一個文件小於一個數據塊的大小,並不佔用整個數據塊存儲空間
(4)Replication。多複本。默認是三個。
【總結】
雖然僞分佈式如今再也不用,可是這些概念和思想仍是很是重要的。