Hadoop学习(1)——组件介绍(HDFS)

1.1、分布式存储系统HDFS 介绍

(1)存储模型:字节

文件线性切割成块(Block:偏移量 offset ;

Block分散存储在集群节点中,单一文件Block大小一致,文件与文件可以不一致;

Block可以设置副本数,副本无序分散在不同节点中(副本数不要超过节点数量);

文件上传可以设置Block大小和副本数,已上传的文件Block副本数可以调整,大小不变;

只支持一次写入多次读取,同一时刻只有一个写入者;

可以append追加数据。

(2)架构模型

文件元数据MetaData,文件数据 

  • 元数据
  • 数据本身

(主)NameNode节点保存文件元数据单节点   posix

(从)DataNode节点保存文件Block数据:多节点

DataNodeNameNode保持心跳,提交Block列表

HdfsClientNameNode交互元数据信息

HdfsClientDataNode交互文件Block据(cs)

DataNode 利用服务器本地文件系统存储数据块

(3)HDFS架构:

Hadoop学习(1)——组件介绍(HDFS)

NameNode(NN):

(1)基于内存存储 :不会和磁盘发生交换(双向)

  • 只存在内存中
  • 持久化(单向)

(2)NameNode主要功能:接受客户端的读写服务、收集DataNode汇报的Block列表信息

(3)NameNode保存metadata信息包括:

  • 文件owership和permissions
  • 文件大小,时间
  • Block列表:Block偏移量),位置信息(持久化不存)
  • Block每副本位置(由DataNode上报)

(4)NameNode持久化:

  • NameNode的metadata信息在启动后会加载到内存
  • metadata存储到磁盘文件名为”fsimage(时点备份)
  • Block的位置信息不会保存到fsimage
  • edits记录对metadata的操作日志…>Redis

SecondaryNameNode(SNN):

(1)作用:它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。

(2)SNN执行合并时机:

  • 根据配置文件设置的时间间隔fs.checkpoint.period  默认3600秒
  • 根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB 

DataNode(DN):

  • 本地磁盘目录存储数据(Block)文件形式
  • 同时存储Block的元数据信息文件
  • 启动DN时会向NN汇报block信息
  • 通过向NN发送心跳保持与其联系(3秒一次),如果NN 10分钟没有收到DN的心跳,则认为其已经lost,并copy其上的block到其它DN

(4)HDFS写流程

Hadoop学习(1)——组件介绍(HDFS)

Client:切分文件Block

-->按Block线性和NN获取DN列表(副本数)

-->验证DN列表后以更小的单位流式传输数据

-->各节点,两两通信确定可用

-->Block传输结束后:

  • DN向NN汇报Block信息
  • DN向Client汇报完成
  • Client向NN汇报完成获取下一个Block存放的DN列表.

-->最终Client汇报完成NN会在写流程更新文件状态

(5)HDFS读流程

Hadoop学习(1)——组件介绍(HDFS)

Client:

  • 和NN获取一部分Block副本位置列表
  • 线性和DN获取Block,最终合并为一个文件
  • 在Block副本列表中按距离择优选
  • MD5验证数据完整性