三台PC服务器部署Hadoop HA(Hadoop 高可用性架构)

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 写在前边的话:        转载请注明出处:@http://blog.csdn.net/gamer_gyt,Thinkagmer 撰写        之前是在自己电脑上部署的hadoop集群,但并未涉及到HA配置,这次将集群迁移到PC服务器,但是问题来了,只有三台,但是我还想配置HA,PC服务器是CentOS6.5,原来想着在上边部署VM,从而部署HA集群,但经测试,未果,遂弃之,就想到了在三台机器上部署HA集群。

写在前边的话:

        转载请注明出处:@http://blog.csdn.net/gamer_gyt,Thinkagmer 撰写

        之前是在自己电脑上部署的hadoop集群,但并未涉及到HA配置,这次将集群迁移到PC服务器,但是问题来了,只有三台,但是我还想配置HA,PC服务器是CentOS6.5,原来想着在上边部署VM,从而部署HA集群,但经测试,未果,遂弃之,就想到了在三台机器上部署HA集群。

         hadoop伪分布部署参考:点击打开链接
         hadoop单机版部署参考:点击打开链接
         zookeeper,hive,hbase的分布式部署参考:点击链接
         Spark,Sqoop,Mahout的分布式部署参考:点击链接

         步骤和部署hadoop集群(点击阅读)是一样的,只是这里加入了HA的一些配置,记录如下

         关于HA架构的知识请移步该篇博客:Hadoop 容错之1.X的单点故障 到 2.X的HA和HDFS Federation


一:架构说明

     IP                            hostname               role

    192.168.132.27       master1                  主节点

    192.168.132.28       master2                  备份主节点

    192.168.132.29       slaver1                    从节点


    zookeeper的三个节点集群,部署在这三台机子上


二:部署Zookeeper

       Hadoop HA的部署依赖于ZK来切换主节点,所以在部署Hadoop HA之前需要先把Zookeeper集群搞定,部署参考:点击阅读


三:部署HA

       1:文件配置

       除了配置文件mapred-site.xml,core-site.xml,hdfs-site.xml,yarn-site.xml之外和hadoo集群部署一样,这里不做陈述,可参考:点击阅读

       mapred-site.xml:

<configuration>
  <property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
  </property>
</configuration>

       core-site.xml:

<configuration>
  <!-- 指定hdfs的nameservice为ns -->
  <property>    
      <name>fs.defaultFS</name>    
      <value>hdfs://master</value>    
      <!--1.x中为fs.default.name, 一定得是namenode的hostname或者 ip,并且不用加端口号(这里的名称与HA配置hdfs-site.xml中的dfs.nameservices必须保持一致) -->  
  </property>
 
  <property>  
    <name>hadoop.tmp.dir</name>  
    <value>/opt/bigdata/hadoop/tmp</value>  
    <!-- 指定hadoop临时目录 -->
  </property>   

  <!-- 配置HA时才用配置该项 -->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>master1:2181,master2:2181,slaver1:2181</value>
    <!--各个ZK节点的IP/host,及客户端连接ZK的端口,该端口需与zoo.cfg中的 clientPort一致! -->
  </property>
</configuration>

       hdfs-site.xml:

