• HDFS的启动流程和HA


    HDFS的启动流程

    1. 当 NameNode 启动时HDFS首先将Fsimage读入内存对元数据进行恢复,然后再读edits文件中的更新操作在恢复后的元数据上进行执行,使得此时的NameNode中保存的是停止前的最新状态,然后删除旧的edits (这个过程称为检査点),最后等待各个DataNode向 NameNode 汇报文件块的信息来组装 block ID 映射关系。
    2. DataNode 启动时会扫描本地文件系统,产生一个本地文件对应的 HDFS 文件块的列表(每个文件块会对应一个本地文件),然后作为报告发送到 NameNode(这个报告称为块状态报告)。
    3. NameNode 在接收到每个 DataNode 的块汇报信息后,将其和所在的 DataNode 信息等保存在内存中。

    HDFS的HA

    Hadoop1.x 

    如果 NameNode失效,可以通过 SecondaryNameNode 中保存的 FSImage 和 edits 数据恢复出 NameNode 最近的状态。

    为了加快 NameNode 重启速度,SecondaryNameNode 还会定期合并 edits。

    Hadoop2.x 

    在这里插入图片描述

             任何时刻,只有一个 NameNode处于 Active状态,另一个处于 Standby 状态。Active NameNode 负责所有的客户端操作,而 Standby NameNode 只是简单的充当 Slave,它负责维护状态信息以便在需要时能快速切换。

    主备切换控制器 ZKFailoverController

    • ZKFailoverController 作为独立的进程运行,对 NameNode的主备切换进行总体控制。
    • ZKFailoverController 能及时检测到NameNode的健康状况,在主 NameNode故障时借助 Zookeeper实现自动的主备选举和切换,当然 NameNode目前也支持不依赖于 Zookeeper的手动主备切换。

    Zookeeper 集群的目的是为主备切换控制器提供主备选举支持。

    联邦模式


            通过阅读专栏之前的内容我们知道 HDFS 集群的元数据信息是存放在 NameNode 的内存中的,当集群扩大到一定的规模以后, NameNode 内存中存放的元数据信息可能会非常大,由于 HDFS 的所有的操作都会和 NameNode 进行交互, 当集群很大时, NameNode 会成为集群的瓶颈。

            在 Hadoop2.x 诞生之前,HDFS 中只能有一个命名空间,对于 HDFS 中的文件没有办法完成隔离。正因为如此,在 Hadoop2.x中引入了Federation的机制,可以解决如下场景的问题。

    1.         HDFS集群扩展性。多个 NameNode 分管一部分目录,使得一个集群可以扩展到更多节点,不再像 1.0 中由于内存的限制制约文件存储数目。
    2.         性能更高效。多个 NameNode 管理不同的数据,且同时对外提供服务,将为用户提供更高的读写吞吐率。
    3.         良好的隔离性。用户可根据需要将不同业务数据交由不同 NameNode 管理这样不同业务之间影响很小。
  • 相关阅读:
    同旺科技 USB TO SPI / I2C适配器读写24LC128--读写
    力扣第56题 合并区间 c++ 贪心
    Docker之数据卷
    Linux-基础命令(黑马学习笔记)
    基于JAVA医院挂号管理系统计算机毕业设计源码+系统+mysql数据库+lw文档+部署
    PMP课程笔记:第13章 项目相关方管理
    Spring Boot和Spring MVC的区别
    docker基础命令
    redis主从+哨兵+集群模式搭建详解
    淘宝销量展示方式变更背后的逻辑
  • 原文地址:https://blog.csdn.net/qq_42456324/article/details/126799965