原主节点信息
node1$ jps
42207 DFSZKFailoverController
3069 QuorumPeerMain
42108 JournalNode
46157 Jps
48337 NameNode
node2$ jps
44149 QuorumPeerMain
17845 ApplicationHistoryServer
14798 Jps
6844 Bootstrap
30162 JournalNode
40821 ResourceManager
21067 JobHistoryServer
node3$ jps
20728 JournalNode
32462 Jps
20827 DFSZKFailoverController
13234 QuorumPeerMain
33418 NameNode
node4$ cat VERSION
#Wed Jan 04 21:52:23 CST 2017
namespaceID=1998041515
clusterID=CID-4314a112-1c89-47fe-b692-3be441377efa
cTime=0
storageType=NAME_NODE
blockpoolID=BP-815890062-172.23.200.1-1439977331443
layoutVersion=-60
一、备份
1.配置文件备份(服务端与客户端,备份conf目录)
2.数据源备份(更新hive源数据信息时需要在MYSQL中备份相关记录源数据的表)
3.Edits与fsimage备份(40G左右-安全)
二、停集群(外挂端先隔离掉,再开启安全模式hadoop dfsadmin -safemode enter/leave)
1) 先停止yarn
stop-yarn.sh
(mr-jobhistory-daemon.sh stop historyserver)
(yarn-daemon.sh stop historyserver)
2)停止datanode
hadoop-daemons.sh stop datanode
3)停止nn1,nn2
hadoop-daemon.sh stop zkfc
hadoop-daemon.sh stop namenode
(23合并 stop-dfs.sh)
4)停止JN和ZK
(hadoop-daemon.sh stop journalnode)
./zkServer.sh stop
5)备份Fsimage(查看目录下的文件大小不再改变时再进行备份)
三、推送及修改
1).配置文件修改(修改core-site.xml、hdfs-site.xml)
hdfs-site.xml(增加内容)
<!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
<property>
<name>dfs.nameservices</name>
<value>ns1,ns2</value>
</property>
<!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- ns2下面有两个NameNode,分别是nn3,nn4 -->
<property>
<name>dfs.ha.namenodes.ns2</name>
<value>nn3,nn4</value>
</property>
<!-- nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>x.x.x.x:8020</value>
</property>
<!-- nn3的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns2.nn3</name>
<value>x.x.x.x:8020</value>
</property>
<!-- nn1的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>x.x.x.x:50070</value>
</property>
<!-- nn3的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns2.nn3</name>
<value>x.x.x.x:50070</value>
</property>
<!-- nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>x.x.x.x:8020</value>
</property>
<!-- nn4的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns2.nn4</name>
<value>x.x.x.x:8020</value>
</property>
<!-- nn2的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>x.x.x.x:50070</value>
</property>
<!-- nn4的http通信地址 -->
<property>
<name>dfs.namenode.http-address.ns2.nn4</name>
<value>x.x.x.x:50070</value>
</property>
<!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
<!-- 下面两个配置需要在不同的ns上,不是在一个文件中 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://x.x.x.x:8485;x.x.x.x:8485;x.x.x.x:8485/ns1</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://x.x.x.x:8485;x.x.x.x:8485;x.x.x.x:8485/ns2</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.client.failover.proxy.provider.ns2</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
core-site.xml
ns1
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
ns2
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns2</value>
</property>
2).配置文件推送到所有节点(把修改好的配置文件推送到所有节点 ns1 ns 2有不同的配置)
四、启集群
1).ZK、JN 启动
./zkServer.sh start
hadoop-daemon.sh start journalnode
2).nn1,nn2启动
hadoop-daemon.sh start namenode
3).nn3格式化namenode
hdfs namenode -format -clusterid CID-4314a112-1c89-47fe-b692-3be441377efa
4).nn3启动
hadoop-daemon.sh start namenode
5).nn4上同步
hdfs namenode -bootstrapStandby
6).nn3格式化ZK
hdfs zkfc -formatZK
7).nn4上启动
hadoop-daemon.sh start namenode
8).nn1,nn2 nn3,nn4
hadoop-daemon.sh start zkfc
等待fsimage加载完毕后,启动DFS
9).nn1上启动datanode
hadoop-daemons.sh start datanode(start-dfs.sh)
测试两个NS是否正常(web及命令测试)
客户端测试hadoop是否正常(使用CMT所有测试写成脚本)
10).启动YARN
start-yarn.sh
五、回退方案
1).还原配置文件信息(脚本执行:软链接,CP)
2).重新启动集群
3).ZK、JN
./zkServer.sh start
hadoop-daemon.sh start journalnode
4).nn1,nn2
hadoop-daemon.sh start namenode
5).nn1,nn2上分别启动ZKFC(如果NN1是主,就在NN1上先启动ZKFC;如果想让NN2为active就先启动NN2上的ZKFC)
hadoop-daemon.sh start zkfc
6).nn1上启动datanode
hadoop-daemons.sh start datanode
7)获取nn1 的状态
hdfs haadmin -getServiceState nn1
hdfs haadmin -getServiceState nn2
7).RM上启动YARN
start-yarn.sh
(mr-jobhistory-daemon.sh start historyserver)
(yarn-daemon.sh start historyserver)