关于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里面

  1. <configuration>
  2. <property>
  3. <name>fs.default.name</name>
  4. <value>hdfs://ns1</value>
  5. </property>
  6. <property>
  7. <name>hadoop.tmp.dir</name>
  8. <value>/ROOT/server/data-hadoop/hadooptmp</value>
  9. </property>
  10. <property>
  11. <name>io.compression.codecs</name>
  12. <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.BZip2Codec,org.apache.hadoop.io.co
  13. mpress.SnappyCodec</value>
  14. </property>
  15. <property>
  16. <name>fs.trash.interval</name>
  17. <value>0</value>
  18. <description>Number of minutes between trash checkpoints.
  19. If zero, the trash feature is disabled.
  20. </description>
  21. </property>
  22. <!-- ha的zk的配置 -->
  23. <property>
  24. <name>ha.zookeeper.quorum</name>
  25. <value>h1:2181,h2:2181,h3:2181</value>
  26. </property>
  27. </configuration>

hdfs-site.xml里面

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <!--
  4. Licensed under the Apache License, Version 2.0 (the "License");
  5. you may not use this file except in compliance with the License.
  6. You may obtain a copy of the License at
  7. http://www.apache.org/licenses/LICENSE-2.0
  8. Unless required by applicable law or agreed to in writing, software
  9. distributed under the License is distributed on an "AS IS" BASIS,
  10. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. See the License for the specific language governing permissions and
  12. limitations under the License. See accompanying LICENSE file.
  13. -->
  14. <!-- Put site-specific property overrides in this file. -->
  15. <configuration>
  16. <property>
  17. <name>dfs.replication</name>
  18. <value>1</value>
  19. </property>
  20. <!-- 集群数量小于3时,副本数大于1时,建议启用 -->
  21. <!--  <property>
  22. <name>dfs.client.block.write.replace-datanode-on-failure.enable</name>
  23. <value>false</value>
  24. </property>
  25. -->
  26. <property>
  27. <name>dfs.namenode.name.dir</name>
  28. <value>file:///ROOT/server/data-hadoop/nd</value>
  29. </property>
  30. <property>
  31. <name>dfs.datanode.data.dir</name>
  32. <value>/ROOT/server/data-hadoop/dd</value>
  33. </property>
  34. <property>
  35. <name>dfs.permissions</name>
  36. <value>false</value>
  37. </property>
  38. <property>
  39. <name>dfs.nameservices</name>
  40. <value>ns1</value>
  41. </property>
  42. <property>
  43. <name>dfs.ha.namenodes.ns1</name>
  44. <value>h1,h2</value>
  45. </property>
  46. <property>
  47. <name>dfs.namenode.rpc-address.ns1.h1</name>
  48. <value>h1:9000</value>
  49. </property>
  50. <property>
  51. <name>dfs.namenode.http-address.ns1.h1</name>
  52. <value>h1:50070</value>
  53. </property>
  54. <property>
  55. <name>dfs.namenode.rpc-address.ns1.h2</name>
  56. <value>h2:9000</value>
  57. </property>
  58. <property>
  59. <name>dfs.namenode.http-address.ns1.h2</name>
  60. <value>h2:50070</value>
  61. </property>
  62. <property>
  63. <name>dfs.namenode.shared.edits.dir</name>
  64. <value>qjournal://h1:8485;h2:8485;h3:8485/ns1</value>
  65. </property>
  66. <property>
  67. <name>dfs.ha.automatic-failover.enabled.ns1</name>
  68. <value>true</value>
  69. </property>
  70. <property>
  71. <name>dfs.client.failover.proxy.provider.ns1</name>
  72. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  73. </property>
  74. <property>
  75. <name>dfs.journalnode.edits.dir</name>
  76. <value>/ROOT/server/data-hadoop/journaldata</value>
  77. </property>
  78. <property>
  79. <name>dfs.ha.fencing.methods</name>
  80. <value>sshfence</value>
  81. </property>
  82. <property>
  83. <name>dfs.ha.fencing.ssh.private-key-files</name>
  84. <value>/home/webmaster/.ssh/id_rsa</value>
  85. </property>
  86. <property>
  87. <name>dfs.webhdfs.enabled</name>
  88. <value>true</value>
  89. </property>
  90. <property>
  91. <name>dfs.blocksize</name>
  92. <value>134217728</value>
  93. </property>
  94. <property>
  95. <name>dfs.namenode.handler.count</name>
  96. <value>20</value>
  97. </property>
  98. <property>
  99. <name>dfs.datanode.max.xcievers</name>
  100. <value>2048</value>
  101. </property>
  102. </configuration>

