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:块汇报以及缓存汇报