<configuration>
<property>  
    <name>dfs.replication</name>  
    <value>2</value>  
  </property>  
  <property>  
    <name>dfs.namenode.name.dir</name>  
    <value>file:///opt/bigdata/hadoop/dfs/name</value>  
  </property>  
  <property>  
    <name>dfs.datanode.data.dir</name>  
    <value>file:///opt/bigdata/hadoop/dfs/data</value>  
  </property>  
  <property>
    <name>dfs.webhdfs.enabled</name>
    <value>true</value>
    <!-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --> 
  </property>

  <!-- HA配置需要加如下配置-->
  <property>
    <name>dfs.nameservices</name>
    <value>master</value>
    <!--给hdfs集群起名字,这个名字必须和core-site中的统一,且下面也会用到该名字,需要和core-site.xml中的保持一致 -->
  </property>

  <property>
    <name>dfs.ha.namenodes.master</name>
    <value>nn1,nn2</value>
    <!-- master1下面有两个NameNode,分别是nn1,nn2,指定NameService是cluster1时的namenode有哪些,这里的值也是逻辑名称,名字随便起,相互不重复即可 -->
  </property>

  <property>
    <name>dfs.namenode.rpc-address.master.nn1</name>
    <value>master1:9000</value>
    <!-- nn1的RPC通信地址 -->
  </property>

  <property>
    <name>dfs.namenode.rpc-address.master.nn2</name>
    <value>master2:9000</value>
    <!-- nn2的RPC通信地址 -->
  </property>

  <property>
    <name>dfs.namenode.http-address.master.nn1</name>
    <value>master1:50070</value>
    <!-- nn1的http通信地址 -->
  </property>
  <property>
    <name>dfs.namenode.http-address.master.nn2</name>
    <value>master2:50070</value>
    <!-- nn2的http通信地址 -->
  </property>

  <property>
    <name>dfs.namenode.servicerpc-address.master.nn1</name>
    <value>master1:53310</value>
  </property>

  <property>
    <name>dfs.namenode.servicerpc-address.master.nn2</name>
    <value>master2:53310</value>
  </property>

  <property>
    <name>dfs.namenode.shared.edits.dir</name>
    <value>qjournal://master1:8485;master2:8485;slaver1:8485/master</value>
    <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
  </property> 

  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>/opt/bigdata/hadoop/dfs/jndata</value>
    <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
  </property>

  <property>
    <name>dfs.ha.automatic-failover.enabled</name>  
    <value>true</value>
    <!-- 开启NameNode失败自动切换 -->
  </property>

  <property>
    <name>dfs.client.failover.proxy.provider.master</name>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    <!-- 配置失败自动切换实现方式 -->
  </property>

  <property>
    <name>dfs.ha.fencing.methods</name>
    <value>
      sshfence
      shell(/bin/true)
    </value>
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
  </property>

  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/root/.ssh/id_rsa</value>
    <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
  </property>

  <property>
    <name>dfs.ha.fencing.ssh.connect-timeout</name>
    <value>3000</value>
    <!-- 配置sshfence隔离机制超时时间 -->
  </property>

</configuration>

       yarn-site.xml:

<configuration>

<!-- Site specific YARN configuration properties -->

  <property>
    <name>yarn.resourcemanager.ha.enabled</name>
    <value>true</value>
    <!-- 开启RM高可用 -->
  </property>
  
  <property>
    <!--启动自动故障转移,默认为false-->
    <name>yarn.resourcemanager.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>

  <property>
    <!--启用一个内嵌的故障转移,与ZKRMStateStore一起使用。-->
    <name>yarn.resourcemanager.ha.automatic-failover.embedded</name>
    <value>true</value>
  </property>
 
  <property>
    <name>yarn.resourcemanager.cluster-id</name>
    <value>yrc</value>
    <!-- 指定RM的cluster id -->
  </property>

  <property>
    <name>yarn.resourcemanager.ha.rm-ids</name>
    <value>rm1,rm2</value>
    <!-- 指定RM的名字 -->
  </property>
 
  <property>
    <name>yarn.resourcemanager.hostname.rm1</name>
    <value>master1</value>
    <!-- 分别指定RM的地址 -->
  </property>
  
  <property>
    <name>yarn.resourcemanager.hostname.rm2</name>
    <value>master2</value>
    <!-- 分别指定RM的地址 -->
  </property>

  <property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm1</value>     
    <!--如果是在主NN上 这里写rm1   如果这个配置文件是在备NN上 这里写rm2,否则RM的高可用会出问题-->
    <description>If we want to launch more than one RM in single node, we need this configuration</description>
  </property> 

  <property>  
    <name>yarn.resourcemanager.recovery.enabled</name>  
    <value>true</value>  
  </property>  

  <property>  
    <name>yarn.resourcemanager.store.class</name>  
    <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>  
  </property>    

  <property>
    <name>yarn.resourcemanager.zk-address</name>
    <value>master1:2181,master2:2181,slaver1:2181</value>
    <!-- 指定zk集群地址 -->
  </property>

  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>

