HDFS(Hadoop Distributed File System )Hadoop分佈式文件系統。
HDFS上的角色:
NameNode:是Master節點,管理數據塊的映射,數據信息包括fsimage和edits。
SecondaryNameNode:分擔NameNode的工作,是NameNode的冷備份,合併fsimage和edits然後發給namenode
DataNode:Slave節點,負責存儲客戶端提交上來的數據塊
fsimage:hdfs的元數據鏡像文件,文件系統的目錄樹
edits:元數據的操作日誌,主要是文件系統的修改的操作日誌
HDFS中用到的基礎知識:
Java動態代理:在程序運行時動態的對一些東西做代理,代理在原來的方法之上做其他的事情
JavaNIO:(Java non-blocking IO)非阻塞IO,NIO是面向緩衝區的,JavaIO是面向流的,是阻塞的;JavaNIO是面向緩衝區的,需要將IO緩存到一個緩衝區;有三個核心組件Channel(通道)、Buffer(緩衝區)、Selector(運行單線程處理多個Channel);
Protobuf框架:結構數據序列化方法,用於通信協議、數據存儲等;
org.apache.hadoop.hdfs.protobuf
org.apache.hadoop.hdfs.server.protobuf
兩個類主要定義了Hadoop RPC的接口;
ClientProtocol:定義了由客戶端發起的,由namenode相應的操作;
ClientDataNodeProtocol:定義了Client與DataNode之間的接口
DataNodeProtocol:有客戶端發起調用的接口
HadoopRPC:
基於IPC(進程間通信)模型實現一套高效的輕量級的RPC框架;
採用的技術點有:java動態代理,javaNIO,protocol等基礎技術
RPC:是一種通過網絡調用遠程計算機的服務的協議
包括:通信模塊:(基於TCP/UDP可以是同步的也可以是異步的)
客戶端Stub程序:
服務端Stub程序:
請求程序:
服務程序:
org.apache.hadoop.ipc.Client
org.apache.hadoop.ipc.Server
寫操作:
讀操作:
DataNode啓動、心跳以及執行名字節點指令流程
DataNode啓動後與NameNode的交互主要包括三個部分:1:握手,2:註冊,3:塊彙報以及緩存彙報