HDFS高可用单NameNode从standby恢复为active(二)

news2024/11/15 11:27:45

1、背景

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

        上篇文章(HDFS高可用单NameNode从standby恢复为active(一)_Interest1_wyt的博客-CSDN博客)讲解了通过新增namenode节点的方式解决高可用hdfs集群namenode为standy的问题。新增节点解决方式虽然很好。但是需要准备一个新节点,紧急情况下可能不能很快拿到可用的节点,而且新节点还要安装好基础的环境信息。另外如果该hdfs已经废弃,当前只是紧急访问下hdfs某个文件,那么新增一个节点其实有点浪费资源。基于场景需要,所以就想能不能将集群从高可用状态降为单namenode状态继续使用。

2、解决思路

        hdfs ha主要基于zkfc实现,zkfc主要有两个功能:
                1)namenode的节点切换。
                2)编辑日志和镜像文件的定期整合。

如果从ha降为单节点。那么zkfc肯定不能继续使用,其特有的两个功能也不再继续生效,namenode节点切换在单节点时不需要,但是编辑日志和镜像文件整合还是需要的。这个功能可以通过secondaryNameNode实现(secondaryNameNode也不是必须的,即只启动namenode和datanode也可以)

3、解决步骤

        整个方案是基于我的虚拟机进行验证,总共有三台虚拟机,分别是node1、node2、node3,其中node1和node3是原先namenode的安装点。后面准备只启动node1作为namenode节点,并且在node2上启动secondaryNameNode进程。

3.1)停止所有hdfs进程

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

3.2)修改core-site.xml配置文件并分发到所有节点

指定hdfs地址为确切的节点

    <property>
    <!--  hdfs 地址,ha中是连接到nameservice -->
        <name>fs.defaultFS</name>
        <!-- <value>hdfs://ns1</value> -->
        <value>hdfs://node1:9000</value>
    </property>
    <property>

3.3)修改hdfs-site.xml配置文件并分发到所有节点

删除或注释所有ha相关的配置

<configuration>

	<!-- 指定secondaryNameNode节点 -->
	<property>
		<name>dfs.namenode.secondary.http-address</name>
		<value>node2:50090</value>
	</property>

	<!-- 为namenode集群定义一个services name -->
	<!-- <property>
		<name>dfs.nameservices</name>
		<value>ns1</value>
	</property> -->

	<!-- nameservice 包含哪些namenode,为各个namenode起名 -->
<!-- 	<property>
		<name>dfs.ha.namenodes.ns1</name>
		<value>nn1,nn2</value>
	</property> -->

	<!--  名为nn1的namenode 的rpc地址和端口号,rpc用来和datanode通讯 -->
<!-- 	<property>
		<name>dfs.namenode.rpc-address.ns1.nn1</name>
		<value>node1:8020</value>
	</property> -->

	<!-- 名为nn2的namenode 的rpc地址和端口号,rpc用来和datanode通讯  -->
<!-- 	<property>
		<name>dfs.namenode.rpc-address.ns1.nn2</name>
		<value>node3:8020</value>
	</property> -->

	<!--名为nn1的namenode 的http地址和端口号,web客户端 -->
<!-- 	<property>
		<name>dfs.namenode.http-address.ns1.nn1</name>
		<value>node1:50070</value>
	</property> -->

	<!--名为nn2的namenode 的http地址和端口号,web客户端 -->
<!-- 	<property>
		<name>dfs.namenode.http-address.ns1.nn2</name>
		<value>node3:50070</value>
	</property> -->

	<!--  namenode间用于共享编辑日志的journal节点列表 -->
<!-- 	<property>
		<name>dfs.namenode.shared.edits.dir</name>
		<value>qjournal://node1:8485;node2:8485;node3:8485/ns1</value>
	</property> -->

	<!--  journalnode 上用于存放edits日志的目录 -->
<!-- 	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/opt/module/hadoop-2.10.1/data/tmp/dfs/jn</value>
	</property> -->

	<!--  客户端连接可用状态的NameNode所用的代理类 -->
<!-- 	<property>
		<name>dfs.client.failover.proxy.provider.ns1</name>
		<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property> -->

	<!-- sshfence:防止namenode脑裂,当脑裂时,会自动通过ssh到old-active将其杀掉,将standby切换为active  -->
<!-- 	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property> -->

	<!--ssh密钥文件路径-->
<!-- 	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/home/hadoop/.ssh/id_rsa</value>
	</property> -->

	<!-- 故障转移 -->
<!-- 	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property> -->
</configuration>