</configuration>

       2:启动服务,测试NameNode的自动切换

       PS:一定要注意启动的顺序,否则会出现各种各样的错误,亲测

       每台机器上启动Zookeeper:bin/zkServer.sh start 

       zookeeper集群格式化(任意一个主节点上执行即可):bin/hdfs zkfc -formatZK 

       每台机器上启动 journalnode:sbin/hadoop-daemon.sh start journalnode (如果这里不启动的话,在进行hdfs格式化的时候就会报错,同时这个进程只需在格式化的时候启动,后续启动服务则不需要)

       hdfs集群格式化(master1上进行):bin/hadoop namenode -format

       看到 “0” 表示成功了

       

       master1机器上启动服务:sbin/start-dfs.sh      sbin/start-yarn.sh

       执行jps查看进行如下(master1,master2,slaver1):

            

       master1(192.168.132.27)的web界面显示如下:

       

         备用NN同步主NN的元数据信息(master2上执行): bin/hdfs namenode -bootstrapStandby

         启动备用NN(master2上执行): sbin/hadoop-daemon.sh start namenode

         执行jps(master2上执行):

         

         Web访问:



         测试主NN和备用NN的切换:kill掉主NN进程  kill namenode_id

         再次刷新master2对应的web,实现自动切换:

    


         3:测试Resourcemanager自动切换

              访问主NN的8088端口如下:

    

            备用NN的8088端口:

      

       kill 掉主NN的resourcemanager服务再次访问从NN的8088端口

       

        OK!大功告成

四:遇见的问题

       1:NameNode格式化失败

            错误:failed on connection exception: java.net.ConnectException: Connection refused

            解决办法:先启动Zookeeper集群,在用sbin/hadoop-daemon.sh start journalnode 启动各个NameNode上的JournalNode进程,然后再进行格式化

            该错误参考博客:http://blog.csdn.net/u014729236/article/details/44944773

     2:Web显示live nodes 为 0

       

        解决办法:注释掉机子上 hosts文件中的原本的两行

        

     3:master2的NameNode和 ResourceManager不能启动

          查看日志发现错误
2016-08-30 06:10:57,558 INFO org.apache.hadoop.http.HttpServer2: HttpServer.start() threw a non Bind IOException
java.net.BindException: Port in use: master1:8088
        at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:919)
        at org.apache.hadoop.http.HttpServer2.start(HttpServer2.java:856)
        at org.apache.hadoop.yarn.webapp.WebApps$Builder.start(WebApps.java:274)
        at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.startWepApp(ResourceManager.java:974)
        at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.serviceStart(ResourceManager.java:1074)
        at org.apache.hadoop.service.AbstractService.start(AbstractService.java:193)
        at org.apache.hadoop.yarn.server.resourcemanager.ResourceManager.main(ResourceManager.java:1208)
Caused by: java.net.BindException: Cannot assign requested address
        at sun.nio.ch.Net.bind0(Native Method)
        at sun.nio.ch.Net.bind(Net.java:444)
        at sun.nio.ch.Net.bind(Net.java:436)
        at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:214)
        at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:74)
        at org.mortbay.jetty.nio.SelectChannelConnector.open(SelectChannelConnector.java:216)
        at org.apache.hadoop.http.HttpServer2.openListeners(HttpServer2.java:914)
        ... 6 more
          端口被占用了,这时候要修改yarn-site.xml 中
 <property>
    <name>yarn.resourcemanager.ha.id</name>
    <value>rm2</value>
    <description>If we want to launch more than one RM in single node, we need this configuration</description>
  </property>
         此时再次启动OK

      4:NameNode不能自动切换

           hdfs-site.xml通过dfs.ha.fencing.methods控制自动切换的方法, sshfence是系统默认的并不能自动切换,这里可以换成
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>shell(/bin/true)</value>
    <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
  </property>
 

