关于hdfs:HDFS分布式文件系统

39次阅读

共计 1639 个字符,预计需要花费 5 分钟才能阅读完成。

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 的限额与归档以及集群平安模式

正文完
 0