当前位置: 代码网 > 科技>人工智能>数据分析 > Hadoop HA集群两个NameNode都是standby或者主NameNode是standby,从NameNode是active的情况集锦

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

2024年08月04日 数据分析 我要评论
这里说一下配置Hadoop HA集群可能出现的两种情况,第一种就是两个NameNode都是standby,第二种就是主Master是standby,从Master是active。


这里说一下配置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

转载自 :
欢迎start,欢迎评论,欢迎指正

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com