hdfs
簡單說是分佈式的文件系統
一、hdfs的角色劃分
client:分block
NameNode:是Master節點。管理數據塊映射;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;
SecondaryNameNode:是一個小弟,分擔大哥namenode的工作量;是NameNode的冷備份;合併fsimage和fsedits然後再發給namenode。
DataNode:Slave節點,幹活的。負責存儲client發來的數據塊block;執行數據塊的讀寫操作。
fsimage:元數據鏡像文件(文件系統的目錄樹。)
edits:元數據的操作日誌(針對文件系統做的修改操作記錄)
fsimage+edits 類比數據庫中的數據表和日誌表
namenode內存中存儲的是fsimage+edits。
SecondaryNameNode默認1小時,從namenode上,獲取fsimage和edits來進行合併,然後再發送給namenode。減少namenode的工作量。
二、啓動過程
http://blog.csdn.net/amber_amber/article/details/38268407
1、namenode
1》Server成員的構造(用於RCP)
2》FSNameSystem的構造
核心數據結構包括:
l blocksMap:map,保存數據塊block相關的映射關係,包括文件與塊,塊與datanode的映射等。
l curruptReplicasMap:保存所有損壞的塊,所有副本都損壞。
l datanodeMap:曾近連接過的所有的datanode,是全集。
l recentInvalidateSets:最近失效的block。
l excessReplicateMap:機器與機器上多餘的block的映射,這些block等待被刪除。
l Heartbeats:當前發送心跳包的datanode,也就是alive的datanode。
FSDirectory對象:這裏存放着文件系統的層次結構。
過程:初始化blocksMap等數據結構,加載fsimage文件到類FSImage中,讀取edits文件,利用fsimage和edits構造文件系統層次結構。
3》啓動後臺守護進程
l PendingReplicaitonBlocks$PendingReplicationMonitor: 監控block的copy過程
l FSNamesystem$HeartbeatMonitor,心跳包的檢測
l FSNamesystem$ReplicationMonitor: 監控複本數量,如果不足,就copy。
l LeaseManager$Monitor:控制寫請求,文件不能同時多人寫。
l DecommissionManager$Monitor:處理數據節點的退役
2、啓動datanode
1》獲取並設置各種配置信息,整理自己的block信息並進行封裝
2》從namenode獲取namespaceID, version以及StorageID等信息
3》datanode向namenode註冊。
向namenode發送服務地址,信息查詢端口,客戶端訪問端口以及datanodeID等,還包括block_report塊數據;FSNameSystem先驗證該datanode是否被允許掛載(通過dfs.hosts列表驗證),然後把datanode數據映射到元數據中,這裏主要是獲取block_report塊與datanode的映射關係,添加到BlocksMap中[hx1] ,然後再把這個datanode添加到heartsbeats中進行監控。
4》啓動datanode線程。週期性向namenode發送block_Report和heartbeats,同時接受namenode的指令。
3、Secondary namenode的啓動
註冊到namenode,並且從namenode同步當前的fsimage,edits等文件信息;啓動secondary namenode上用於輪訓的進程,定期執行檢查點的創建操作。
三、寫操作的流程
http://www.cnblogs.com/laov/p/3434917.html
1、client通知namenode,獲得datanodes
2、具體寫每個block和package(內部複製)
3、寫別的block
4、通知nn結束