Touch HDFS (hadoop分布式文件系統)

总览

注:本文为学习课程内容整理

环境

具体见上一章:

  • hadoop各结点:
    hadoop01 hadoop02 hadoop03
    NameNode SecondaryNameNode
    DataNode DataNode DataNode
    NodeManager NodeManager NodeManager
    JobHistoryServer
    ResourceManager

1. Hadoop文件系统

  • hadoop有一个抽象的文件系统概念

  • HDFS是hadoop文件系统的一个实现

  • Java抽象类org.apache.hadoop.fs.FileSystem定义了Hadoopp中的一个文件系统接口

    Touch HDFS (hadoop分布式文件系統)

2. 什么是HDFS

  • HDFS(Hadoop Distributed FileSystem)最初作为apache Nutch项目的基础架构开发, 是 apache hadoop core项目的一部分
  • 适合运行在通用硬件设备上, 有高容错性, 适合部署在廉价机器上
  • 提供高吞吐量的数据访问, 适合大规模数据集上的应用

3. HDFS设计目标

适用

  1. 超大文件

    指具有几百MB, GB, TP, 的文件, 目前已经有pb级的Hadoop集群

  2. 流式数据访问

    指一次写入, 多次读取的访问模式, 数据集通常由数据源直接生成或复制, 然后长时间在此数据集上进行操作

  3. 商用硬件

    不需要高可靠性的机器, 而是在商用硬件集群上运行.

不适用

  1. 低时延的数据访问

    不适合低时延的数据访问, 比如几十ms级别的时延, hdfs是设计为大量数据吞吐量优化的, 可能会以时延提高为代价

  2. 大量小文件

    hdfs的namenode将元数据的信息存储在namenode内存中, 因此, hdfs的存储文件数受限于namenode内存容量, 大量小文件会导致namenode内存中存储大量的文件相关信息

  3. 多用户写入, 任意修改文件

    hdfs只支持单用户写入, 而且写入方式总是以"只添加"的方式写入到文件末尾.
    不支持多个写入者; 不支持在文件任意位置修改文件

4. HDFS概念

概念

  1. Block(数据块)
  2. NameNode(管理节点)
  3. SecondaryNamenode(辅助节点)
  4. DataNode(工作节点)
  5. 块缓存
  6. 联邦HDFS

概念图
Touch HDFS (hadoop分布式文件系統)

4.1. Block(数据块)

  • HDFS的最基本存储单位, DFS上的文件被划分为多个块大小的分块作为独立的存储单元, 默认块大小为 128M, 小于分块的文件 不会 占据整个块的空间
  • 数据块的设置原则
    1. hdfs的块比磁盘的块大, 这样, 从磁盘传输数据的时间会远大于定位这个块开始位置的时间
    2. 这个参数不应该过大, 因为MR的map任务通常一次只处理一个块的数据, 若任务太少, 减少了并发性, 作业速度降低
  • 数据块的好处
    1. 文件被分成很多块存储在很多磁盘中, 所以其大小可以大于网络中任意磁盘容量
    2. 简化了存储子系统的设计, 块大小固定, 计算磁盘存储多少个块就相对容易
    3. 块适合用于数据备份, 给i高容错能力和可用性

4.2. Namenode(管理节点)

  • 管理文件系统的命名空间, 维护系统树及整颗树内的所有文件和目录
  • 命名镜像文件和编辑日志文件
  • 记录每个文件中各个块的数据节点信息, 在系统启动时根据节点信息重建
    Touch HDFS (hadoop分布式文件系統)
    Touch HDFS (hadoop分布式文件系統)
  • 设置namenode
    Touch HDFS (hadoop分布式文件系統)

4.2.1 NameNode深入

  • namenode目录结构
    Touch HDFS (hadoop分布式文件系統)
  • Namenode–VERSION
    Touch HDFS (hadoop分布式文件系統)
    • layoutVersin: 负整数, 描述当前hdfs的永久性数据结构的版本, 该版本号与hadoop版本无关, 更新递减;
    • namespaceID: 是该文件系统的唯一标识符, 是文件系统首次格式化时创建的, 任何新注册的datanode是不知道该值的, 因此,namenode 可以通过改属性鉴别新建的datanode
    • cTime: 时间戳, 创建namenode时为0
    • staorageType: 该节点的类型
  • NameNode–edits
    Touch HDFS (hadoop分布式文件系統)
  • NameNode–fsimage
    Touch HDFS (hadoop分布式文件系統)

4.3. SecondaryNameode(辅助节点)

  • NameNode的备份; 定期合并编辑日志与命名空间镜像
  • 一般在单独物理机上运行, 需要和namenode一样的内存. 占用大量的cpu时间
  • 保存合并的命名空间镜像, 在namenode发生故障时启用
  • 设置SecondaryNameNode
    Touch HDFS (hadoop分布式文件系統)

4.3.1 SecondaryNameNode深入

  • SecondaryNameNode–目录结构
    Touch HDFS (hadoop分布式文件系統)
    • current与previouse.checkpoint与namenode的current布局相同. 在namenode发生故障时, 可以直接从secondaryNameNode恢复数据

SecondaryNameNode工作原理

Touch HDFS (hadoop分布式文件系統)
Touch HDFS (hadoop分布式文件系統)

4.4. DataNode(工作节点)

  • 根据需要存储和检索数据块, 并定期向namenode发送他们所存储的块列表
  • HDFS默认块大小128m, 以数据块形式存储数据
  • Replication: 副本容量, 默认3个 可以在hdfs-site.xml的dfs.replication属性进行设置
  • datanode设置
    Touch HDFS (hadoop分布式文件系統)

4.4.1 深入DataNode

  • 目录结构
    Touch HDFS (hadoop分布式文件系統)
  • DataNode–VERSION
    Touch HDFS (hadoop分布式文件系統)
    Touch HDFS (hadoop分布式文件系統)
    Touch HDFS (hadoop分布式文件系統)

4.5. 块缓存

  • datanode从磁盘读取块, 对频繁访问的文件, 其对应块被显示的缓存在datanode的内存中, 以堆外块缓存的形式存在
  • 默认情况下, 一个块仅缓存在一个datanode的内存中, 作业调度器通过缓存块的datanode上运行任务吗利用块缓存优势提高效率

4.6. 联邦HDFS

  • namenode在内存中保存每个文件每个块的引用信息, 因此namenode的内存将限制系统的横向发展
  • 联邦HDFS允许namenod实现扩展, 其中每个namenode管理dfs命名空间中的一部分
  • 如: 一个namenode管理/user目录下的所有文件, 一个namenode管理/share目录下的所有文件

5. HDFS数据读取流程

Touch HDFS (hadoop分布式文件系統)
Touch HDFS (hadoop分布式文件系統)