Hadoop HA使用中遇到的坑

xiaoxiao2021-02-28  122

之前笔者一直用的一个master一个slave的集群,后来给笔记本加了个内存条后,加上开始学习zookeeper,开始频繁使用两个master,3个slave的高可用集群了。之前以为没有什么区别,但是使用中还是遇到了不少的小坑。

1. 先说集群启动顺序

**

配置好第一次启动:

** 1.每个slave启动zookeeper服务,执行zkServer.sh start,jps可以看到多了QuorumPeerMain进程 2.每个slave启动journalnode,执行hadoop-daemon.sh start journalnode,jps可以看到多了 JournalNode进程 3.格式化HDFS,在一个master上执行hdfs namenode -format,如果看到succesfully formated就表示成功了(注意不要重复格式化),然后将生成的tmp目录拷贝到backup master对应的目录下。`

<property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/hadoop-2.7.3/tmp</value> </property>

` 4.格式化ZKFC,在node1上执行hdfs zkfc -formatZK。(如果集群没有配置高可用的话,不需要错误恢复,所以也就不要格式化了) 5.启动HDFS,在master上执行,start-dfs.sh,jps可以看到多了namenode(on all master)/datanode(on all slave)进程,DFSZKFailoverController进程 6.启动YARN,在master上执行,start-yarn.sh,jps可以看到多了resourcemanager(on master)/nodemanager(on slave) 7.backup master的resourcemanager需要手动单独启动:执行yarn-daemon.sh start resourcemanager,此机器上jps可以看到多了resourcemanager进程

以后集群启动:

all slave —-> zkServer.sh startone master —->start-dfs.shone master —–>start-yarn.sh

backup master —->yarn-daemon.sh start resourcemanager 正常集群启动后, namenode上的jps后的进程有: 2648 ResourceManager 2553 DFSZKFailoverController 3036 NameNode 3325 Jps

datanode上的jps后进程有: 2353 NodeManager 2200 DataNode 2264 JournalNode 2137 QuorumPeerMain 2526 Jps

2.集群中遇到的问题 1.两个namenode都为standby状态 用命令行强制转换一个为active状态(最后master为想要转换成active的namenode名称) hdfs haadmin -transitionToActive –forcemanual master

2.刚启动的时候 jps 看到了NameNode,但是隔了一两分钟,再看NameNode就不见了。 查看日志发现以下报错信息: org.apache.Hadoop.ipc.Client:Retrying connect to server 通过分析日志,感觉上应该不是配置有问题,只是namenode和JournalNode上的通信出了问题,这个时候我手动重新启动namenode. ./hadoop-daemon.sh start namenode 发现就启动成功了,并且很稳定。通过各种查,看网上大致说法为:

NameNode作为JournalNode的客户端发起连接请求,但是失败了,然后NameNode又向其他节点依次发起了请求都失败了,直至到了最大重试次数。 说明JournalNode并没有准备好,而NameNode已经用完了所有重试次数。

解决办法,根据各自的网络情况,修改重试的次数和时间。

修改core-site.xml中的ipc参数

<property> <name>ipc.client.connect.max.retries</name> <value>20</value> <description> Indicates the number of retries a clientwill make to establisha server connection. </description> </property> <property> <name>ipc.client.connect.retry.interval</name> <value>5000</value> <description> Indicates the number of milliseconds aclient will wait for before retrying to establish a server connection. </description> </property>

之前自己遇到了,花费了很多时间才解决,现在记录在这里,希望对以后的自己或者是新人小白能有所帮助。

转载请注明原文地址: https://www.6miu.com/read-39839.html

最新回复(0)