hdfs工作原理图解

来源:互联网 发布:电脑开单软件 编辑:程序博客网 时间:2024/04/29 10:55

hdfs文件系统分namenode和datanode两部分
这里分析下客户端在上传和下载时它们的工作机制

namenode和secondarynamenode的工作原理

namenode的职责:
1、记录元数据
元数据就是datanode上每个文件的块信息
块信息包括

    文件的路径    文件的副本数量    文件的切块大小    文件的块信息    文件块的位置信息

2、响应客户端请求

    处理客户端请求

3、负载均衡

    平衡datanode节点上的文件块储存负载

namenode工作原理
说明:

  • namenode元数据以树状结构完整的储存在内存中,只在一开始序列化出一个镜像文件(镜像一)
  • namenode把之后的操作记录到日志里
  • secondarynamenode会定期从namenode下载原镜像和日志文件,其中原镜像只在第一次时下载,然后在自己机器上反序列化镜像到内存,并根据日志文件修改它,并序列化出新的镜像,上传给namenode(镜像二),来保证namenode上有及时的备份文件
  • 这样做的好处是将namenode把元数据信息存到磁盘的操作交给了secondarynamenode机器 ,自己只做记录日志的操作,从而提高性能

这里写图片描述
图中fsimage为两个镜像文件,edits为操作日志文件

datanode工作机制

职责:

  • 接收客户端发送过来的文件块block
  • 为客户端读取指定的文件块block
  • 定期向namenode汇报自身所持有的block,以保证集群的整体负载均衡

hdfs文件上传图解
这里写图片描述
说明:

  • 1、根namenode通信请求上传文件,namenode检查目标文件是否已存在,父目录是否存在
  • 2、namenode返回是否可以上传
  • 3、client请求第一个 block该传输到哪些datanode服务器上
  • 4、namenode返回3个datanode服务器ABC
  • 5、client请求3台dn中的一台A上传数据(本质上是一个RPC调用,建立pipeline),A收到请求会继续调用B,然后B调用C,将整个pipeline建立完成,逐级返回客户端
  • 6、client开始往A上传第一个block(先从磁盘读取数据放到一个本地内存缓存),以packet为单位,A收到一个packet就会传给B,B传给C;A每传一个packet会放入一个应答队列等待应答
  • 7、当一个block传输完成之后,client再次请求namenode上传第二个block的服务器。

hdfs文件下载图解
这里写图片描述
说明:

  • 1、跟namenode通信查询元数据,找到文件块所在的datanode服务器
  • 2、挑选一台datanode(就近原则,然后随机)服务器,请求建立socket流
  • 3、datanode开始发送数据(从磁盘里面读取数据放入流,以packet为单位来做校验)
  • 4、客户端以packet为单位接收,现在本地缓存,然后写入目标文件
原创粉丝点击