Hadoop分布式存储

HDFS是Hadoop Distribute File System的简称,Hadoop的一个分布式文件系统

HDFS的优缺点

HDFS优点

  • 高容错性
    • 数据保存多个副本,完全分布式模式默认为3个副本
    • 数据丢失后自动恢复
  • 适合移动批处理
    • 移动计算而移动数据
    • 数据位置暴露给计算框架
  • 适合大数据处理
    • GB、TB甚至PB级的数据处理
    • 百万规模以上的文件数据
    • 10000+的节点
  • 可构建在廉价的机器上
    • 通过多副本存储,提供可靠性
    • 提供了容器和恢复机制

HDFS缺点

  • 低延迟数据访问处理较弱
    • 毫秒级别的访问响应较慢
    • 低延迟和高吞吐的请求处理较弱
  • 大量小文件存取处理较弱
    • 会占用大量NameNode的内存
    • 寻到时间超过读取时间
  • 并发写入、文件随机修改
    • 一个文件仅有一个写者
    • 仅支持Append写入

HDFS 架构

HDFS 架构

HDFS采用master/slave架构。

一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。

  • NameNode :是Master节点,是大领导。管理数据块映射;处理客户端的读写请求;配置副本策略;管理HDFS的名称空间
  • SecondaryNameNode:是一个小弟,分担大哥namenode的一部分工作量;是NameNode的冷备份;合并fsimage和fsedits然后再发给namenode
  • DataNode: Slave节点,奴隶,干活的。负责存储client发来的数据块block;执行数据块的读写操作
  • 热备份:b是a的热备份,如果a坏掉。那么b马上运行代替a的工作
  • 冷备份:b是a的冷备份,如果a坏掉。那么b不能马上代替a工作。但是b上存储a的一些信息,减少a坏掉之后的损失
  • fsimage:元数据镜像文件(文件系统的目录树)
  • edits:元数据的操作日志(针对文件系统做的修改操作记录
  • namenode内存中存储的是=fsimage+edits
  • SecondaryNameNode负责定时默认1小时,从namenode上,获取fsimage和edits来进行合并,然后再发送给namenode。减少namenode的工作量

NameNode(NN)、SencondryNameNode(SNN)、DataNode(Dn)介绍

  • *NameNode(NN)
    • 接受客户端的读写服务
    • 保存metadata的信息,包括:文件的owership和permissions、文件包含哪些block、block保存在哪些DataNode节点上(在启动时由DataNode上报)
    • NameNode的metadata信息会在启动后加载到内存中
      a. metadata信息在磁盘上的存储文件为fsimage
      b.Block的位置信息不保存在fsimage中(由DataNode上报)
      c.edits中保存对metadata的操作日志
  • SecondryNameNode(SNN)
    • 它不是NN的备份(但可以做NN的部分备份工作),它的主要工作是帮助NN合并edits log,减少NN的启动时间
    • SNN合并时机
      a.根据配置文件设置的时间间隔fs.checkpoint.period默认是3600秒
      b.根据配置文件设置的edits log的大小fs.checkpoint.size默认的edits log大小为64MB
  • SNN合并流程
    a. NN创建一个新的edits log来接替老的edits的工作
    b. NN将fsimage和旧的edits拷贝到SNN上
    c. SNN上进行合并操作,产生一个新的fsimage
    d. 将新的fsimage复制一份到NN上
    f. 使用新的fsimage和新的edits log
  • DataNode(DN)
    • 存储数块(block)
    • 启动DN线程时,DN会自动想NN汇报Block的信息
    • NN向DN发送心跳检测,与其DN保持联系(3秒一次),如果NN连续10分钟没有收到DN的心跳,则认为该DN已经lost,并从其他DN中备份一份该DN上的所有Block
    • block的放置策略
      • 第一个副本,放置在上传文件的DN上,如果是集群外提交,则随便选择一台磁盘、内存、CPU不太忙的节点存储
      • 第二个副本,放置在与第一个副本不同机架上的节点上
      • 第三个副本,放置在与第二个副本相同机架上的相邻节点上
      • 更多副本随机放置

HDFS写入流程

HDFS上传文件
原理
  • NameNode具有RackAware机架感知功能,可以配置
  • 若client为DataNode节点,那存储block时,规则为:副本1,同client的节点上;副本2,不同机架节点上;副本3,同第二个副本机架的另一个节点上;其他副本随机挑选
  • 若client不为DataNode节点,那存储block时,规则为:副本1,随机选择一个节点上;副本2,不同副本1机架上;副本3,同副本2相同的另一个节点上;其他副本随机挑选
  • client想DataNode发送Block1;发送过程以流式写入

HDFS的读取流程

HDFS读取文件

HDFS读取多副本
  • client向NameNode发送读请求
  • NameNode查看Metadata信息,返回文件的block的位置
    block1 = 1,5,6
    block2 = 8,1,2
    block3 = 5,8,9
  • block的位置是有先后顺序的,先读block1,再读block2、block3。而且block1去node1上读取,然后block2去node8上读取,block3去node5上读取

副本选择

为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本。如果在读取程序的同一个机架上有一个副本,那么就读取该副本。如果一个HDFS集群跨越多个数据中心,那么客户端也将首先读本地数据中心的副本

安全模式

Namenode启动后会进入一个称为安全模式的特殊状态。处于安全模式的Namenode是不会进行数据块的复制的。Namenode从所有的 Datanode接收心跳信号和块状态报告。块状态报告包括了某个Datanode所有的数据块列表。每个数据块都有一个指定的最小副本数。当Namenode检测确认某个数据块的副本数目达到这个最小值,那么该数据块就会被认为是副本安全(safely replicated)的;在一定百分比(这个参数可配置)的数据块被Namenode检测确认是安全之后(加上一个额外的30秒等待时间),Namenode将退出安全模式状态。接下来它会确定还有哪些数据块的副本没有达到指定数目,并将这些数据块复制到其他Datanode上

通信协议

所有的HDFS通讯协议都是建立在TCP/IP协议之上。客户端通过一个可配置的TCP端口连接到Namenode,通过ClientProtocol协议与Namenode交互。而Datanode使用DatanodeProtocol协议与Namenode交互。一个远程过程调用(RPC)模型被抽象出来封装ClientProtocol和Datanodeprotocol协议。在设计上,Namenode不会主动发起RPC,而是响应来自客户端或 Datanode 的RPC请求

你可能感兴趣的:(Hadoop分布式存储)