HDFS的组成角色以及读写流程

HDFS组成角色及其功能

1. Client:客户端
2. NameNode (NN):元数据节点
  管理文件系统的Namespace元数据
  处理客户端读写请求
3. DataNode (DN):数据节点
  数据存储节点,保存和检索Block
  执行数据读写操作
4. Secondary NameNode (SNN):从元数据节点
  合并NameNode的edits到fsimage文件中
  辅助NN将内存中元数据信息持久化

HDFS写流程

在这里插入图片描述

1.client请求
  client通过DFS向NN请求(源文件已存在)
2.NN确认
  目录存在、用户无操作权限return false否则return true
3.client切分并请求第一个Block DN
  client将文件切成n个128M的Block
  client向NN请求第1个Block的存储DN列表
4.NN返回DN列表
  假如返回: dn1 dn2 dn3
5.client写入
  a. FSDOS向dnl请求写入
  b. dn1请求dn2 , dn2请求dn3,分别建立pipeline管道
  c. dn3响应dn2 ,dn2响应dn1 , dn1响应client
  d. Block传输
   d.1: client读取第一个Block并以Packet(64k)为单位传输, dn1每收到一个Packet会建立等待应答队列,并逐级传输给dn2 , dn3
   d.2: dn3 ,dn2 , dn1逐级应答,并将结果反馈给client
   d.3:重复d.1~2直至Block传输完成
6.client发送complete给NN
7.重复3~6直至所有Block传输完成
8.关闭FileSystemDataOutputStream

HDFS读流程

在这里插入图片描述

1.client创建DFS
  DFS dfs = Filesystem. open ()
2.DFS向NN请求RPC获取【文件开始部分或全部】Block有序列表
  列表按距离client的距离升序排序
  每个Block包含DN地址,如果client就是DN,则本地读取
3.DFS向client返回支持文件定位的输入流对象FSDIS
  FSDIS中包含一个(DFSIS) DFSInputstream,用来管理DN和NN之间的IO
 如:
 DN中数据缺失或者下载一部分之后任务失败,则可以通过DFSInputstream联系NN求助
 NN借助YARN找到距离最近的另一个备份节点
 将未完成的下载任务迁移到该节点,并通过【支持文件定位】的输入流对象FSDIS进行【续传】
4.client调用FSDataInoutStream的read()找到离client最近的DN,并连接DN
5.DFSIS依次读取一个批次的Block
 a.读取包含文件第一个Block的最近DN地址
 b.重复调用read()方法,直至第一个Block读取完成
 c.关闭DN连接
 d.重复a~c直至第一个批次的Block全部读取完成
6.重复2~5,直至所有批次的Block读取完成
7.关闭DFSIS(distribute file system inputstream),FSDIS(file system datainput stream),DFS(distribute file system)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值