HDFS简介

HDFS是Hadoop外围组成, 是分布式存储服务

HDFS是分布式文件系统中的一种

HDFS的重要概念

HDFS通过对立的命名空间目录树来定位文件另外, 它是分布式的, 由很多服务器联结起来实现其性能. 集群中的服务器有各自的角色(分布式实质是拆分, 各司其职)
  • 典型的Master/Slave架构
    HDFS的架构是典型的Master/Slave构造
    HDFS集群往往是一个NameNode+多个DataNode组成
    NameNode是集群的主节点, DataNode是集群的从节点
  • 分块存储(block机制)
    HDFS中的文件在物理是分块存储(block)的, 块的大小能够通过配置参数来指定
    Hadoop2.x版本中默认的block大小是128M
  • 命名空间(NameSpace)
    HDFS反对传统的档次型文件组织构造.
    用户或者应用程序能够创立目录, 而后将文件保留在这些目录里.
    文件系统命名空间的层次结构和大多数现有的文件系统相似: 用户能够创立, 删除, 挪动或重命名文件

    NameNode负责保护文件系统的命名空间, 任何对文件系统命名空间或属性的批改都将被NameNode记录下来

  • NameNode元数据管理
    咱们把目录构造文件分块地位叫做元数据
    NameNode的元数据记录每一个文件所对应的block信息(block的id, 以及所在的DataNode节点)
  • DataNode数据存储
    文件的各个block的具体存储管理由DataNode节点来承当
    一个block会有多个DataNode来存储, DataNode会定时向NameNode来汇报本人持有的block信息
  • 正本机制
    为了容错, 文件的所有block都会有正本
    每个文件的block大小和正本系数都是可配置的
    应用程序能够指定某个文件的正本数目
    正本系数能够在文件创建的时候指定, 也能够在之后扭转
    正本数量默认是3个
  • 一次写入, 屡次读出
    HDFS设计成适应一次写入, 屡次读出的场景, 且不反对文件的随机批改 . (反对追加写入, 不反对随机更新)
    正因为如此, HDFS适宜用来做大数据分析的底层存储, 并不适宜用来做网盘等利用 (批改不不便, 提早大, 网络开销大, 老本太高)

HDFS架构

  • NameNode: HDFS集群的管理者, Master

    • 保护治理HDFS的命名空间(NameSpace)
    • 保护正本策略
    • 记录文件块(Block)的映射信息
    • 负责解决客户端读写申请
  • DataNode: NameNode下达命令, DataNode执行实际操作, Slave

    • 保留理论的数据块
    • 负责数据块的读写
  • Client: 客户端

    • 上传文件到HDFS的时候, Client负责将文件切分成Block, 而后进行上传
    • 申请NameNode交互, 获取文件的地位信息
    • 读取或写入文件, 与DataNode交互
    • Client能够应用一些命令来治理HDFS或拜访HDFS

HDFS读写解析

HDFS读数据流程

  • 客户端通过Distributed FileSystem向NameNode申请下载文件, NameNode通过查问元数据找到文件块所在的DataNode地址
  • 筛选一台DataNode(就近准则, 而后随机)服务器, 申请读取数据
  • DataNode开始传输数据给客户端 (从磁盘外面读取数据输出流, 以Packet为单位来做校验)
  • 客户端以Packet为单位接管, 先在本地缓存, 而后写入指标文件

HDFS写数据流程

  • 客户端通过Distributed FileSystem模块向NameNode申请上传文件, NameNode查看指标文件是否已存在, 父目录是否存在
  • NameNode返回是否能够上传
  • 客户端申请第一个Block上传到哪几个DataNode服务器上
  • NameNode返回3个DataNode节点, 别离是dn1, dn2, dn3
  • 客户端通过FSDataOutputStream模块申请dn1上传数据, dn1收到申请会持续调用dn2, 而后dn2调用dn3, 将这个通信管道建设实现
  • dn1, dn2, dn3逐级应答客户端

NN与2NN

NN故障解决

Hadoop的限额与归档以及集群平安模式