HDFS2.0

HDFS2.0

HDFS 2.0的新特性

  • NameNodeHA
  • NameNodeFederation
  • HDFS 快照
  • HDFS 缓存
  • HDFS ACL

NameNodeHA

  • 什么问题:Hadoop 1.0中NameNode在整个HDFS中只有一个,存在单点故障风险,一旦NameNode挂掉,整个集群无法使用
  • 解决方法:HDFS的高可用性将通过在同一个集群中运行两个NameNode(active NameNode& standby NameNode)来解决
  • 在任何时间,只有一台机器处于Active状态;另一台机器是处于Standby状态
  • Active NN负责集群中所有客户端的操作;
  • Standby NN主要用于备用,它主要维持足够的状态,如果必要,可以提供快速的故障恢复。

  • DN->NN : block -> dataNode

  • file -> block -> dataNode

  • 数据

  • 命名空间

    • 借助NFS文件系统,network File system
    • Hadoop自身提供了一个服务,叫做QJM
    • 存路径结构体系,不存储节点文件
  • NFS: 属于操作系统支持的配置 -> 镜像文件和编辑日志文件,

  • QJM: 属于应用软件级别的配置

  • 最多能挂几个? (N) 2n+1个JN

  • FailOverController(ZKFC) :用来完成故障转移用的

  • ZKFC是ZK集群的客户端,ZKFC来监控NN的状态信息

  • 为什么使用QJM实现HA:

    • 不需要配置额外的共享存储(相比NFS)
    • 消除单点问题
    • 可配置,使得系统更加棒
    • JN不会因为其中一台的延迟而影响整体的延迟,也不会因为JN的数量增多而影响
  • 同步问题:需要依赖JournalNodes守护进程,完成元数据的一致性

  • 快速的故障恢复:心跳保证,Standby NN也需要保存集群中各个文件块的存储位置

  • 避免分歧:任何情况下,NameNode只有一个Active状态,否则导致数据的丢失及其它不正确的结果

  • 如何做到?

    • 在任何时间,JNs只允许一个NN充当writer。在故障恢复期间,将要变成Active 状态的NN将取得writer的角色,并阻止另外一个NN继续处于Active状态
  • 节点分配:

  • NameNodemachines:运行Active NN和Standby NN的机器需要相同的硬件配置

  • JournalNodemachines:也就是运行JN的机器。JN守护进程相对来说比较轻量,所以这些守护进程可以可其他守护线程(比如NN,YARN ResourceManager)运行在同一台机器上

    • 在一个集群中,最少要运行3个JN守护进程,这将使得系统有一定的容错能力。
  • 在HA集群中,Standby NN也执行namespace状态的checkpoints,所以不必要运行Secondary NN、CheckpointNode和BackupNode;事实上,运行这些守护进程是错误的。

NameNodeFederation (联邦)

  • 本质: 就是将一部分文件迁移到其他NN进行管理,只有元数据管理和存放被分割开,但是真实的数据存储还是共享

  • workstation_A => namenode 1

  • workstation_ B => namenode 2

  • 一个namespace对应一个block pool(是同一个namespace 下的所有block集合)

  • 集群中提供多个NameNode,每个NameNode负责管理一部分DataNode

  • 优势:

    • 命名空间可以横向扩展
    • 性能提升
    • 资源隔离
  • 应用:

    • 需要一个新的文件系统,viewfs(视图文件系统)
  • 集群中提供多个NameNode,每个NameNode负责管理一部分DataNode

  • 好处:实现NameNode的横向扩展,使得Hadoop集群的规模可以达到上万台

HDFS 快照

  • HDFS快照是一个只读的基于时间点文件系统拷贝

  • 快照可以是整个文件系统的也可以是一部分。

  • 常用来作为数据备份,防止用户错误操作和容灾恢复。

  • Snapshot 并不会影响HDFS 的正常操作:修改会按照时间的反序记录,这样可以直接读取到最新的数据。

  • 快照数据是当前数据减去修改的部分计算出来的。

  • 快照会存储在snapshottable的目录下。

  • 快照:主要用来备份数据,快照也是数据,也会占空间

  • 假设: 一个集群,如果全部备份,可能换需要另外一个集群,操作很麻烦,成本较高

  • 快照: 只记录block列表和文件大小,但不会出现数据的复制

  • HDFS快照是对目录进行设定,是某个目录的某一个时刻的镜像

  • 对于一个snapshottable文件夹,“.snapshot” 被用于进入他的快照/foo 是一个snapshottable目录,/foo/bar是一个/foo下面的文件目录,/foo有一个快照s0,那么路径就是:/foo/.snapshot/s0/bar

  • hdfsdfsadmin-allowSnapshot/user/spark

  • hdfsdfs-createSnapshot/user/spark s0

  • hdfsdfs-renameSnapshot/user/spark s0 s_init

  • hdfsdfs-deleteSnapshot/user/spark s_init

  • hdfsdfsadmin-disallowSnapshot/user/spark