3.4)删除zookeeper上的高可用记录节点

        zkCli.sh 进入zk客户端
        ls / 查看根目录下是否有hadoop-ha目录
        deleteall /hadoop-ha 删除高可用记录

3.5)启动hadoop集群

        hadoop-daemon.sh start namenode

        hadoop-daemon.sh start secondarynamenode (非必须)

        hadoop-daemon.sh start datanode

3.6)访问hdfs web接口 namenodeIp:50070

 

4、总结

        最后访问hdfs web页面,可以看到hdfs集群正常工作,读写也正常。所以将高可用的hdfs降为单节点namenode的集群方案是可行的。即如果两个namenode有一个不能用了,紧急情况下也可以通过修改配置的方式将hdfs降低为单namenode的集群继续进行工作。

        secondaryNameNode的功能是整合namenode的元信息,如果集群只是临时用一下,可以不用开启该进程,但是如果集群需要长时间以单namenode的情况进行运行,最好还是开始secondaryNameNode进程。

  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/175738.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java面向接口编程2023027

那就再进一步&#xff1a;面向接口编程 面向接口编程前面已经提到&#xff0c;接口体现的是一种规范和实现分离的设计哲学&#xff0c;充分利用接口可以极好地降低程序各模块之间的耦合&#xff0c;从而提高系统的可扩展性和可维护性。 基于这种原则&#xff0c;很多软件架构设…

Leetcode——第 329 场周赛

题目链接&#xff1a; 交替数字和 根据第 K 场考试的分数排序 执行逐位运算使字符串相等 拆分数组的最小代价 题目描述 交替数字和 给你一个正整数 n 。n中的每一位数字都会按下述规则分配一个符号&#xff1a; 最高有效位 上的数字分配到 正 号。 剩余每位上数字的符号都与…

学习记录666@项目管理之项目质量管理

什么项目质量管理 所谓项目质量&#xff0c;是项目满足需求的程度&#xff1b;所谓质量管理&#xff0c;就是为了使项目满足需求的程度足够高或者是合适程度下而进行的一系列管理活动。 包括规划质量管理、实施质量保证、质量控制三个方面。 规划质量管理 规划质量管理主要…

JUC面试(七)——CountDownLatchCyclicBarrierSemaphore

CountDownLatch 概念 让一些线程阻塞直到另一些线程完成一系列操作才被唤醒 CountDownLatch主要有两个方法&#xff0c;当一个或多个线程调用await方法时&#xff0c;调用线程就会被阻塞。其它线程调用CountDown方法会将计数器减1&#xff08;调用CountDown方法的线程不会被…

nacos源码分析==客户端从服务端读取配置文件-服务端服务注册

客户端从服务端读取配置文件 客户端启动的时候会扫描到boostrap.yml中的信息&#xff0c;扫描到标签ConditionalOnProperty会将NacosConfigBootstrapConfiguration 中的bean注入。其中NacosConfigProperties就是读取的boostrap.yml中spring.cloud.nacos.config下的配置项。Nac…

“深度学习”学习日记。与学习有关的技巧--权重的初始值

2023.1.22 在深度学习的学习中&#xff0c;权重的初始值特别重要。这关系到神经网络的学习能否成功&#xff1b; 在以前误差反向传播法和神经网络学习的算法实现这两篇文章中&#xff0c;对权重的初始值的确定是这样的&#xff1a; class TwoLayerNet:def __init__(self, inp…

在2022年的最后一天我学会了哈希表

文章目录前言STL相关容器unordered_setunordered_map哈希表哈希冲突闭散列开散列STL相关容器的模拟实现用一个哈希表改造两个容器哈希表的迭代器总结前言 首先先提前祝贺大家新年快乐&#xff01;本文是农历2022年的最后一篇博客。而今天我们介绍的也是STL里面重要的一个数据结…

2023年, 前端路上的开源总结(最新更新...)

19年至今, 笔者利用空余时间陆陆续续做了一些开源项目, 大部分开源项目都是以实际价值为开源基础, 所以我觉得有必要做一个总结和复盘,在复盘的过程中希望也能对大家有所帮助.今后笔者的开源项目都会放在这篇文章中,如果想学习的可以收藏交流.1. 基于react实现的滑动验证码组件…

[LeetCode周赛复盘] 第 96 场双周赛20230121

[LeetCode周赛复盘] 第 96 场双周赛20230121 一、本周周赛总结二、 [Easy] 6300. 最小公共值1. 题目描述2. 思路分析3. 代码实现三、[Medium] 6275. 使数组中所有元素相等的最小操作数 II1. 题目描述2. 思路分析3. 代码实现四、[Medium] 6302. 最大子序列的分数1. 题目描述2. 思…