五:总结

       在配置的过程中遇到了很多问题,参考了很多资料,但很多事情就是看着别人很顺利的完成,可是到了你这里就会出现各种错误,殊不知别人也是经历过各种调试才出的结果,所以不要灰心,在配置的过程中多看看日志,所有的错误都会在日志中显示,相信你会成功的。
相关文章
|
2月前
|
负载均衡 应用服务中间件 持续交付
微服务架构下的Web服务器部署
【8月更文第28天】随着互联网应用的不断发展,传统的单体应用架构逐渐显露出其局限性,特别是在可扩展性和维护性方面。为了解决这些问题,微服务架构应运而生。微服务架构通过将应用程序分解成一系列小型、独立的服务来提高系统的灵活性和可维护性。本文将探讨如何在微服务架构中有效部署和管理Web服务器实例,并提供一些实际的代码示例。
69 0
|
26天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
7天前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
22 1
|
7天前
|
人工智能 网络协议 Shell
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
22 0
内网穿透实现公网访问自己搭建的Ollma架构的AI服务器
|
23天前
|
运维 Cloud Native Devops
云原生架构的崛起与实践云原生架构是一种通过容器化、微服务和DevOps等技术手段,帮助应用系统实现敏捷部署、弹性扩展和高效运维的技术理念。本文将探讨云原生的概念、核心技术以及其在企业中的应用实践,揭示云原生如何成为现代软件开发和运营的主流方式。##
云原生架构是现代IT领域的一场革命,它依托于容器化、微服务和DevOps等核心技术,旨在解决传统架构在应对复杂业务需求时的不足。通过采用云原生方法,企业可以实现敏捷部署、弹性扩展和高效运维,从而大幅提升开发效率和系统可靠性。本文详细阐述了云原生的核心概念、主要技术和实际应用案例,并探讨了企业在实施云原生过程中的挑战与解决方案。无论是正在转型的传统企业,还是寻求创新的互联网企业,云原生都提供了一条实现高效能、高灵活性和高可靠性的技术路径。 ##
29 3
|
2月前
|
机器学习/深度学习 算法 数据库
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
在我们选择阿里云服务器的架构时,选择合适的云服务器架构对于提升业务效率、保障业务稳定至关重要。阿里云提供了多样化的云服务器架构选择,包括X86计算、ARM计算、GPU/FPGA/ASIC、弹性裸金属服务器以及高性能计算等。本文将深入解析这些架构的特点、优势及适用场景,以供参考和选择。
阿里云服务器架构区别解析:从X86计算、Arm计算到高性能计算架构的区别参考
|
1月前
|
缓存 Java 应用服务中间件
随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架
【9月更文挑战第6天】随着微服务架构的兴起,Spring Boot凭借其快速开发和易部署的特点,成为构建RESTful API的首选框架。Nginx作为高性能的HTTP反向代理服务器,常用于前端负载均衡,提升应用的可用性和响应速度。本文详细介绍如何通过合理配置实现Spring Boot与Nginx的高效协同工作,包括负载均衡策略、静态资源缓存、数据压缩传输及Spring Boot内部优化(如线程池配置、缓存策略等)。通过这些方法,开发者可以显著提升系统的整体性能,打造高性能、高可用的Web应用。
58 2
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop入门基础(二):Hadoop集群安装与部署详解(超详细教程)(二)
Hadoop入门基础(二):Hadoop集群安装与部署详解(超详细教程)(二)
|
2月前
|
分布式计算 Ubuntu Hadoop
Hadoop入门基础(二):Hadoop集群安装与部署详解(超详细教程)(一)
Hadoop入门基础(二):Hadoop集群安装与部署详解(超详细教程)(一)
|
2月前
|
负载均衡 网络协议 Linux
在Linux中,常用WEB服务器负载架构有哪些?
在Linux中,常用WEB服务器负载架构有哪些?
下一篇
无影云桌面