当前位置:   article > 正文

hdfs(一)高可用单NameNode从standby恢复为active_hdfs standby

hdfs standby

1、背景

        有一个hdfs高可用集群,因为某些操作,导致其中一个namenode的信息全部丢失了。最后只剩下一个完整的namenode信息和datanode信息。于是在在启动hdfs后发现独有的namenode始终处于standby状态。即使通过hdfs haadmin -transitionToActive命令也不能强制转换namenode为active。因此hdfs一直不能正常对外提供服务。

2、解决思路

        高可用hdfs集群,至少要有两个namenode节点,如果只有一个namenode节点,那么无论怎么启动,namenode节点状态始终为standby。所以如果想将hdfs重新恢复可用,那么可以重新搭建一个namenode节点。然后将完整的namenode元数据重新导入到新namenode中。

3、解决步骤

3.1 准备一个新节点

        安装好jdk等基础环境

3.2 关闭hdfs所有进程

3.3 将仅存namenode节点的安装文件夹拷贝到新节点

        拷贝时要注意namenode和datanode的存储目录信息。如果namenode和datanode的存储路径就在安装文件夹内,那么拷贝到新节点时要注意删除datanode存储路径下的数据(不删也可以,只是新增的节点只能作为namenode使用,不能作为datanode使用)。

        namenode和datanode的存储路径信息可以通过hdfs-site.xml配置文件中的dfs.namenode.name.dir、dfs.datanode.data.dir进行查看,如果没配置,那么可以通过core-site.xml中的hadoop.tmp.dir属性查看hdfs的临时目录在哪,namenode和datanode数据在没有主动声明存储位置时,会全存储到临时目录里

3.4 替换hdfs-site.xml中无效namenode的访问入口,并分发到所有节点

        这里主要更改两个配置:

    <property>
        <name>dfs.namenode.rpc-address.ns1.nn1</name>
        <value>node1:8020</value>
    </property>

    <property>
        <name>dfs.namenode.http-address.ns1.nn1</name>
        <value>node1:50070</value>
    </property>

另外这里提一句,hdfs中除了配置namenode地址外,还有datanode、journalnode、zookeeper地址的配置,如果这些地址都和缺失的namenode节点有关,那么都需要进行更改。

3.5 格式化zookeeper上存储的namenode元信息

        这里主要通过 hdfs zkfc -formatZK 命令重新初始化zookeeper上原有的namenode记录。

3.6 通过如下命令启动hdfs ha集群

    hadoop-daemon.sh start journalnode
    hadoop-daemon.sh start namenode
    hadoop-daemon.sh start zkfc
    hadoop-daemon.sh start datanode

4、总结

        因为生产环境不能截图,所以本文的介绍多以解决流程为主,虽然不同的场景可能修改的配置不一样,但是该类问题的解决流程大体如上所述。而且我在虚拟机中也验证过上述的流程的通用性。

        上述解决方式其实是相当于是重新引入一个namenode节点信息,进而从新恢复为高可用状态。但是我在想如果有完整的namenode和datanode信息,可否从高可用状态降为单namenode状态继续使用,这样就不用引入新的namenode节点。后续我将验证这一猜想。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/394435
推荐阅读
相关标签
  

闽ICP备14008679号