【漫画解读】HDFS存储原理
2016-05-31 15:59
573 查看
根据Maneesh Varshney的漫画改编,以简洁易懂的漫画形式讲解HDFS存储机制与运行原理。
一、角色出演
![](http://www.36dsj.com/wp-content/uploads/2016/02/765_1.png)
如上图所示,HDFS存储相关角色与功能如下:
Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据;与DN交互进行数据读写。
Namenode:元数据节点,是系统唯一的管理者。负责元数据的管理;与client交互进行提供元数据查询;分配数据存储节点等。
Datanode:数据存储节点,负责数据块的存储与冗余备份;执行数据块的读写操作等。
二、写入数据
1、发送写数据请求
![](http://www.36dsj.com/wp-content/uploads/2016/02/766_1.png)
HDFS中的存储单元是block。文件通常被分成64或128M一块的数据块进行存储。与普通文件系统不同的是,在HDFS中,如果一个文件大小小于一个数据块的大小,它是不需要占用整个数据块的存储空间的。
2、文件切分
![](http://www.36dsj.com/wp-content/uploads/2016/02/767_1.png)
3、DN分配
![](http://www.36dsj.com/wp-content/uploads/2016/02/768_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/769_1.png)
4、数据写入
![](http://www.36dsj.com/wp-content/uploads/2016/02/770_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/771_1.png)
5、完成写入
![](http://www.36dsj.com/wp-content/uploads/2016/02/772_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/773_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/774_1.png)
6、角色定位
![](http://www.36dsj.com/wp-content/uploads/2016/02/775_1.png)
三、HDFS读文件
1、用户需求
![](http://www.36dsj.com/wp-content/uploads/2016/02/776_1.png)
HDFS采用的是“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。
2、先联系元数据节点
![](http://www.36dsj.com/wp-content/uploads/2016/02/777_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/778_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/779_1.png)
3、下载数据
![](http://www.36dsj.com/wp-content/uploads/2016/02/780_1.png)
前文提到在写数据过程中,数据存储已经按照客户端与DataNode节点之间的距离进行了排序,距客户端越近的DataNode节点被放在最前面,客户端会优先从本地读取该数据块。
4、思考
![](http://www.36dsj.com/wp-content/uploads/2016/02/781_1.png)
四、HDFS容错机制——第一部分:故障类型及监测方法
1、三类故障
(1)第一类:节点失败
![](http://www.36dsj.com/wp-content/uploads/2016/02/782_1.png)
(2)第二类:网络故障
![](http://www.36dsj.com/wp-content/uploads/2016/02/783_1.png)
(3)第三类:数据损坏(脏数据)
![](http://www.36dsj.com/wp-content/uploads/2016/02/784_1.png)
2、故障监测机制
(1)节点失败监测机制
![](http://www.36dsj.com/wp-content/uploads/2016/02/785_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/786_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/787_1.png)
(2)通信故障监测机制
![](http://www.36dsj.com/wp-content/uploads/2016/02/788_1.png)
(3)数据错误监测机制
![](http://www.36dsj.com/wp-content/uploads/2016/02/789_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/790_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/791_1.png)
3、回顾:心跳信息与数据块报告
![](http://www.36dsj.com/wp-content/uploads/2016/02/792_1.png)
HDFS存储理念是以最少的钱买最烂的机器并实现最安全、难度高的分布式文件系统(高容错性低成本),从上可以看出,HDFS认为机器故障是种常态,所以在设计时充分考虑到单个机器故障,单个磁盘故障,单个文件丢失等情况。
五、容错第二部分:读写容错
1、写容错
![](http://www.36dsj.com/wp-content/uploads/2016/02/793_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/794_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/795_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/796_1.png)
2、读容错
![](http://www.36dsj.com/wp-content/uploads/2016/02/797_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/798_1.png)
六、容错第三部分:数据节点(DN)失效
![](http://www.36dsj.com/wp-content/uploads/2016/02/799_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/800_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/811_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/812_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/813_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/814_1.png)
七、备份规则
![](http://www.36dsj.com/wp-content/uploads/2016/02/815_1.png)
1、机架与数据节点
![](http://www.36dsj.com/wp-content/uploads/2016/02/816_1.png)
2、副本放置策略
![](http://www.36dsj.com/wp-content/uploads/2016/02/817_1.png)
数据块的第一个副本优先放在写入数据块的客户端所在的节点上,但是如果这个客户端上的数据节点空间不足或者是当前负载过重,则应该从该数据节点所在的机架中选择一个合适的数据节点作为本地节点。
如果客户端上没有一个数据节点的话,则从整个集群中随机选择一个合适的数据节点作为此时这个数据块的本地节点。
![](http://www.36dsj.com/wp-content/uploads/2016/02/818_1.png)
HDFS的存放策略是将一个副本存放在本地机架节点上,另外两个副本放在不同机架的不同节点上。
这样集群可在完全失去某一机架的情况下还能存活。同时,这种策略减少了机架间的数据传输,提高了写操作的效率,因为数据块只存放在两个不同的机架上,减少了读取数据时需要的网络传输总带宽。这样在一定程度上兼顾了数据安全和网络传输的开销。
![](http://www.36dsj.com/wp-content/uploads/2016/02/819_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/820_1.png)
转载自:http://www.cstor.cn/textdetail_10211.html
一、角色出演
![](http://www.36dsj.com/wp-content/uploads/2016/02/765_1.png)
如上图所示,HDFS存储相关角色与功能如下:
Client:客户端,系统使用者,调用HDFS API操作文件;与NN交互获取文件元数据;与DN交互进行数据读写。
Namenode:元数据节点,是系统唯一的管理者。负责元数据的管理;与client交互进行提供元数据查询;分配数据存储节点等。
Datanode:数据存储节点,负责数据块的存储与冗余备份;执行数据块的读写操作等。
二、写入数据
1、发送写数据请求
![](http://www.36dsj.com/wp-content/uploads/2016/02/766_1.png)
HDFS中的存储单元是block。文件通常被分成64或128M一块的数据块进行存储。与普通文件系统不同的是,在HDFS中,如果一个文件大小小于一个数据块的大小,它是不需要占用整个数据块的存储空间的。
2、文件切分
![](http://www.36dsj.com/wp-content/uploads/2016/02/767_1.png)
3、DN分配
![](http://www.36dsj.com/wp-content/uploads/2016/02/768_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/769_1.png)
4、数据写入
![](http://www.36dsj.com/wp-content/uploads/2016/02/770_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/771_1.png)
5、完成写入
![](http://www.36dsj.com/wp-content/uploads/2016/02/772_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/773_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/774_1.png)
6、角色定位
![](http://www.36dsj.com/wp-content/uploads/2016/02/775_1.png)
三、HDFS读文件
1、用户需求
![](http://www.36dsj.com/wp-content/uploads/2016/02/776_1.png)
HDFS采用的是“一次写入多次读取”的文件访问模型。一个文件经过创建、写入和关闭之后就不需要改变。这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能。
2、先联系元数据节点
![](http://www.36dsj.com/wp-content/uploads/2016/02/777_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/778_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/779_1.png)
3、下载数据
![](http://www.36dsj.com/wp-content/uploads/2016/02/780_1.png)
前文提到在写数据过程中,数据存储已经按照客户端与DataNode节点之间的距离进行了排序,距客户端越近的DataNode节点被放在最前面,客户端会优先从本地读取该数据块。
4、思考
![](http://www.36dsj.com/wp-content/uploads/2016/02/781_1.png)
四、HDFS容错机制——第一部分:故障类型及监测方法
1、三类故障
(1)第一类:节点失败
![](http://www.36dsj.com/wp-content/uploads/2016/02/782_1.png)
(2)第二类:网络故障
![](http://www.36dsj.com/wp-content/uploads/2016/02/783_1.png)
(3)第三类:数据损坏(脏数据)
![](http://www.36dsj.com/wp-content/uploads/2016/02/784_1.png)
2、故障监测机制
(1)节点失败监测机制
![](http://www.36dsj.com/wp-content/uploads/2016/02/785_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/786_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/787_1.png)
(2)通信故障监测机制
![](http://www.36dsj.com/wp-content/uploads/2016/02/788_1.png)
(3)数据错误监测机制
![](http://www.36dsj.com/wp-content/uploads/2016/02/789_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/790_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/791_1.png)
3、回顾:心跳信息与数据块报告
![](http://www.36dsj.com/wp-content/uploads/2016/02/792_1.png)
HDFS存储理念是以最少的钱买最烂的机器并实现最安全、难度高的分布式文件系统(高容错性低成本),从上可以看出,HDFS认为机器故障是种常态,所以在设计时充分考虑到单个机器故障,单个磁盘故障,单个文件丢失等情况。
五、容错第二部分:读写容错
1、写容错
![](http://www.36dsj.com/wp-content/uploads/2016/02/793_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/794_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/795_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/796_1.png)
2、读容错
![](http://www.36dsj.com/wp-content/uploads/2016/02/797_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/798_1.png)
六、容错第三部分:数据节点(DN)失效
![](http://www.36dsj.com/wp-content/uploads/2016/02/799_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/800_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/811_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/812_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/813_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/814_1.png)
七、备份规则
![](http://www.36dsj.com/wp-content/uploads/2016/02/815_1.png)
1、机架与数据节点
![](http://www.36dsj.com/wp-content/uploads/2016/02/816_1.png)
2、副本放置策略
![](http://www.36dsj.com/wp-content/uploads/2016/02/817_1.png)
数据块的第一个副本优先放在写入数据块的客户端所在的节点上,但是如果这个客户端上的数据节点空间不足或者是当前负载过重,则应该从该数据节点所在的机架中选择一个合适的数据节点作为本地节点。
如果客户端上没有一个数据节点的话,则从整个集群中随机选择一个合适的数据节点作为此时这个数据块的本地节点。
![](http://www.36dsj.com/wp-content/uploads/2016/02/818_1.png)
HDFS的存放策略是将一个副本存放在本地机架节点上,另外两个副本放在不同机架的不同节点上。
这样集群可在完全失去某一机架的情况下还能存活。同时,这种策略减少了机架间的数据传输,提高了写操作的效率,因为数据块只存放在两个不同的机架上,减少了读取数据时需要的网络传输总带宽。这样在一定程度上兼顾了数据安全和网络传输的开销。
![](http://www.36dsj.com/wp-content/uploads/2016/02/819_1.png)
![](http://www.36dsj.com/wp-content/uploads/2016/02/820_1.png)
转载自:http://www.cstor.cn/textdetail_10211.html
相关文章推荐
- 通过Nifi 导入csv文件到HDFS
- HDFS EC:将纠删码技术融入HDFS
- hdfs 使用
- hadoop yarn container
- Hadoop Map 数目决定因素
- SparkStreaming0nHDFS实战
- HDFS内存存储
- flume-ng+Kafka+Storm+HDFS 实时系统搭建
- 第85课:基于HDFS的SparkStreaming案例实战和内幕源码解密
- HDFS文件上传:8020端口拒绝连接问题解决!
- HDFS学习之FileSystem
- spark读写hdfs后出现的异常错误
- hdfs文件误删恢复
- hdfs块丢失导致的异常问题排查解决
- sparkStreming on HDFS
- hdfs 常用命令
- hadoop升级后,hive报错
- HDFS配置Kerberos认证
- HDFS的运行原理
- HDFS初探