Hadoop HA使用中遇到的坑

来源:互联网 发布:js判断所有radio选中 编辑:程序博客网 时间:2024/05/18 03:44

之前笔者一直用的一个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进程

以后集群启动:

  1. all slave —-> zkServer.sh start
  2. one master —->start-dfs.sh
  3. one master —–>start-yarn.sh
  4. 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>

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

原创粉丝点击