[关闭]
@hadoopMan 2017-03-13T02:22:01.000000Z 字数 7070 阅读 846

hadoopHA安装部署测试

hadoop
本文主要完成以下内容:
1) HDFS HA(高可用性)原理(把握四大要点),最好自己作图
2) 依据官方文档及课程讲解配置HDFS HA启动并测试
3) YARN ResouceManager HA和ResouceManager Restart 功能及配置部署与测试。


1,背景

  1. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。对于只有一个NameNode的集群,若NameNode机器出现故障。则整个集群将无法使用,直到NameNode重启。
  2. NameNode主要在以下两个方面影响HDFS集群
    (1),NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启。
    (2),NameNode机器需要升级:包括软件升级和硬件升级,此时集群也将无法使用
  3. HDFS HA功能通过配置Active/Standby
    两个NameNode实现在集群中对NameNode的热备份来解决上述问题。如果出现故障,如机器崩溃或者机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

1.1 HDFS HA要点

(1).保证两NameNode内存中存储文件系统的元数据要同步。

文件系统元数据变化edits文件安全性的保证也是重点。
方案:如何保证edits安全性

1,好的文件系统。比如好的硬盘

2,分布式存储日志信息。-QJM
2n+1节点管理日志 journalNode只要有n+1写成功就算成功。奇数。

3,使用ZK进行数据存储。

(2).实时接收datanode发送的心跳及块报告。

*dataNode注册
*datanode块报告

(3).Client 通过代理来访问NN.

代理(Proxy)决定访问那个处于活跃状态的NameNode。

(4).使用隔离机制保障时刻只有一个NameNode处于活跃状态。

1.2,HDFS HA设计结构图

根据四大要点HDFS HA的设计结构图:
1.png-82.7kB

3.png-37.1kB

2,QJM HA 配置

2.1 基本配置

2.1.1,NameNode HA基本配置(core-site.xml,hdfs-site.xml.)

1,ActiveNameNode与StandbyNameNode地址配置(hdfs-site.xml)

  1. <property>
  2. <name>dfs.nameservices</name>
  3. <value>mycluster</value><!--集群的名字 -->
  4. </property>
  5. <property>
  6. <name>dfs.ha.namenodes.mycluster</name>
  7. <value>nn0,nn1</value><!--//两个namenode的名字 -->
  8. </property>
  9. <property>
  10. <name>dfs.namenode.rpc-address.mycluster.nn0</name>
  11. <value>miaodonghua.host:8020</value><!-- //nn0所在主机 -->
  12. </property>
  13. <property>
  14. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  15. <value>miaodonghua.host1:8020</value><!-- //nn1所在主机 -->
  16. </property>

2,NameNode和DataNode本地存储路径配置(hdfs-site.xml)

  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://mycluster</value>
  4. </property>
  5. <property>
  6. <name>hadoop.tmp.dir</name>
  7. <value>/opt/app/hadoop-2.5.0/data/tmp</value>
  8. </property>

3,HDFS NameSpace访问配置(hdfs-site.xml)

  1. <property>
  2. <name>dfs.namenode.http-address.mycluster.nn0</name>
  3. <value>miaodonghua.host:50070</value>
  4. </property>
  5. <property>
  6. <name>dfs.namenode.http-address.mycluster.nn1</name>
  7. <value>miaodonghua1.host:50070</value>
  8. </property>

4,隔离fencing配置(配置两节点之间的相互SSH无密匙登录)(hdfs-site.xml)

  1. <property>
  2. <name>dfs.ha.fencing.methods</name>
  3. <value>sshfence</value>
  4. </property>
  5. <property>
  6. <name>dfs.ha.fencing.ssh.private-key-files</name>
  7. <value>/home/hadoop/.ssh/id_rsa</value>
  8. </property>

2.1.2,QJM配置(hdfs-site.xml)

1,QJM管理编辑日志

  1. <property>
  2. <name>dfs.namenode.shared.edits.dir</name>
  3. <value>qjournal://miaodonghua.host:8485;miaodonghua2.host:8485;miaodonghua2.host:8485/mycluster</value>
  4. </property>

2,编辑日志存储目录

  1. <property>
  2. <name>dfs.journalnode.edits.dir</name>
  3. <value>/opt/app/hadoop-2.5.0/data/dfs/jn</value>
  4. </property>

2.1.3,客户端代理配置

  1. <property>
  2. <name>dfs.client.failover.proxy.provider.mycluster</name>
  3. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  4. </property>

2.1.3,QJM HA的启动

(1).在各个JournalNode节点上,输入一下命令启动JournalNode:
  1. $sbin/hadoop-daemon.sh start journalnode
(2).在[nn1]上,对其进行格式化,并启动:
  1. $bin/hdfs namenode -format
  2. $sbin/hadoop-daemon.sh start namenode
(3).在[nn2]上,同步nn1的元数据信息:
  1. $bin/hdfs namenode -bootstrapStandby
(4).启动[nn2]:
  1. $sbin/hadoop-daemon.sh start namenode
(5).将[nn1]切换为Active
  1. $bin/hdfs haadmin -transtionToActive nn0