yarn-site.xml里面:

  1. <?xml version="1.0"?>
  2. <!--
  3. Licensed under the Apache License, Version 2.0 (the "License");
  4. you may not use this file except in compliance with the License.
  5. You may obtain a copy of the License at
  6. http://www.apache.org/licenses/LICENSE-2.0
  7. Unless required by applicable law or agreed to in writing, software
  8. distributed under the License is distributed on an "AS IS" BASIS,
  9. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. See the License for the specific language governing permissions and
  11. limitations under the License. See accompanying LICENSE file.
  12. -->
  13. <configuration>
  14. <!--启用RM高可用-->
  15. <property>
  16. <name>yarn.resourcemanager.ha.enabled</name>
  17. <value>true</value>
  18. </property>
  19. <!--RM集群标识符-->
  20. <property>
  21. <name>yarn.resourcemanager.cluster-id</name>
  22. <value>ns1</value>
  23. </property>
  24. <property>
  25. <!--指定两台RM主机名标识符-->
  26. <name>yarn.resourcemanager.ha.rm-ids</name>
  27. <value>h1,h2</value>
  28. </property>
  29. <!--RM故障自动切换-->
  30. <property>
  31. <name>yarn.resourcemanager.ha.automatic-failover.recover.enabled</name>
  32. <value>true</value>
  33. </property>
  34. <!--RM故障自动恢复-->
  35. <property>
  36. <name>yarn.resourcemanager.recovery.enabled</name>
  37. <value>true</value>
  38. </property>
  39. <!--RM主机1-->
  40. <property>
  41. <name>yarn.resourcemanager.hostname.h1</name>
  42. <value>h1</value>
  43. </property>
  44. <!--RM主机2-->
  45. <property>
  46. <name>yarn.resourcemanager.hostname.h2</name>
  47. <value>h2</value>
  48. </property>
  49. <!--RM状态信息存储方式,一种基于内存(MemStore),另一种基于ZK(ZKStore)-->
  50. <property>
  51. <name>yarn.resourcemanager.store.class</name>
  52. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  53. </property>
  54. <!--使用ZK集群保存状态信息-->
  55. <property>
  56. <name>yarn.resourcemanager.zk-address</name>
  57. <value>h1:2181,h2:2181,h3:2181</value>
  58. </property>
  59. <!--向RM调度资源地址-->
  60. <property>
  61. <name>yarn.resourcemanager.scheduler.address.h1</name>
  62. <value>h1:8030</value>
  63. </property>
  64. <property>
  65. <name>yarn.resourcemanager.scheduler.address.h2</name>
  66. <value>h2:8030</value>
  67. </property>
  68. <!--NodeManager通过该地址交换信息-->
  69. <property>
  70. <name>yarn.resourcemanager.resource-tracker.address.h1</name>
  71. <value>h1:8031</value>
  72. </property>
  73. <property>
  74. <name>yarn.resourcemanager.resource-tracker.address.h2</name>
  75. <value>h2:8031</value>
  76. </property>
  77. <!--客户端通过该地址向RM提交对应用程序操作-->
  78. <property>
  79. <name>yarn.resourcemanager.address.h1</name>
  80. <value>h1:8032</value>
  81. </property>
  82. <property>
  83. <name>yarn.resourcemanager.address.h2</name>
  84. <value>h2:8032</value>
  85. </property>
  86. <!--管理员通过该地址向RM发送管理命令-->
  87. <property>
  88. <name>yarn.resourcemanager.admin.address.h1</name>
  89. <value>h1:8033</value>
  90. </property>
  91. <property>
  92. <name>yarn.resourcemanager.admin.address.h2</name>
  93. <value>h2:8033</value>
  94. </property>
  95. <!--RM HTTP访问地址,查看集群信息-->
  96. <property>
  97. <name>yarn.resourcemanager.webapp.address.h1</name>
  98. <value>h1:8088</value>
  99. </property>
  100. <property>
  101. <name>yarn.resourcemanager.webapp.address.h2</name>
  102. <value>h2:8088</value>
  103. </property>
  104. <property>
  105. <name>yarn.resourcemanager.scheduler.class</name>
  106. <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
  107. </property>
  108. <property>
  109. <name>yarn.nodemanager.aux-services</name>
  110. <value>mapreduce_shuffle</value>
  111. </property>
  112. <property>
  113. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  114. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  115. </property>
  116. <property>
  117. <description>Classpath for typical applications.</description>
  118. <name>yarn.application.classpath</name>
  119. <value>$HADOOP_CONF_DIR
  120. ,$HADOOP_COMMON_HOME/share/hadoop/common/*
  121. ,$HADOOP_COMMON_HOME/share/hadoop/common/lib/*
  122. ,$HADOOP_HDFS_HOME/share/hadoop/hdfs/*
  123. ,$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*
  124. ,$YARN_HOME/share/hadoop/yarn/*</value>
  125. </property>
  126. <!-- Configurations for NodeManager -->
  127. <property>
  128. <name>yarn.nodemanager.resource.memory-mb</name>
  129. <value>5632</value>
  130. </property>
  131. <property>
  132. <name>yarn.scheduler.minimum-allocation-mb</name>
  133. <value>1408</value>
  134. </property>
  135. <property>
  136. <name>yarn.scheduler.maximum-allocation-mb</name>
  137. <value>5632</value>
  138. </property>
  139. </configuration>

mapred-site.xml里面内容

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <!--
  4. Licensed under the Apache License, Version 2.0 (the "License");
  5. you may not use this file except in compliance with the License.
  6. You may obtain a copy of the License at
  7. http://www.apache.org/licenses/LICENSE-2.0
  8. Unless required by applicable law or agreed to in writing, software
  9. distributed under the License is distributed on an "AS IS" BASIS,
  10. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  11. See the License for the specific language governing permissions and
  12. limitations under the License. See accompanying LICENSE file.
  13. -->
  14. <!-- Put site-specific property overrides in this file. -->
  15. <configuration>
  16. <property>
  17. <name>mapreduce.framework.name</name>
  18. <value>yarn</value>
  19. </property>
  20. <property>
  21. <name>mapreduce.jobtracker.address</name>
  22. <value>h1:8021</value>
  23. </property>
  24. <property>
  25. <name>mapreduce.jobhistory.address</name>
  26. <value>h1:10020</value>
  27. </property>
  28. <property>
  29. <name>mapreduce.jobhistory.webapp.address</name>
  30. <value>h1:19888</value>
  31. </property>
  32. <property>
  33. <name>mapred.max.maps.per.node</name>
  34. <value>2</value>
  35. </property>
  36. <property>
  37. <name>mapred.max.reduces.per.node</name>
  38. <value>1</value>
  39. </property>
  40. <property>
  41. <name>mapreduce.map.memory.mb</name>
  42. <value>1408</value>
  43. </property>
  44. <property>
  45. <name>mapreduce.map.java.opts</name>
  46. <value>-Xmx1126M</value>
  47. </property>
  48. <property>
  49. <name>mapreduce.reduce.memory.mb</name>
  50. <value>2816</value>
  51. </property>
  52. <property>
  53. <name>mapreduce.reduce.java.opts</name>
  54. <value>-Xmx2252M</value>
  55. </property>
  56. <property>
  57. <name>mapreduce.task.io.sort.mb</name>
  58. <value>512</value>
  59. </property>
  60. <property>
  61. <name>mapreduce.task.io.sort.factor</name>
  62. <value>100</value>
  63. </property>
  64. </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

Hadoop2.7.1配置NameNode+ResourceManager高可用原理分析的更多相关文章

  1. ResourceManager高可用配置

    ResourceManager高可用配置 1. yarn-site.xml配置 <property> <name>yarn.resourcemanager.cluster-id ...

  2. HDFS 09 - HDFS NameNode 的高可用机制

    目录 1 - 为什么要高可用 2 - NameNode 的高可用发展史 3 - HDFS 的高可用架构 3.1 Standby 和 Active 的命名空间保持一致 3.2 同一时刻只有一个 Acti ...

  3. RabbitMQ集群安装配置+HAproxy+Keepalived高可用

    RabbitMQ集群安装配置+HAproxy+Keepalived高可用 转自:https://www.linuxidc.com/Linux/2016-10/136492.htm rabbitmq 集 ...

  4. HBase高可用原理与实践

    前言 前段时间有套线上HBase出了点小问题,导致该套HBase集群服务停止了2个小时,从而造成使用该套HBase作为数据存储的应用也出现了服务异常.在排查问题之余,我们不禁也在思考,以后再出现类似的 ...

  5. Hadoop 2、配置HDFS HA (高可用)

    前提条件 先搭建 http://www.cnblogs.com/raphael5200/p/5152004.html 的环境,然后在其基础上进行修改 一.安装Zookeeper 由于环境有限,所以在仅 ...

  6. zookeeper简易配置及hadoop高可用安装

    zookeeper介绍    是一个分布式服务的协调服务,集群半数以上可用(一般配置为奇数台),            快速选举机制:当集群中leader挂掉,所有小弟会投票选举出新的leader.  ...

  7. 配置LVS + Keepalived高可用负载均衡集群之图文教程

    负载均衡系统可以选用LVS方案,而为避免Director Server单点故障引起系统崩溃,我们可以选用LVS+Keepalived组合保证高可用性.  重点:每个节点时间都同步哈! C++代码 [r ...

  8. Keeplived配置Nginx双机高可用

    一.简介不管是Keepalived还是Heartbeat做高可用,其高可用,都是站在服务器脚本去说的高可用,而不是服务的角度.也就是说,如果服务器DOWN机或者网络出现故障,高可用是可以实现自动切换的 ...

  9. SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

    1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操 ...

随机推荐

  1. weblogic重置控制台密码

    1.备份文件如下文件 %DOMAIN_HOME%/security/DefaultAuthenticatorInit.ldift 2.进入%DOMAIN_HOME%/security目录,执行下列命令 ...

  2. CentOS 启动提示unexpected inconsistency;RUN fsck MANUALLY, ntfs的input/output Error,InPageError c000009c使用chkdsk修复磁盘,12款Linux系统恢复工具

    CentOS这两天服务器出了问题了,提示如下: unexpected inconsistency;RUN fsck MANUALLY An error occurred during the file ...

  3. Excel的数据分析—排位与百分比

    Excel的数据分析-排位与百分比 某班级期中考试进行后,按照要求仅公布成绩,但学生及家长要求知道排名.故欲公布成绩排名,学生可以通过成绩查询到自己的排名,并同时得到该成绩位于班级百分比排名(即该同学 ...

  4. mysql key分区,分区数制定

    我相信不 太注意的同学肯定会入坑,今天我差点也入坑了,后面自己问自己如果我用key分区,自己问自己 我的分区数应该是多少??? 后面我陷入了沉思......... 我第一次想先随便弄一个分区数,在本地 ...

  5. React:JS中的this和箭头函数

    JS中的this和纯面向对象(java,c++)中的this有点不大一样,其原因就是作用域不同,导致JS中的this的指向不明确,在java中的this指当前对象的this或当前类的this,在JS中 ...

  6. codeforces round#524 D - Olya and magical square /// 大概算是数学规律题?

    题目大意: t 个测试用例  (1≤t≤103) 给定n k  (1≤n≤10^9,1≤k≤10^18) 表示有一个边长为2^n的正方形格子 每次操作只能将一个格子切割为左上左下右上右下的四等分格子 ...

  7. Python+Django+SAE系列教程6-----本地配置Django

    前五章.我们介绍了Python的语法,本章開始介绍Django. Python的Web框架有非常多,有Django.web2py.tornado.web.py等.我们这里选 则Django.至于这些框 ...

  8. 在Linux下解压xz压缩文件

    1.安装xz命令 # yum install xz -y 2.将xz文件解压为tar文件 # xz -d example.tar.xz 3.将tar文件解压 # tar xf example.tar ...

  9. 002-Java数据类型

    Java数据类型 基本数据类型 和 引用数据类型 基本数据类型 整型:byte - 8bit / short - 2字节 / int - 4字节 / long - 8字节 浮点型:float doub ...

  10. MySQL 08章_数据库设计

    一. 关系模型与对象模型之间的对应关系 序号 关系模型:数据库 对象模型:java程序 1 数据表table 实体entity:特殊的java类 2 字段field 属性attribute/字段fie ...