Hadoop HA集群两个NameNode都是standby或者主NameNode是standby,从NameNode是active的情况集锦

2023-11-05


这里说一下配置Hadoop HA集群可能出现的两种情况,第一种就是两个NameNode都是standby,第二种就是主Master是standby,从Master是active。

背景

针对Hadoop 1.x中可能出现的NameNode单点故障(SPOF)或者短时间无法使用的情况,Hadoop 2.x 通过增加一个NameNode的方式进行了改善,而增加一个NameNode后,实际在没有出现问题时,只需要一个NameNode,所以两个NameNode一个处于Standby状态,一个处于Active状态。Standby不对外提供服务,仅同步Active NameNode的状态,以便Active NameNode出现问题时及时切换成Active状态。

架构

Hadoop 2.x 的两个NameNode一般会配置在两台独立的机器上,Active NameNode会响应集群客户端,而Standby NameNode只是作为Active NameNode的备份,保证在Active NameNode出现问题时能够快速的替代它。

Standby NameNode通过JournalNodes的通信来与Active NameNode保持同步。

Active NameNode和Standby NameNode在哪个节点上,是由zookeeper通过主备选举机制来确定的。

HDFS HA配置

NameNode:对应配置相同的两台物理机,分别运行Active NameNode和Standby NameNode。

JournalNode:JournalNode不会耗费太多的资源,可以和其它进程部署在一起,如NameNode、Datanode、ResourceManager等,需要至少3个且为基数,这样可以允许(N-1)/2个JNS进程失败。

DataNode:根据数据量的大小和处理数据所需资源进行配置,一般实际应用中数量较多,且分布在较多的机器上。

NameNode和SecondaryNameNode不要安装在同一台服务器

ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode放在同一台机器上。

通过hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2命令查看,发现两个NameNode的状态都是standby
通过hdfs dfsadmin -report命令查看,发现HDFS数据均为0

错误原因

当首次执行命令hadoop namenode -format格式化NameNode时,会在dfs.namenode.name.dir对应路径下生成current/VERSION文件,其中记录了clusterID,同时dfs.datanode.data.dir对应的DataNode目录中也会生成current/VERSION文件,其中clustreID的与NameNode中clusterID的值相同。
当再次执行hadoop namenode -format命令时,NameNode对应的目录下会重新生成clusterID,导致和DataNode对应的clusterID不一致,从而造成上述问题。

解决方案

方案一

  1. 关掉集群
./stop-dfs.sh
  1. 删掉各个节点上DataNode对应的目录
rm -rf data
  1. 格式化NameNode
hadoop namenode -format
  1. 重启集群
./start-dfs.sh

方案二

  1. 关掉集群
./stop-dfs.sh
  1. 编辑clusterID使Namenode和DataNode同步
vim clusterID
  1. 重启集群
./start-dfs.sh

注意:
在生产环境中,谨慎使用hadoop namenode -format命令。以上操作是在首次搭建集群时且没有重要数据的情况下执行的。

hdfs haadmin -transitionToActive nn1

方案三(首先查看自己各参数文件是否配置出错)

1、首先在hdfs-site.xml中添加下面的参数,该参数的值默认为false:

<property>
   <name>dfs.ha.automatic-failover.enabled.ns</name>
   <value>true</value>
</property>

2、在core-site.xml文件中添加下面的参数,该参数的值为ZooKeeper服务器的地址,ZKFC将使用该地址。

<property>
	<name>ha.zookeeper.quorum<name>
	<value>spark01.kfk.com:2181,spark02.kfk.com:2181,spark03.kfk.com:2181<value>
<property>

首先你要确定不用ha的时候你的hadoop集群是正常的,不然找错误的方向就偏离了

配置HA 需要zookeeper,先要看看是不是zookeeper没有配置好的问题

如果都正常,在hadoop安装目录执行sbin/hadoop-daemon.sh start zkfc,这句是启动zookeeper选举制度,然后执行 hdfs haadmin -transitionToActive nn1 ,其中nn1是你的namenode中的一个(如果是新配置的HAhadoop集群,可能是zkfc(DFSZKFailoverController)没有格式化导致namenode节点的自动切换机制没有开启)

在HA或者HDFS中,上面的两个参数还需要以NameServiceID为后缀,比如dfs.ha.automatic-failover.enabled.mycluster。除了上面的两个参数外,还有其它几个参数用于自动故障转移,比如ha.zookeeper.session-timeout.ms,但对于大多数安装来说都不是必须的。

在添加了上述的配置参数后,下一步就是在ZooKeeper中初始化要求的状态,可以在任一NameNode中运行hdfs zkfc -formatZK命令实现该目的,该命令在ZooKeeper中创建znode

执行该命令需要进入Hadoop的安装目录下面的bin目录中找到hdfs这个命令,输入上面的命令执行,然后就可以修复这个问题了。

注意:之前,先得启动好每台机器的zookeeper进程。

后记

对于hdfs的一些命令,不熟悉的情况下,可以先用以下的命令查看。

