一、HDFS概述
基于hadoop2.6
HDFS被设计能够运行在通用硬件上、提供流式数据操作、能够处理超大文件的分布式文件系统。
特点:高容错和高吞吐量、易扩展、高可靠性
HDFS的四个核心模块:namenode节点、datanode节点、客户端、HDFS协议(RPC协议、流式接口协议:HTTP和TCP)
基本概念
1、数据块(block)
数据块是HDFS文件处理(读和写)的最小单元,默认是128M。一个文件存储到HDFS上首先被切分成数据块,然后分别存储到不同的datanode节点上。
2、namenode节点
由于Hadoop是一个master/slave主从结构,namenode相当于主从的主节点,负责管理文件系统的命名空间,包括文件系统目录树、文件/目录信息以及文件的数据块的索引,这些信息以两个文件
的形式永久保存在namenode节点的本地磁盘,即命名空间镜像文件和边记日志文件。
同时namenode节点还保存着数据块与数据节点datanode的对应关系,这部分数据不报存在磁盘上而是在数据节点datanode启动的时候向namenode动态汇报,然后由namenode动态构建,保存在内存中。
总结:namenode主要功能是保存着两个映射关系
数据文件到数据块的映射关系(保存在磁盘上);
数据块和数据节点datanode的映射(保存在内存中);
3、datanode节点
数据节点是HDFS的从节点,数据节点在namenode的调度下负责把数据写入本地或者读出本地存储上保存的数据块。
datanode节点会不断向namenode节点发送心跳、数据块汇报以及缓存汇报。
4、客户端
通过各种接口操作HDFS(命令行接口、API接口等),这些客户端接口都是建立在DFSClient类的基础上;
5、HDFS协议
HDFS节点间的接口主要有两种类型:
Hadoop RPC接口:基于Hadoop RPC框架实现的接口;
流式接口:基于TCP或者HTTP实现的接口;
HDFS的RPC接口
总结
RPC接口:客户端与namenode节点、datanode节点进行简单的信息交互;
TCP接口:用于读取或写入数据块;
HTTP接口:namenode进行同步元信息;
HDFS主要操作流程
1)、HDFS客户端读流程
2)、HDFS客户端写流程
3)、HDFS客户端追加流程
![](https://i-blog.csdnimg.cn/blog_migrate/d22632dbc4dea25308730922588ee5bb.png)
4)、datanode启动、心跳检测、以及namenode节点指令流程
![](https://i-blog.csdnimg.cn/blog_migrate/5b54ac678febeb14d9ac9fc10a247b78.png)
5)、HA(namenode)切换流程
读取或者写入时是按照数据块为单位来进行的,每次读完或者写完一个数据块才和下一个数据块进行建立连接通道。
HA切换流程,保证两个一致性:
- 命名空间的一致性
- 数据块和数据节点datanode的一致性;
二、Hadoop的RPC
Hadoop的RPC是基于IPC(inter-process communications ,进程间通信)模型实现的一套高效的轻量级RPC框架,采用了javanio、java动态代理以及protobuf等基础技术。
Hadoop RPC server端基于Reactor设计模式的设计实现:基于多reactor多线程模式
三、namenode节点
四、datanode节点
五、HDFS客户端