【JavaScript】33_对象的序列化----JSON

3、对象的序列化 对象的序列化 JS中的对象使用时都是存在于计算机的内存中的 序列化指将对象转换为一个可以存储的格式 在JS中对象的序列化通常是一个对象转换为字符串&#xff08;JSON字符串&#xff09;序列化的用途&#xff08;对象转换为字符串有什么用&#xff09;&…

Linux嵌入式开发——文件系统结构

文章目录Linux嵌入式开发——文件系统结构一、根目录“/”二、Ubuntu文件系统结构三、绝对路径和相对路径Linux嵌入式开发——文件系统结构 一、根目录“/” ​ Linux下“/”就是根目录&#xff01;所有的目录都是由根目录衍生出来的。 二、Ubuntu文件系统结构 /bin 存放二进…

第十届蓝桥杯省赛 C++ A/B组 - 完全二叉树的权值

✍个人博客&#xff1a;https://blog.csdn.net/Newin2020?spm1011.2415.3001.5343 &#x1f4da;专栏地址&#xff1a;蓝桥杯题解集合 &#x1f4dd;原题地址&#xff1a;蜂巢 &#x1f4e3;专栏定位&#xff1a;为想参加蓝桥杯的小伙伴整理常考算法题解&#xff0c;祝大家都能…

Linux C编程一站式学习笔记4

Linux C编程一站式学习笔记 chap4 分支语句 文章目录Linux C编程一站式学习笔记 chap4 分支语句一.if语句语句块习题二.if/else语句引例if/else语句 语法规则if else 的配对原则习题1、写两个表达式&#xff0c;分别取整型变量x的个位和十位2、写一个函数&#xff0c;参数是整型…

常见流对象的使用

文章目录一、缓冲流字节缓冲流字符缓冲流二、转换流字符输入转换流字符输出转换流三、对象序列化对象序列化对象反序列化四、打印流PrintStreamPrintWriter一、缓冲流 缓冲流&#xff1a;也叫高效流或者高级流&#xff0c;我们之前学的字节流称为原始流&#xff0c;缓冲流自带…

【JavaSE】浅析String与StringTable

文章目录1. 前言2. String的两种创建方式2.1 通过new关键字创建一个字符串对象2.2 采用双引号的方式来创建字符串对象2.3 两种方式的区别3. StringTable的位置4. String的intern()方法5. 判断两个字符串是否相等5.1 equals5.2 1. 前言 String类是开发中经常使用的一个类。 对…

第七层:多态

文章目录前情回顾多态多态的基本概念动态多态的满足条件动态多态的使用虚函数多态的优点纯虚函数和抽象类抽象类特点虚析构和纯虚析构虚析构和纯虚析构的共性虚析构和纯虚析构的区别面向对象结束&#xff0c;接下来是什么?本章知识点&#xff08;图片形式&#xff09;&#x1…

数据结构进阶 哈希桶

作者&#xff1a;小萌新 专栏&#xff1a;数据结构进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;模拟实现高阶数据结构 哈希桶 哈希桶哈希冲突的另一种解决方法开散列 -- 链地址法举例哈希表的开散列实现 --哈希桶哈希表的结构…

自动化测试Selenium【基础篇二】

自动化测试Selenium【基础篇二】&#x1f34e;一.Selenium基础使用&#x1f352;1.1 信息打印&#x1f349; 1.1.1打印标题&#x1f349; 1.1.1打印当前网页标题&#x1f352;1.2 窗口&#x1f349;1.2.1 获取句柄&#x1f349;1.2.2 窗口切换&#x1f349;1.2.3 窗口大小设置&…

当你点击浏览器的瞬间都发生了什么----- 网络学习笔记

计算机网络前言web 浏览器协议栈创建套接字阶段。连接阶段。断开阶段。IP模块网卡网络设备 --- 集线器、交换器和路由器集线器交换器路由器路由器的附加功能一 &#xff1a;地址转换路由器的附加功能一 &#xff1a;包过滤功能互联网内部接入网光纤接入网&#xff08;FTTH&…

JDK8 前后的 Date 日期时间 API

JDK8 前后的 Date 日期时间 API 每博一文案 师父说&#xff1a;人只要活在世界上&#xff0c;就会有很多的烦恼&#xff0c;痛苦或是快乐&#xff0c;取决于逆的内心&#xff0c;只要心里拥有温暖灿烂的阳光&#xff0c; 那么悲伤又有什么好畏惧的呢&#xff1f; 人生如行路&a…