(6).在[nn1]上,启动所有datanode
  1. $sbin/hadoop-daemon.sh start datanode

执行上述指令完毕后,三台机器hadoop服务开启情况如下:
123
web浏览页面可以看到两个namenode的状态如下:
nn0nn1

(7).创建目录,上传文件

  1. $bin/hdfs dfs -mkdir -p /usr/hadoop/input/
  2. $bin/hdfs dfs -put /opt/datas/wc.input/ /usr/hadoopinput/
执行成功后:
![1.png-28.6kB][8]

2.2,手动故障转移(无需配置)

1,执行一下命令,

  1. $kill -9 pidactive namenode
  2. $bin/hdfs haadmin -transtionToActive nn1 --forceactive

2,命令执行成功后:
1.png-5.9kB,
3,读取wc.input的内容:

  1. $bin/hdfs dfs -text /usr/hadoop/input/wc.input

读取成功.png-23.5kB

2.3 NN HA自动故障转移

自动故障转移设计结构图:
NN HA自动故障转移.png-61.7kB

1. 启动zookeeper

(1).关闭所有HDFS服务,命令:

  1. $sbin/stop-dfs.sh

(2).启动Zookeeper集群,命令:

  1. $bin/zkServer.sh start

(3).初始化HA在Zookeeper中状态,命令:

  1. $bin/hdfs zkfc -formatZK

1.png-31.8kB1.png-6.7kB
(4).启动HDFS服务,命令:

  1. $sbin/start-dfs.sh

(5).在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器上启动,哪个NameNode就是ActiveNameNode。命令:

  1. $sbin/hadoop-daemon.sh start zkfc

2. 验证

(1).将ActiveNameNode进程kill,命令:

  1. $kill -9 pid

(2).将Active机器断开网络,命令:

  1. $sudo service network stop

3,yarn resourcemanager HA


1. RM HA的结构示意图:

RMHA.png-44.9kB

RM HA与NN HA有诸多相似之处:
(1).Active/standby架构,同一时间只有一个RM处于活跃状态。

(2).依赖zookeeper实现。手动切换使用yarn rmadmin命令,而自动切换使用ZKFailoverCrontroller。但是不同的是,zkfc只作为RM中一个线程而非独立的守护进程来启动。

(3).当存在多个RM时,客户端使用的yarn-site.xml需要指定列表。客户端,ApplicationMasters,NodeManagers会以轮训的方式寻找活动状态的RM,也就是Active RM。如果Active RM停止工作了,AMs和NMs就会一直循环查找直至找到一个新的Active RM。这种重试的思路被抽象为属性:org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider。你可以重写该逻辑,通过使用org.apache.hadoop.yarn.client.RMFailoverProxyProvider并且设置这个属性yarn.client.failover-proxy-provider的值为类名。

(4).新的RM可以恢复之前RM的状态。当启动RM Rstart,重启RM就加载之前活动RM的状态信息并继续之前的操作,这样应用程序定期检查点操作,就可以避免工作内容丢失。在Active/standby的RM中,活动RM的状态数据需要active和standby都能访问,使用共享文件系统方法(FileSystemRMStateStore)或者zookeeper方法(ZKRMStateStore)。后者在同一时间只允许一个RM有写入权限。

2,配置(Configurations)

大部分故障转移功能都可以用下面属性进行配置。具体配制方法可以查看yarn-default.xml。
![configurations.png-45kB][15]

本系统配置实例:

  1. <property>
  2. <name>yarn.resourcemanager.ha.enabled</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>yarn.resourcemanager.cluster-id</name>
  7. <value>cluster1</value>
  8. </property>
  9. <property>
  10. <name>yarn.resourcemanager.ha.rm-ids</name>
  11. <value>rm1,rm2</value>
  12. </property>
  13. <property>
  14. <name>yarn.resourcemanager.hostname.rm1</name>
  15. <value>niaodonghua1.host</value>
  16. </property>
  17. <property>
  18. <name>yarn.resourcemanager.hostname.rm2</name>
  19. <value>miaod0nghua2.host</value>
  20. </property>
  21. <property>
  22. <name>yarn.resourcemanager.zk-address</name>
  23. <value>miaodonghua.host:2181,miaodonghua1.host:2181,miaodonghua2.host:2181</value>
  24. </property>
  25. <property>
  26. <name>yarn.resourcemanager.recovery.enabled</name>
  27. <value>true</value>
  28. </property>
  29. <property>
  30. <name>yarn.resourcemanager.store.class</name>
  31. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  32. </property>

3, Admin commands

(1).yarn rmadmin has a few HA-specific command options to check the health/state of an RM, and transition to Active/Standby. Commands for HA take service id of RM set by yarn.resourcemanager.ha.rm-ids as argument.
  1. $yarn rmadmin -getServiceState rm1 active
  2. $yarn rmadmin -getServiceState rm2 standby
(2).如果自动故障转移没有启用,你就可以使用下面的命令来切换RM运行的状态。
  1. $ yarn rmadmin -transitionToStandby rm1

4,ResourceManger Restart

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注