HDFS存储与架构

HDFS存储模型

  • 以字节形式存储
  • 文件线性切割成块(Block):偏移量 offset (byte)
  • Block分散存储在集群节点中
  • 单一文件Block大小一致,文件与文件可以不一致
  • Block可以设置副本数,副本无序分散在不同节点中
  • 副本数不要超过节点数量
  • 文件上传可以设置Block大小和副本数(资源不够开辟的进程)
  • 已上传的文件Block副本数可以调整,大小不变(2.x 128MB 3 blocks)
  • 只支持一次写入多次读取,同一时刻只有一个写入者
  • 可以append追加数据

HDFS架构模型

  • 文件元数据MetaData,文件数据    
    • 元数据
    • 数据本身
  • NameNode(主)节点保存文件元数据:单节点   posix
  • DataNode(从)节点保存文件Block数据:多节点
  • DataNode与NameNode保持心跳,提交Block列表
  • HdfsClient与NameNode交互元数据信息
  • HdfsClient与DataNode交互文件Block数据(cs)
  • DataNode 利用服务器本地文件系统存储数据块

HDFS架构图

HDFS设计思想

  • 分散均匀存储 dfs.blocksize = 128M
  • 备份冗余存储 dfs.replication = 3




NameNode(NN)

  • 基于内存存储 :不会和磁盘发生交换(双向)
    • 只存在内存中
    • 持久化(单向)
  • NameNode主要功能:
    • 接受客户端的读写服务
    • 收集DataNode汇报的Block列表信息
  • NameNode保存metadata信息包括
    • 文件owership和permissions
    • 文件大小,时间
    • (Block列表:Block偏移量),位置信息(持久化不存)
    • Block每副本位置(由DataNode上报)

NameNode持久化

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

SecondaryNameNode(SNN)

  • 它不是NN的备份(但可以做备份),它的主要工作是帮助NN合并edits log,减少NN启动时间。
  • SNN执行合并时机
    • 根据配置文件设置的时间间隔fs.checkpoint.period  默认3600秒
    • 根据配置文件设置edits log大小 fs.checkpoint.size 规定edits文件的最大值默认是64MB    

SNN合并流程图


DataNode(DN)

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

HDFS优点

  • 高容错性
    • 数据自动保存多个副本
    •  副本丢失后,自动恢复
  • 适合批处理
    • 移动计算而非数据
    • 数据位置暴露给计算框架(Block偏移量)
  • 适合大数据处理
    • GB 、TB 、甚至PB 级数据
    • 百万规模以上的文件数量
    • 10K+ 节点
  • 可构建在廉价机器上
    • 通过多副本提高可靠性
    • 提供了容错和恢复 机制

HDFS缺点

  • 低延迟数据访问
    • 比如毫秒级
    • 低延迟与高吞吐率
  • 小文件存取
    • 占用NameNode 大量内存
    • 寻道时间超过读取时间
  • 并发写入、文件随机修改
    • 一个文件只能有一个写者
    • 仅支持append

Block的副本放置策略

  • 第一个副本:放置在上传文件的DN;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。
  • 第二个副本:放置在于第一个副本不同的 机架的节点上。
  • 第三个副本:与第二个副本相同机架的节点。
  • 更多副本:随机节点

 

posted @ 2019-07-14 12:29  Coolc  阅读(1191)  评论(0编辑  收藏  举报