Hadoop中HDFS读写数据的流程分析

在Hadoop中,我们知道,MapReduce是用来对数据进行分析和计算的,而HDFS是用来对数据进行存储的,那么,接下来我们将对HDFS有一个简单的认知.

在这里插入图片描述

1:HDFS的两种角色

在HDFS中,分为两大角色,
NameNode:

  • 负责客户端请求的响应(对外提供一个抽象目录树)

  • 实现元数据的管理(查询,修改)
    Name对数据的管理采用了三种存储形式:

  • 内存元数据:内存中有一份完整的元数据.

  • 磁盘元数据镜像文件FSImage:磁盘中有一个"准完整"的 元数据镜像文件

  • 数据操作日志文件edit:用于衔接内存metadata和磁盘元数据镜像fsimage之间的日志

DataNode

  • 存/取管理用户的切片文件.
  • 通过心跳机制定期向namenode汇报自身所持有的block信息.也可以在hdfs-site.xml文件中进行配置

2:HDFS的写数据流程分析

客户端要向HDFS写数据,首先要跟Namenode通信以确定可回忆写文件并接受文件block的DataNode,然后,客户端按顺序将文件逐个block传递相应的DataNode,并由接受到block的DataNode负责向其他DataNode复制block的副本.

流程分析图如下所示:
在这里插入图片描述
1:请求上传文件/haha.avi
2:检查元数据内部的目录树是否已存在该文件,父母路是否存在.
3:返回通知客户端可以上传文件
4:上传block01
5:查询DataNode信息,看哪台机器可以存储该块的副本
6:返回两个DataNode:dn01,dn02…

  • 首先就近原则挑选一台
  • 第二台优选另一机架上的datanode
  • 第三台在本机架上再进行挑选

7:发出传输数据建立pipleline请求,本质上是一个RPC调用
8:建立pipleline
9:客户端开始往dn01上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,dn01收到一个packet就会传给dn02,dn01每传一个packet会放入一个应答队列等待应答
10:当一个block传输完成之后,客户端再次请求NameNode上传block02的服务器

3:HDFS的读数据流程

客户端将要读取的文件的路径发送给NameNode,NameNode获取文件的元信息(主要是block的存放位置信息)返回给客户端,客户端根据返回的信息找到相应的DataNode逐个获取文件的block并在客户端本地进行数据追加合并,从而获得整个文件
流程图如下所示:
在这里插入图片描述
1:请求读取一个文件haha.avi
2:查询NameNode
3:返回元数据信息:

/haha.avi {blk_01,blk_02,blk_03} {blk_01:dn01,dn02} {blk_02:dn02,dn03}
{blk_03:dn01,dn03}

4:建立socket链接,发送请求读取blk_01,从节点机器将块数据读取到内存中,并以packet为单位发送飞客户端.
5:客户端以packet方式接收,先在本地缓存,然后写入目标文件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值