标签(空格分隔): hadoop
本文主要完成以下内容:
1) HDFS HA(高可用性)原理(把握四大要点),最好自己作图
2) 依据官方文档及课程讲解配置HDFS HA启动并测试
3) YARN ResouceManager HA和ResouceManager Restart 功能及配置部署与测试。
文件系统元数据变化edits文件安全性的保证也是重点。
方案:如何保证edits安全性
1,好的文件系统。比如好的硬盘
2,分布式存储日志信息。-QJM
2n+1节点管理日志 journalNode只要有n+1写成功就算成功。奇数。
3,使用ZK进行数据存储。
*dataNode注册
*datanode块报告
代理(Proxy)决定访问那个处于活跃状态的NameNode。
<property>
<name>dfs.nameservicesname>
<value>myclustervalue>
property>
<property>
<name>dfs.ha.namenodes.myclustername>
<value>nn0,nn1value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn0name>
<value>miaodonghua.host:8020value>
property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1name>
<value>miaodonghua.host1:8020value>
property>
<property>
<name>fs.defaultFSname>
<value>hdfs://myclustervalue>
property>
<property>
<name>hadoop.tmp.dirname>
<value>/opt/app/hadoop-2.5.0/data/tmpvalue>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn0name>
<value>miaodonghua.host:50070value>
property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1name>
<value>miaodonghua1.host:50070value>
property>
<property>
<name>dfs.ha.fencing.methodsname>
<value>sshfencevalue>
property>
<property>
<name>dfs.ha.fencing.ssh.private-key-filesname>
<value>/home/hadoop/.ssh/id_rsavalue>
property>
<property>
<name>dfs.namenode.shared.edits.dirname>
<value>qjournal://miaodonghua.host:8485;miaodonghua2.host:8485;miaodonghua2.host:8485/myclustervalue>
property>
<property>
<name>dfs.journalnode.edits.dirname>
<value>/opt/app/hadoop-2.5.0/data/dfs/jnvalue>
property>
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
(1).在各个JournalNode节点上,输入一下命令启动JournalNode:
$sbin/hadoop-daemon.sh start journalnode
(2).在[nn1]上,对其进行格式化,并启动:
$bin/hdfs namenode -format
$sbin/hadoop-daemon.sh start namenode
(3).在[nn2]上,同步nn1的元数据信息:
$bin/hdfs namenode -bootstrapStandby
(4).启动[nn2]:
$sbin/hadoop-daemon.sh start namenode
(5).将[nn1]切换为Active
$bin/hdfs haadmin -transtionToActive nn0
(6).在[nn1]上,启动所有datanode
$sbin/hadoop-daemon.sh start datanode
执行上述指令完毕后,三台机器hadoop服务开启情况如下:
web浏览页面可以看到两个namenode的状态如下:
(7).创建目录,上传文件
$bin/hdfs dfs -mkdir -p /usr/hadoop/input/
$bin/hdfs dfs -put /opt/datas/wc.input/ /usr/hadoopinput/
执行成功后:
![1.png-28.6kB][8]
1,执行一下命令,
$kill -9 pid(active namenode)
$bin/hdfs haadmin -transtionToActive nn1 --forceactive
$bin/hdfs dfs -text /usr/hadoop/input/wc.input
(1).关闭所有HDFS服务,命令:
$sbin/stop-dfs.sh
(2).启动Zookeeper集群,命令:
$bin/zkServer.sh start
(3).初始化HA在Zookeeper中状态,命令:
$bin/hdfs zkfc -formatZK
$sbin/start-dfs.sh
(5).在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器上启动,哪个NameNode就是ActiveNameNode。命令:
$sbin/hadoop-daemon.sh start zkfc
(1).将ActiveNameNode进程kill,命令:
$kill -9 pid
(2).将Active机器断开网络,命令:
$sudo service network stop
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有写入权限。
大部分故障转移功能都可以用下面属性进行配置。具体配制方法可以查看yarn-default.xml。
![configurations.png-45kB][15]
本系统配置实例:
<property>
<name>yarn.resourcemanager.ha.enabledname>
<value>truevalue>
property>
<property>
<name>yarn.resourcemanager.cluster-idname>
<value>cluster1value>
property>
<property>
<name>yarn.resourcemanager.ha.rm-idsname>
<value>rm1,rm2value>
property>
<property>
<name>yarn.resourcemanager.hostname.rm1name>
<value>niaodonghua1.hostvalue>
property>
<property>
<name>yarn.resourcemanager.hostname.rm2name>
<value>miaod0nghua2.hostvalue>
property>
<property>
<name>yarn.resourcemanager.zk-addressname>
<value>miaodonghua.host:2181,miaodonghua1.host:2181,miaodonghua2.host:2181value>
property>
<property>
<name>yarn.resourcemanager.recovery.enabledname>
<value>truevalue>
property>
<property>
<name>yarn.resourcemanager.store.classname>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStorevalue>
property>
(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.
$yarn rmadmin -getServiceState rm1 active
$yarn rmadmin -getServiceState rm2 standby
(2).如果自动故障转移没有启用,你就可以使用下面的命令来切换RM运行的状态。
$ yarn rmadmin -transitionToStandby rm1