概述
- HDFS是hadoop提供的分布式存储的文件系统
- HDFS是典型的主从结构,一主(namenode)多从(datanode)
- HDFS的指令和linux指令相似(hadoop fs -xx)
- HDFS对文件进行存储之前,会将文件进行切块
- 文件大小如果超过128MB,则默认一块为128MB,未到128MB,则文件大小即为文件块大小
- 在HDFS中会自动对文件进行备份,默认一块备份三份
HDFS设计原理
HDFS中的三种角色:namenode(核心节点),datanode(数据节点),客户端
namenode
代码语言:javascript复制namenode在整个HDFS中类似于一种调节器的角色,所有的请求都要交由
namenode,然后namenode再分发给不同的datanode进行操作。
namenode上记录着HDFS中文件的元数据:
文件的大小
Block(文件块)的大小
BlockId
文件的存储路径
文件的权限
文件副本个数(默认为三个)
BlockId与datanode的映射关系,一个文件切为多少块
一个BlockId就对应多少个datanode.
1.元数据为了查询效率以及崩溃恢复将文件在内存和磁盘中
各存储了一份。
2.元数据在磁盘中的存储位置由core-site.xml中的hadoop.tmp.dir
属性决定
3.在hadoop的元文件存储路径/dfs/name/current/下记录着两种
不同的元数据存储文件,edits和fsimage.
4.edits中记录着所有的写操作
5.fsimage(映像文件中记录这原数据),内存中的元数据文件和映像文件
中记录着的元数据并不是同步的。
6.在客户端执行写操作的时候,namenode接收到请求验证权限成功之
后,会将写操作指令先记录到edits_inprogress文件中,记录成功之后会对内存中
的元数据进行修改,元数据修改完之后会给客户端发送一个ack信号
但是此时的fsimage映像文件是不发生改变的。
7.edits文件的滚动以及fsimage文件的更新
a.当edits文件超过指定大小(默认64MB,可以通过fs.checkpoint.size来
调节)之后会将操作更新到fsimage中
b.edits文件与上次滚动时间超过3600s(可以通过fs.checkpoint.period来调节)
之后,会进行一次滚动并更新fsiamge文件
c.hadoop重启之后,edits会自动进行一次滚动并更新fsimage映像文件
d.可以通过hadoop dfsadmin -rollEdits命令对edits文件强制滚动,并
更新fsimage映像文件。
8.edits_inprogress文件在滚动之后会产生一个新的edits以及一个新的
edits_inprogress
9.namenode通过心跳机制对datanode进行管理
10.datanode每隔3s对namennode发送一次心跳
11.HDFS的心跳机制其实是RPC
12.如果超过10分钟namenode没有接收到datanode的心跳,namenode会认为
datanode已经宕机,并根据元数据对该datanode中的数据进行备份。
13.心跳信息包含:
datanode的状态(预服役,服役,退役,预退役)
BlockId
图解HDFS的文件存储过程
以下图片引用博客csdn 1. HDFS写数据原理
2. HDFS读数据原理
3. HDFS故障类型和其检测方法
第二部分:读写故障的处理
第三部分:DataNode 故障处理
副本布局策略: