Hadoop分布式文件系统HDFS

IT知识
304
0
0
2022-12-17
标签   Hadoop

概述

  1. HDFS是hadoop提供的分布式存储的文件系统
  2. HDFS是典型的主从结构,一主(namenode)多从(datanode)
  3. HDFS的指令和linux指令相似(hadoop fs -xx)
  4. HDFS对文件进行存储之前,会将文件进行切块
  5. 文件大小如果超过128MB,则默认一块为128MB,未到128MB,则文件大小即为文件块大小
  6. 在HDFS中会自动对文件进行备份,默认一块备份三份

HDFS设计原理

HDFS中的三种角色:namenode(核心节点),datanode(数据节点),客户端

namenode

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写数据原理

img

2. HDFS读数据原理

img

3. HDFS故障类型和其检测方法

img

第二部分:读写故障的处理

img

第三部分:DataNode 故障处理

img

副本布局策略:

img