HDFS工作机制及模拟RPC

HDFS工作机制

工作机制:
1. HDFS集群分为两大角色:DataNode.NameNode 节点
2. NameNode:管理文件系统的Namespace,维护着文件系统的元数据(MetaData)
3. DataNode : 负责用户的文件数据块的存储.根据客户端或者namenode的调度存储和检索数据,并且 定期向namenode发送他们所存储的块(block)的列表.
4. 文件会按照固定大小(blocksize 默认值是128M [可以配置]) 切分成若干块后分布式存储在不同的DataNode上.
5. 每一个切片文件可以存在多个备份 ,(默认是3 [可以配置])存储在不同的DataNode上
6. HDFS的内部工作机制对客户端保持透明,客户端请求访问都是通过向NameNode发送请求来进行的.

HDFS写数据流程分析

在这里插入图片描述
1.客户端向NameNode发送写数据请求.

2.NameNode检查元数据的目录树是否存在该文件,父目录是否存在.检查权限.

3.返回通知客户端可以上传文件.客户端切分文件为blocks.

4.请求上传block0.

5.NameNode检查DataNode信息池,查看那些DataNode适合存储block块与副本.

6.返回可以上传与备份的DataNode信息 (例:2台机器)

  • 首先就近原则挑选一台机器存储
  • 第二台优选另一机架上的DataNode
  • 第三台在本机架上再挑选一台

7.发出传输数据建立pipleline(管道通信)请求,本质上是RPC请求.

8.建立pipleline连接 (这种写数据的方式呈流水线的形式).

9.客户端开始往DataNode01上传第一个block0(先从磁盘读取数据放到本地缓存),以packet为单位,
DataNode01接收到第一个packet就会通过pip传给DataNode02; 每传一个packet会放到一个应答队 列等待应答.

10.第一块上传完成后,客户端再次请求 上传block02.

HDFS读数据流程分析

客户端将要读取的文件路径发送给NameNode,NameNode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应的DataNode 逐个获取文件的block并在客户端本地进行数据追加合并从而获得整个文件.

  1. 请求读取文件 /test.txt
  2. 查询NameNode元数据信息
  3. 返回元数据信息:(主要是文件所对应的机器)
/test.txt
{blk_01,blk_02,blk_03} {blk_01:dn01,dn02}
{blk_02:dn02,dn03} {blk_03:dn01,dn03}
  1. 建立socket连接,发送请求读取block_01,从节点机器将块数据读取到内存中,并以packet为单位发送给客户端.
  2. 客户端以packet方式,先在本地缓存,然后写入目标文件.

NameNode工作机制

NameNode作为HDFS集群 中的主节点,其主要职责为:

  1. 负责客户端的请求与响应
  2. 实现源数据的管理(其中包括查看,修改)
  3. 与DataNode存在hb心跳机制 (交互状态信息)

NameNode对数据的管理采用了三种存储形式:

  1. 内存元数据 : 内存中有一份完整的元数据.(meta data)
  2. 磁盘元数据镜像文件FSImage : 磁盘有一个"准完整"的元数据镜像文件,里面记录了自最后一次检查点之前HDFS文件系统中所有目录和文件的序列化信息;
  3. 数据操作日志文件edit : 用于衔接内存meta data和磁盘元数据镜像FSImage之间的日志.
    客户端对HDFS的操作请求会记录到edit日志中.

如下图所示:
在这里插入图片描述
每隔一段时间(系统默认1小时 或 自定义时间 )会由Secondary NameNode 将NameNode上积攒的所有edits和一个最新的FSImage 下载到本地,并加载到内存中进行merge (这个过程称之为Checkpoint)

1.Secondary NameNode 向NameNode发送请求 准备执行check point操作.

2.快速切换日志文件,将之前的日志文件保存到磁盘中

3.Secondary NameNode copy FSImage文件 和 edit日志文件到磁盘中

4.通过镜像文件与日志文件读取到meta data内存中

5.模拟用户操作 将其合并后 序列化 成功一个新的image checkpint 文件

6.上传到NameNode FSImage镜像文件中

checkpoint操作的触发条件配置参数有2种 一种是定时执行,另一种是2次checkpint之间的时间间隔,
可以在hdfs-site.xml中配置:

dfs
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值