HDFS(一)基本概念

时间:2024-03-26 12:17:30

HDFS

一、概述

  1. 是Hadoop中用于数据的分布式存储的组件
  2. 根据Google论文《The Google File System》来设计的

二、基本结构

  1. 在HDFS中,对于文件是进行切块保存
  2. HDFS中有2类主要的节点:NameNode和DataNode
  3. NameNode负责管理DataNode
  4. DataNode负责存储数据
  5. HDFS会对文件块进行自动的备份,每一个备份称之为复本(Replication),HDFS默认是3个复本
  6. 如果某一个DataNode宕机,那么在HDFS中默认将这个DataNode所存储的复本再进行一次备份,保证指定的复本数量,宕机的设备恢复后不会删除多余副本。

三、Block

  1. 在HDFS中,会对文件进行切块,每一个块实际上就是一个Block
  2. Block是HDFS中存储的基本单位
  3. Block在Hadoop1.0中的大小是64M,在Hadoop2.0中的大小是128M
  4. 如果一个文件或者数据的大小不满足Block的大小,那么这个文件或者数据是多大那么对应的Block就是多大
  5. 切块的意义:
    a. 便于存储超大文件
    b. 便于进行快速的备份
  6. HDFS对每一个Block分配一个递增的编号

四、NameNode

  1. NameNode是HDFS中的核心节点,用于管理其他的DataNode
  2. NameNode本身会记录元数据(Meta Data)
  3. 元数据包含:
    a. 文件的存储路径,例如/a.log,/test/b.txt
    b. 复本数量
    c. 文件所对应的文件块 — Block
    d. 每一个Block的存储节点
  4. 每一条元数据一般是在150B大小左右
  5. 只有写请求会产生元数据,读请求不产生元数据
  6. 元数据在NameNode中存储在内存以及磁盘中
  7. 元数据存储在内存中的目的是为了快速查询
  8. 元数据存储在磁盘中是为了崩溃恢复
  9. 元数据存储在磁盘上的位置由core-site.xml中的属性hadoop.tmp.dir来决定,在指定的目录的子目录dfs/name/current下
  10. 元数据存储的文件:
    a. edits:记录NameNode接收的每一次的写(上传、删除、追加)请求
    b. fsimage:记录元数据,但是这个文件中的元数据不是实时的
  11. 当NameNode接收到一个新的写请求的时候,会先将这个请求写到edits文件中,当edits文件写成功之后,再去更改内存中的元数据,当内存中的元数据更改完毕之后,会个客户端返回一个成功信号
  12. edits和fsimage在触发合并条件的时候会进行合并:
    a. 时间:由(core-site.xml)fs.checkpoint.period属性决定,默认数量是3600,默认时间单位是秒
    b. 空间:由(core-site.xml)fs.checkpoint.size属性决定,默认是64M,表示当edits文件到达64M的时候会将其中的操作更新到fsimage中
    c. 重启:NameNode重新启动的时候,自动触发edits和fsiamge的合并
    d. 强制:指令 hadoop dfsadmin -rollEdits
  13. 内存中元数据 = edits中的操作+fsimage中的元数据
  14. 在Hadoop1.0中,NameNode有且只有一个,也就意味着NameNode存在单点故障
  15. 在Hadoop2.0的伪分布式中,NameNode也只有一个;但是在Hadoop2.0的完全分布式中,可以通过舍弃SecondaryNameNode的方式来搭建2个NameNode避免NameNode的单点故障
  16. 在完全分布式中,如果存在NameNode和SecondaryNameNode,那么合并过程是发生在SecondaryNameNode上;如果舍弃了SecondaryNameNode,合并过程只能发生在NameNode上
  17. DataNode通过心跳机制(每隔固定时间)来给NameNode发送心跳信号
  18. 心跳信号包含:
    a. 当前节点的状态
    b. 当前DataNode存储的数据
  19. 在HDFS启动/重启的时候,自动的触发edits和fsimage的合并,合并完成之后,会将fsimage中的元数据加载到内存中,然后会进行一系列的校验(等待DataNode的心跳,校验数据的完整性),在这个过程中,HDFS不对外提供写服务只提供读服务,这种情况称之为安全模式
  20. HDFS当完成所有的校验之后会自动退出安全模式
  21. 如果在伪分布式下,设置的复本数量>1,那么就会无法退出安全模式

五、DateNode

  1. DataNode用于存储数据,数据是以Block形式存储
  2. DataNode通过心跳机制(RPC)来向NameNode发送心跳信号
  3. DataNode每隔3s向NameNode发送一次心跳
  4. 如果NameNode超过10min没有收到DataNode的心跳,那么NameNode认为这个DataNode已经lost(丢失)
  5. 当NameNode认为DataNode已经lost的时候,NameNode要将这个DataNode上的Block备份到其他的节点上

六、SecondaryNameNode

  1. SecondaryNameNode不是NameNode热备,只是辅助NameNode进行元数据的合并,SecondaryNameNode也能起到一定的备份作用
  2. 合并过程:
    HDFS(一)基本概念
  3. SecondaryNameNode设计的目的是为了提高HDFS的运行效率,但是实际开发过程中往往会舍弃SecondaryNameNode,而是采用双NameNode机制来实现NameNode的热备

七、多副本放置策略

  1. 第一个复本:如果是从集群内部上传,哪个节点上传第一个复本就放在哪个节点上;如果是从集群外部上传,那么NameNode会选择一个相对比较空闲的DataNode存储第一个复本
  2. 第二个复本:放在和第一个复本不同机架的节点上
  3. 第三个复本:放在和第二个复本相同机架的节点上
  4. 更多复本:选择相对空闲的节点来放置

机架感知策略

  1. 机架感知策略本质上是建立节点和机架的映射关系
  2. 机架指的不是物理机架而是逻辑机架
  3. 可以将不同物理机架上的节点映射到同一个逻辑机架上
  4. 一般是将同一个物理机架上的节点放到同一个逻辑机架上