hdfs -help  查看命令
hdfs haadmin -help 

这里记录一下常用的命令

hdfs haadmin -getAllServiceState   查询所有NN的服务状态
hdfs haadmin -transitionToActive nn1 开启nn1为active状态
hdfs haadmin -transitionToActive nn2 开启nn2为active状态
hdfs haadmin -transitionToStandby nn1 开启nn1为standby状态
hdfs haadmin -failover nn1 nn2   手动执行故障转移
hadoop-daemon.sh start namenode 启动 namemode进程
kill -9 namenode进程号    使namenode进程挂掉
yarn rmadmin -getServiceState rm1  查看resourcemanager节点状态
hdfs --daemon start/stop namenode/datanode/secondarynamenode   分别启动/停止HDFS组件
yarn --daemon start/stop resourcemanager/nodemanager    启动/停止YARN

注意,其实hdfs自带的命令里,都提供了,若两者都是standby状态怎么执行。若两者都是active状态怎么执行。这里,不多赘述。

补充

failover

切换NameNode的主备状态,一般推荐用此方式来切换主备

执行hdfs haadmin -failover <serviceId of current active> <serviceId of new active>命令,切换NameNode的主备状态。

例如:
nn1当前是Active NameNode,想让nn2成为新的Active NameNode,可执行以下命令。

haadmin -getAllServiceState 
hdfs haadmin -failover nn2 nn1  将 nn1 变为 主

如果nn2当前已是Active NameNode,执行以下命令后,nn2仍为新的Active NameNode。

haadmin -getAllServiceState 
hdfs haadmin -failover nn1 nn2  将 nn2 变为 主

transitionToActive

将给定的NameNode切换成主,不会做fencing(和failover有区别的点)

当开启了故障自动切换failover(dfs.ha.automatic-failover.enabled=true)之后,无法手动进行。想要 transitionToActive 切换主,就需要 带上 强制手动的标志 --forcemanual

hdfs haadmin -transitionToActive nn1

此时 nn1: standby nn2: active

hdfs haadmin -getAllServiceState
hdfs haadmin -transitionToActive --forcemanual nn1

此时提示的是 nn2 已经是 active,切换不起作用

当active节点正常时,使用hdfs haadmin -transitionToActive命令对两个namenode节点切换都不起作用.

此时试试将 active 状态切换成 standby

hdfs haadmin -getAllServiceState
hdfs haadmin -transitionToStandby --forcemanual nn2
hdfs haadmin -getAllServiceState

此时提示的是 nn2 已经是 standby,切换生效

当active节点正常时,执行hdfs haadmin -transitionToStandby命令可以将active的namenode节点转换成standby状态。

常用端口号及配置文件

常用端口号

hadoop3.x

  • HDFS NameNode 内部通常端口:8020/9000/9820

  • HDFS NameNode 用户查询端口:9870

  • Yarn查看任务运行情况:8088

  • 历史服务器:19888

hadoop2.x

  • HDFS NameNode 内部通常端口:8020/9000

  • HDFS NameNode 用户查询端口:50070

  • Yarn查看任务运行情况:8088

  • 历史服务器:19888

常用配置文件

  • 3.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml workers

  • 2.x core-site.xml hdfs-site.xml yarn-site.xml mapred-site.xml slaves

转载自 :https://blog.csdn.net/u014727709/article/details/131194566
欢迎start,欢迎评论,欢迎指正

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hadoop HA集群两个NameNode都是standby或者主NameNode是standby,从NameNode是active的情况集锦 的相关文章

