HDFS
-
主要内容
① HDFS概述
1.1 HDFS定义
- HDFS是一个文件系统,用于存储文件;其次,它是分布式的,由很多服务器联合起来实现功能;
- HDFS的使用场景:适合一次写入,多次读出的场景,且不支持文件的修改。适合用来作数据分析,不适合做网盘应用。
- HDFS只是分布式文件管理系统中的一种。
1.2 HDFS优缺点
优点:
缺点:
1.3 HDFS组成架构
简单来说就是:
NN:存储数据的目录;
DN:存储具体的信息;
2NN:辅助NN工作;
1.4 HDFS文件块大小(面试重点)
HDFS中的文件是分块(block)存储的,block在hadoop 2.x中默认是128M,在hadoop 1.x中是64M。
② HDFS的数据流(面试重点)--- 相当重要
HDFS写数据流程:
具体流程:
1 客户端向NamaNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
2 NameNode返回是否可以上传。
3 客户端请求NameNode,第一个block快上传到哪几个节点。
4 NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
5 客户端向dn1请求上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
6 dn1、dn2、dn3逐级应答回复客户端。
7 客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
8 当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)
HDFS读数据流程:
具体流程:
1 客户端向NameNode发送请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址;
2 挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据;
3 DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验);
4 客户端以Packet为单位接收,先在本地缓存,然后写入目标文件;
③ NameNode和SecondaryNameNode工作机制(面试开发重点)
3.1 知识背景:
首先分析一下问题的产生背景:
- 如果数据都保存在磁盘中,当NN需要频繁的响应客户端请求进行读写时,效率会比较低;
- 如果将数据存储在内存中,读写速度很快,但是一旦断电,数据就会全部丢失;
基于上述问题,我们引出了编辑日志(Edits)和镜像文件(FsImage)的概念。
镜像文件:用于备份内存中的文件,防止断电导致数据丢失;(备份文件,保证准确性)
编辑日志:当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。(更新数据块,保证了高效性)
Ps:当NN断电导致元数据丢失时,可以通过Edits和FsImage的合并,合成元数据。
3.2 NN和2NN工作机制
第一阶段:NN启动
- 第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存;
- 客户端对元数据进行增删改的请求;
- NN记录操作日志,更新滚动日志;(先写编辑日志,再更新内存,防止断电数据丢失)
- NN在内存中对数据进行增删改;
第二阶段:2NN工作(合并编辑日志和镜像文件)
- 2NN询问NN是否需要执行CheckPoint(检查点)。并带回NN是否检查的结果;
- 当满足CheckPoint执行条件,2NN请求执行CheckPoint;
- 滚动正在写的Edits到edits_001(相当于复制一份,用于合并),同时创建一个新的文件edits_inprogress_002用于更新记录新的元数据;
- 将滚动前的编辑日志和镜像文件复制到2NN;
- 2NN加载编辑日志和镜像文件到内存,并合并;
- 合并生成新的镜像文件Fsimage.CheckPoint;
- 拷贝Fsimage.CheckPoint到NN,并将其重新命名为Fsimage;
CheckPoint触发的条件:
1 定时时间到;
2 Edits中的数据满了;
④ DataNode工作机制
具体流程:
- DN启动后向NN注册,注册通过后,DN周期性(1小时)的向NN上报所有的快信息;
- DN和NN通过心跳机制进行通讯。心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。
- 集群运行中可以安全加入和退出一些机器。
来源:oschina
链接:https://my.oschina.net/u/4419899/blog/4314212