`
qindongliang1922
  • 浏览: 2189579 次
  • 性别: Icon_minigender_1
  • 来自: 北京
博客专栏
7265517b-f87e-3137-b62c-5c6e30e26109
证道Lucene4
浏览量:117689
097be4a0-491e-39c0-89ff-3456fadf8262
证道Hadoop
浏览量:126090
41c37529-f6d8-32e4-8563-3b42b2712a50
证道shell编程
浏览量:60046
43832365-bc15-3f5d-b3cd-c9161722a70c
ELK修真
浏览量:71421
社区版块
存档分类
最新评论

Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析

阅读更多

关于NameNode高可靠需要配置的文件有core-site.xml和hdfs-site.xml
关于ResourceManager高可靠需要配置的文件有yarn-site.xml

逻辑结构:




NameNode-HA工作原理:
在一个典型的HA集群中,最好有2台独立的机器的来配置NameNode角色,无论在任何时候,集群中只能有一个NameNode作为Active状态,而另一个是Standby状态,Active状态的NameNode负责集群中所有的客户端操作,这么设置的目的,其实HDFS底层的机制是有关系的,同一时刻一个文件,只允许一个写入方占用,如果出现多个,那么文件偏移量便会混乱,从而导致数据格式不可用,当然状态为Standby的NameNode这时候仅仅扮演一个Slave的角色,以便于在任何时候Active的NameNode挂掉时,能够第一时间,接替它的任务,成为主NameNode,达到一个热备份的效果,在HA架构里面SecondaryNameNode这个冷备角色已经不存在了,为了保持从NameNode时时的与主NameNode的元数据保持一致,他们之间交互通过一系列守护的轻量级进程JournalNode,当任何修改操作在主NameNode上执行时,它同时也会记录修改log到至少半数以上的JornalNode中,这时状态为Standby的NameNode监测到JournalNode里面的同步log发生变化了会读取JornalNode里面的修改log,然后同步到自己的的目录镜像树里面,当发生故障时,Active的NameNode挂掉后,Standby的NameNode会在它成为Active NameNode前,读取所有的JournalNode里面的修改日志,这样就能高可靠的保证与挂掉的NameNode的目录镜像树一致,然后无缝的接替它的职责,维护来自客户端请求,从而达到一个高可用的目的。

为了达到快速容错的掌握全局的目的,Standby角色也会接受来自DataNode角色汇报的块信息,前面只是介绍了NameNode容错的工作原理,下面介绍下,当引入Zookeeper之后,为啥可以NameNode-HA可以达到无人值守,自动切换的容错。

在主备切换上Zookeeper可以干的事:
(1)失败探测   在每个NameNode启动时,会在Zookeeper上注册一个持久化的节点,当这个NameNode宕机时,它的会话就会终止,Zookeeper发现之后,就会通知备用的NameNode,Hi,老兄,你该上岗了。
(2)选举机制, Zookeeper提供了一个简单的独占锁,获取Master的功能,如果那个NameNode发现自己得到这个锁,那就预示着,这个NameNode将被激活为Active状态

当然,实际工作中Hadoop提供了ZKFailoverController角色,在每个NameNode的节点上,简称zkfc,它的主要职责如下:

(1)健康监测,zkfc会周期性的向它监控的NameNode发送健康探测命令,从而来确定某个NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态
(2)会话管理, 如果NameNode是健康的,zkfc就会在zookeeper中保持一个打开的会话,如果NameNode同时还是Active状态的,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NameNode挂掉时,
这个znode将会被删除,然后备用的NameNode,将会得到这把锁,升级为主NameNode,同时标记状态为Active,当宕机的NameNode,重新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NameNode。
(3)master选举,如上所述,通过在zookeeper中维持一个短暂类型的znode,来实现抢占式的锁机制,从而判断那个NameNode为Active状态。





core-site.xml里面

<configuration>
 <property>
        <name>fs.default.name</name>
        <value>hdfs://ns1</value>
    </property>
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/ROOT/server/data-hadoop/hadooptmp</value>
  </property>
  <property>
             <name>io.compression.codecs</name>
             <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.co
mpress.SnappyCodec</value>
</property>
<property>
  <name>fs.trash.interval</name>
  <value>0</value>
  <description>Number of minutes between trash checkpoints.
  If zero, the trash feature is disabled.
  </description>
</property>

<!-- ha的zk的配置 -->
<property>
        <name>ha.zookeeper.quorum</name>
        <value>h1:2181,h2:2181,h3:2181</value>
    </property>
</configuration>



hdfs-site.xml里面

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>




<property>    
   <name>dfs.replication</name>    
   <value>1</value>    
 </property>    
 
<!-- 集群数量小于3时,副本数大于1时,建议启用 -->
  <!--  <property>
   <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
   <value>false</value>
   </property>
   -->





 
 <property>    
   <name>dfs.namenode.name.dir</name>    
   <value>file:///ROOT/server/data-hadoop/nd</value>    
 </property>    
  
  
 <property>    
   <name>dfs.datanode.data.dir</name>    
   <value>/ROOT/server/data-hadoop/dd</value>    
 </property>    
  
<property>    
  <name>dfs.permissions</name>    
  <value>false</value>    
</property>  
  


  <property>
        <name>dfs.nameservices</name>
        <value>ns1</value>
    </property>

  <property>
        <name>dfs.ha.namenodes.ns1</name>
        <value>h1,h2</value>
    </property>



 <property>
        <name>dfs.namenode.rpc-address.ns1.h1</name>
        <value>h1:9000</value>
    </property>


 <property>
        <name>dfs.namenode.http-address.ns1.h1</name>
        <value>h1:50070</value>
    </property>


    <property>
        <name>dfs.namenode.rpc-address.ns1.h2</name>
        <value>h2:9000</value>
    </property>   
  
  
  
 <property>
        <name>dfs.namenode.http-address.ns1.h2</name>
        <value>h2:50070</value>
    </property>


 <property>
            <name>dfs.namenode.shared.edits.dir</name>
            <value>qjournal://h1:8485;h2:8485;h3:8485/ns1</value>
    </property>


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


<property>
       <name>dfs.client.failover.proxy.provider.ns1</name>
       <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
   </property>


<property>
        <name>dfs.journalnode.edits.dir</name>
        <value>/ROOT/server/data-hadoop/journaldata</value>
    </property>

<property>
        <name>dfs.ha.fencing.methods</name>
        <value>sshfence</value>
    </property>


<property>
        <name>dfs.ha.fencing.ssh.private-key-files</name>
        <value>/home/webmaster/.ssh/id_rsa</value>
    </property>




<property>  
    <name>dfs.webhdfs.enabled</name>  
    <value>true</value>  
</property>  
<property>  
        <name>dfs.blocksize</name>  
        <value>134217728</value>  
</property>  

<property>  
        <name>dfs.namenode.handler.count</name>  
        <value>20</value>  
</property>
  
<property>  
        <name>dfs.datanode.max.xcievers</name>  
        <value>2048</value>  
</property>






</configuration>


yarn-site.xml里面:
<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>





        <!--启用RM高可用-->
   <property>
       <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
   </property>



       <!--RM集群标识符-->
   <property>
       <name>yarn.resourcemanager.cluster-id</name>
        <value>ns1</value>
   </property>


 <property>
        <!--指定两台RM主机名标识符-->
       <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>h1,h2</value>
   </property>


        <!--RM故障自动切换-->
   <property>
        <name>yarn.resourcemanager.ha.automatic-failover.recover.enabled</name>
        <value>true</value>
   </property>


  <!--RM故障自动恢复-->

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


        <!--RM主机1-->
   <property>
       <name>yarn.resourcemanager.hostname.h1</name>
        <value>h1</value>
   </property>

     <!--RM主机2-->
   <property>
       <name>yarn.resourcemanager.hostname.h2</name>
        <value>h2</value>
   </property>


<!--RM状态信息存储方式,一种基于内存(MemStore),另一种基于ZK(ZKStore)-->
    <property>
       <name>yarn.resourcemanager.store.class</name>
       <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>


      <!--使用ZK集群保存状态信息-->
    <property>
       <name>yarn.resourcemanager.zk-address</name>
       <value>h1:2181,h2:2181,h3:2181</value>
    </property>


     <!--向RM调度资源地址-->
    <property>
       <name>yarn.resourcemanager.scheduler.address.h1</name>
        <value>h1:8030</value>
    </property>


 <property>
       <name>yarn.resourcemanager.scheduler.address.h2</name>
       <value>h2:8030</value>
    </property>


      <!--NodeManager通过该地址交换信息-->
    <property>
        <name>yarn.resourcemanager.resource-tracker.address.h1</name>
       <value>h1:8031</value>
    </property>

    <property>
       <name>yarn.resourcemanager.resource-tracker.address.h2</name>
       <value>h2:8031</value>
    </property>


      <!--客户端通过该地址向RM提交对应用程序操作-->
    <property>
       <name>yarn.resourcemanager.address.h1</name>
       <value>h1:8032</value>
    </property>
    <property>
       <name>yarn.resourcemanager.address.h2</name>
       <value>h2:8032</value>
   </property>	


        <!--管理员通过该地址向RM发送管理命令-->
    <property>
       <name>yarn.resourcemanager.admin.address.h1</name>
       <value>h1:8033</value>
    </property>

    <property>
       <name>yarn.resourcemanager.admin.address.h2</name>
        <value>h2:8033</value>
    </property>


     <!--RM HTTP访问地址,查看集群信息-->
    <property>
       <name>yarn.resourcemanager.webapp.address.h1</name>
       <value>h1:8088</value>
    </property>

    <property>
       <name>yarn.resourcemanager.webapp.address.h2</name>
       <value>h2:8088</value>
    </property>


  <property>  
    <name>yarn.resourcemanager.scheduler.class</name>  
    <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>  
  </property> 





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

  <property>  
    <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>  
    <value>org.apache.hadoop.mapred.ShuffleHandler</value>  
  </property>  

  <property>    
    <description>Classpath for typical applications.</description>    
    <name>yarn.application.classpath</name>    
    <value>$HADOOP_CONF_DIR  
    ,$HADOOP_COMMON_HOME/share/hadoop/common/*  
    ,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*  
    ,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*  
    ,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*  
    ,$YARN_HOME/share/hadoop/yarn/*</value>    
  </property>   
  
<!-- Configurations for NodeManager -->  
  <property>  
    <name>yarn.nodemanager.resource.memory-mb</name>  
    <value>5632</value>  
  </property>  

 <property>
    <name>yarn.scheduler.minimum-allocation-mb</name>
    <value>1408</value>
  </property>


 <property>
    <name>yarn.scheduler.maximum-allocation-mb</name>
    <value>5632</value>
  </property>





</configuration>

mapred-site.xml里面内容
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>



<property>  
    <name>mapreduce.framework.name</name>  
    <value>yarn</value>  
</property>  
<property>  
    <name>mapreduce.jobtracker.address</name>  
    <value>h1:8021</value>  
</property>  
<property>  
    <name>mapreduce.jobhistory.address</name>  
    <value>h1:10020</value>  
</property>  
<property>  
    <name>mapreduce.jobhistory.webapp.address</name>  
    <value>h1:19888</value>  
</property>  
<property>  
    <name>mapred.max.maps.per.node</name>  
    <value>2</value>  
</property>  
<property>  
    <name>mapred.max.reduces.per.node</name>  
    <value>1</value>  
</property>  
<property>  
    <name>mapreduce.map.memory.mb</name>  
    <value>1408</value>  
</property>  
<property>  
    <name>mapreduce.map.java.opts</name>  
    <value>-Xmx1126M</value>  
</property>  
  
<property>  
    <name>mapreduce.reduce.memory.mb</name>  
    <value>2816</value>  
</property>  
<property>  
    <name>mapreduce.reduce.java.opts</name>  
    <value>-Xmx2252M</value>  
</property>  
<property>  
    <name>mapreduce.task.io.sort.mb</name>  
    <value>512</value>  
</property>  
<property>  
    <name>mapreduce.task.io.sort.factor</name>  
    <value>100</value>  
</property>  







</configuration>




启动方式:假设你是新的集群,如果不是,请参考文末的官网url链接

1,先在集群中启动N/2+1个JornalNode进程,写ssh脚本执行命令:hadoop-daemon.sh start journalnode
2 ,然后在第一台NameNode上应执行hdfs namenode -format格式化集群
3,然后在第二台NameNode上执行hdfs namenode -bootstrapStandby同步第一台NameNode元数据
4,在第一台NameNode上执行命令hdfs zkfc -formatZK格式化zookeeper
5,第一台NameNode上启动zkfc执行命令:hadoop-daemon.sh start zkfc
6,在第二台NameNode上启动zkfc执行命令:hadoop-daemon.sh start zkfc
7,执行start-dfs.sh启动所有的NameNode,DataNode,JournalNode(注意如果已经启动就会跳过)
8,执分别访问两台机器的50070端口,查看NameNode状态,其中一个为Active,一个为Standby即为正常
9,测试容错,找到状态为Active的NameNode的pid进程,并kill掉,查看standby是否会自动晋级为active,如果
一切安装完毕,则会自动切换,如果没切换,注意查看zkfc和namenode的log



感谢并参考的文章:
http://hadoop.apache.org/docs/r2.7.1/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
http://lizhenliang.blog.51cto.com/7876557/1661354
http://www.cnblogs.com/781811964-Fighter/p/4930067.html


最后欢迎大家扫码关注微信公众号:我是攻城师(woshigcs),我们一起学习,进步和交流!(woshigcs)
本公众号的内容是有关搜索和大数据技术和互联网等方面内容的分享,也是一个温馨的技术互动交流的小家园,有什么问题随时都可以留言,欢迎大家来访!



  • 大小: 217.7 KB
  • 大小: 117.6 KB
1
0
分享到:
评论

相关推荐

    hadoop2.7.1.rar

    总结来说,这个"hadoop2.7.1.rar"压缩包提供了在Windows上运行Hadoop所需的基本组件,用户需要按照一定的步骤进行配置和启动,才能在本地进行Hadoop开发和测试。在这个过程中,理解Hadoop的工作原理、熟悉相关配置...

    hadoop-2.7.1-src.rar

    2. HA(High Availability):Hadoop 2.7.1支持NameNode和ResourceManager的高可用性,这意味着可以配置多个NameNode或ResourceManager,以防止单点故障。 3. Erasure Coding:这是一种新的数据冗余策略,可以替代...

    hadoop.zip hadoop2.7.1安装包

    总之,Hadoop2.7.1安装包提供了在Linux和Windows环境下运行Hadoop所需的一切,让开发者和数据分析师能够利用分布式计算能力处理大规模数据。无论是学习Hadoop基础知识,还是在生产环境中部署大数据解决方案,这个...

    基于虚拟机集群hadoop2.7.1配置文件

    首先,我们来看标题——"基于虚拟机集群hadoop2.7.1配置文件"。这意味着我们要在多台虚拟机上建立一个Hadoop集群,使用的是Hadoop 2.7.1版本。这个版本是Hadoop的稳定版本,包含了YARN(Yet Another Resource ...

    Hadoop2.7.1+Hbase1.2.1集群环境搭建(7)hbase 性能优化

    2. 下载Hadoop:从Apache官网下载对应版本的Hadoop,解压并配置`core-site.xml`(配置NameNode和DataNode地址)、`hdfs-site.xml`(设置副本数、DFS块大小等)。 3. 初始化HDFS:启动NameNode格式化HDFS,然后启动...

    hadoop-2.7.1.tar.gz

    之后,可以通过启动Hadoop的守护进程(如namenode、datanode、resourcemanager和nodemanager)来启动Hadoop服务,并利用Hadoop提供的工具进行数据处理。 总结一下,这个压缩包提供了一种方便的方式来在Windows上...

    hadoop2.7.1tar包.zip

    此外,还需要根据你的集群配置修改conf目录下的配置文件,例如设置HDFS的名称节点(namenode)和数据节点(datanode),以及MapReduce的资源管理器(resourcemanager)和工作节点(nodemanager)。 在安装完成后,...

    hadoop-2.7.1.tar.gz.zip

    为了运行Hadoop,你需要启动DataNode(数据节点)、NameNode(名称节点)、ResourceManager(资源管理器)和NodeManager(节点管理器)等服务。一旦集群启动,你就可以通过编写MapReduce程序或使用其他生态工具来...

    Hadoop-2.7.1分布式安装手册

    《Hadoop-2.7.1分布式安装手册》是一份详尽的指南,旨在帮助用户在不同的模式下安装和配置Apache Hadoop 2.7.1。Hadoop是开源的大数据处理框架,它允许在廉价硬件上进行大规模数据处理,具有高容错性和可扩展性。这...

    hadoop2.7.1 hadoop.dll和winutils.exe window7 64bit 下载包

    安装完成后,用户可以尝试启动Hadoop的各个服务,如NameNode、DataNode和YARN的ResourceManager和NodeManager,然后进行数据的读写和处理操作。 在Windows环境中,虽然Hadoop的使用相比Linux可能更为复杂,但通过...

    hadoop2.7.1集群搭建手册.docx

    \n\n**集群启动与验证**\n\n最后,启动所有节点上的Hadoop服务,包括NameNode、DataNode、ResourceManager、NodeManager等。通过Hadoop提供的命令行工具,如hdfs dfs、hadoop fs、hadoop jar等,可以进行数据的读写...

    hadoop2.7.1 Windows安装依赖文件

    总之,这份“hadoop2.7.1 Windows安装依赖文件”集合为在Windows环境下搭建Hadoop提供了必要的组件,通过正确配置和使用这些文件,开发者可以在Windows系统上顺利运行Hadoop,进行大数据处理和分析任务。

    hadoop-2.7.1.tar.gz+jdk-8u281-linux-x64.rpm.zip

    此外,Hadoop 2.7.1还优化了性能和安全性,使得大规模数据分析更加高效和安全。 接下来是Java Development Kit(JDK)。JDK是编写Java程序所必需的工具集,包括Java编译器、Java运行环境、调试工具等。对于Hadoop而...

    hadoop-common-2.7.1-bin-master.zip+hbase-2.0.0-bin.tar.gz Hbase与Hadoop版本对应

    在配置完成后,可以启动Hadoop的NameNode、DataNode和ResourceManager,然后启动HBase的Master和RegionServer。通过HBase的shell或者编程API,你可以创建表、插入数据并进行查询操作。 需要注意的是,Hadoop和HBase...

    HadoopBin-2.7.2安装依赖文件

    配置完成后,通过SSH启动Hadoop的守护进程,包括NameNode、DataNode、ResourceManager和NodeManager。 在启动Hadoop之前,必须格式化NameNode,这是HDFS的元数据管理器。使用`hadoop fs -format`命令完成此操作。...

    Hadoop集群安装配置教程_Hadoop2.62

    配置文件包括`core-site.xml`(存储配置)、`hdfs-site.xml`(HDFS配置)、`yarn-site.xml`(YARN配置)和`mapred-site.xml`(MapReduce配置),需设置相应的集群参数,如NameNode、DataNode、ResourceManager和...

    hadoop win7环境搭建

    ### Hadoop 在 Win7 环境下的安装与配置 Hadoop 是一个开源软件框架,用于分布式...通过上述步骤,您可以在 Windows 7 系统上成功搭建并配置 Hadoop 环境,并实现与 Eclipse 的集成,为后续的大数据分析任务提供支持。

    hadoop-2.7.1:Hadoop源码分析

    《Hadoop 2.7.1源码分析》 Hadoop是大数据处理领域的重要基石,其开源、分布式、可扩展的特性使得它在全球范围内广泛应用于数据存储和计算。Hadoop 2.7.1作为Hadoop发展的一个重要版本,包含了众多优化和改进,对...

Global site tag (gtag.js) - Google Analytics