随机推荐

  • vc文件操作,内存映射

    vc文件操作 内存映射 各种关于文件的操作在程序设计中是十分常见 如果能对其各种操作都了如指掌 就可以根据实际情况找到最佳的解决方案 从而在较短的时间内编写出高效的代码 因而熟练的掌握文件操作是十分重要的 本文将对Visual C 中有关文
  • 浅谈Vue项目优化心得

    1 打包优化 提取组件的 CSS 到单独到文件 屏蔽 sourceMap 开启 gzip 压缩 公共库使用cdn外链 打包vender时不打包vue vuex vue router axios等 换用国内的 bootcdn unpkg 直接
  • 计算方法(三)矩阵分解1-正交分解(QR分解)

    为什么80 的码农都做不了架构师 gt gt gt 正交分解 矩阵的正交分解又称为QR分解 是将矩阵分解为一个正交矩阵Q和一个上三角矩阵的乘积的形式 任意实数方阵A 都能被分解为 这里的Q为正交单位阵 即 R是一个上三角矩阵 这种分解被称为
  • 手写Mybatis:第20章-Mybatis 框架源码10种设计模式分析

    文章目录 一 类型 创建型模式 1 1 工厂模式 1 2 单例模式 1 3 建造者模式 二 类型 结构型模式 2 1 适配器模式 2 2 代理模式 2 3 组合模式 2 4 装饰器模式 三 类型 行为型模式 3 1 模板模式 3 2 策略模
  • Unity接入TopOn聚合广告平台SDK【聚合了穿山甲,优量汇(腾讯广告),快手,Mintegral,sigmob等各大广告平台SDK】

    TopOn聚合穿山甲 优量汇 快手 Mintegral各大广告SDK教程 接了好几家SDK 都有亿点点蛋疼 直到遇到了TopOn TopOn的文档和SDK相当齐全 包括Android IOS Unity Cocos2dx CocosCrea
  • 数据库动态加载省市区信息,实现三级联动

    本文转载自 http my oschina net zhengweishan blog 402483 摘要 动态的从数据库加载全国省市区 后台使用的是SpringMvc 前台使用的是bootstrap页面展示 demo源码下载地址 http
  • Qt安装包+安装配置说明 (强烈推荐,小白专用)

    链接 https pan baidu com s 1zrhLUP sjWgCQdrFacDQCQ 提取码 uie5内附赠详细安装说明 可以 信我获取
  • es7合并数组相关 报错Uncaught (in promise) TypeError: Invalid attempt to spread non-iterable instance...

    方法一 let o1 a 1 b 2 c 3 let o2 o1 d 4 o2 a 1 b 2 c 3 d 4 let arr1 0 1 2 let arr2 arr1 3 arr2 0 1 2 3 方法二 let o1 a 1 b 2 c
  • 科普:java与C++的区别

    Java与C 是两种广泛使用的编程语言 它们在某些方面存在不同之处 本文将详细介绍Java与C 的区别 一 C 与Java的历史 C 语言是由Bjarne Stroustrup在20世纪80年代初期开发的一种面向对象编程语言 它是C语言的扩
  • 服务器CPU占用率高,如何排查?

    1 定位进程 登录服务器 执行top命令 查看CPU占用情况 top 2 定位线程 如果进程23456占用率高 top Hp23456 进行定位线程 3 定位代码 通过top命令 我们目前已经定位到导致CPU使用率较高的具体线程 比如线程4
  • 电脑如何进入bios模式_电脑BIOS是什么?到底有什么用?如何进入电脑BIOS

    BIOS是英文 Basic Input Output System 的缩略语 直译过来后中文名称就是 基本输入输出系统 其实 它是一组固化到计算机内主板上一个ROM芯片上的程序 它保存着计算机最重要的基本输入输出的程序 系统设置信息 开机后
  • Python3 + Pymysql + mysql 连接方法

    准备材料 1 host地址 127 0 0 1 2 端口号 3306 3 用户名 root 4 密码 5 数据库名 information persons 6 python3 的pymysql库 正式开始 查询 1 首先导入pymysql包
  • C99和C89

    这是c0conut同学的一份作业 也可以理解为总结 为了保留这份作业 写了博客 我尽量使自己写得简单好懂有趣 C99与C89的亲子关系 就如DOM结构一般 C99与C89之间也充满温情 老父亲C89顾名思义出生于89年 也被称为ANSI C
  • validator 重写方法报错

    javax validation ConstraintDeclarationException HV000151 A method overriding another method must not redefine the parame
  • windows常用命令大全

    作者介绍 作者 小刘在C站 每天分享课堂笔记 一起努力 共赴美好人生 夕阳下 是最美的 绽放 目录 运行框命令 cmd中 Windows运行中 快捷键 运行框命令 shutdown s t 后家秒数 计划关机任务 migwiz Window
  • x-oss-process_OSS中的同理心-重要

    x oss process 我不花很多时间在开放源码项目的整个工作日 和许多晚上 上 我对OSS的使用形成了一种或两种意见 特别是在为项目做贡献时 作为一个使用Github之类的工具的社区 我们已经走了很长一段路 这使得在野外发布OSS项目
  • 什么是区块链?

    什么是区块链 今天给大家讲解我们区块链的第一课 我们要学习区块链 首先我们必须得了解什么是区块链 只有理解了区块链的概念 我们才能入门区块链 接下来 我会从浅入深的带着大家去理解区块链的含义 首先 我们从字面上来理解 区块链 包含着两层含义
  • kvm虚拟化技术

    前言 kvm是一种虚拟化技术 使用 概念 kvm是linux内核的模块 它需要CPU支持 采用硬件辅助虚拟化技术Intel VT AMD V 内存的相关技术如Intel的EPT和AMD的RVI 是底层虚拟化内核模块 检查cpu是否支持虚拟化
  • 大学c语言程序设计题库选择题,黑龙江大学C语言程序设计试题库程序单选.doc

    单选题 46 若输入ab 程序运行结果为 main static char a 2 scanf s a printf c c a 1 a 2 C A a b B a C b D 程序出错 47 若有说明 int a 3 4 0 则下面正确的
  • Hadoop HA集群两个NameNode都是standby或者主NameNode是standby,从NameNode是active的情况集锦

    文章目录 背景 架构 HDFS HA配置 错误原因 解决方案 方案一 方案二 方案三 首先查看自己各参数文件是否配置出错 后记 补充 failover transitionToActive 常用端口号及配置文件 常用端口号 hadoop3