hadoop2 比 hadoop1的一些新的功能:
其中HA解决了hadoop1的单点故障问题
1) 各节点:
namenode:master slave3
datanode:slave1 slave2 slave3journalnode:master slave1 slave3
zookeeper: master slave1 slave3
2)hadoop2 搭建在手工切换ha的集群基础上:
a) 关闭所有启动角色
b) 删除所有机器/usr/local/hadoop/tmp 和 /usr/local/hadoop/logs的内容
3) zookeeper集群安装:
1. a) master上安装zookeeper
2. 1)把conf/zoo_sample.cfg重命名为conf/zoo.cfg mv zoo_sample.cfg zoo.cfg
3. 2)修改文件conf/zoo.cfg
4. 1)dataDir=/usr/local/zookeeper/data
5. 2)增加以下内容
6. 1=master:2888:3888
7. ---> 标识1 是master对应在zookeeper集群的编号 2888:3888是数据通信端口
8. 2=slave1:2888:3888
9. ---> 标识2 是slave1对应在zookeeper集群的编号 2888:3888是数据通信端口
10. 3=slave3:2888:3888
11. ---> 标识3 是slave3对应在zookeeper集群的编号 2888:3888是数据通信端口
12. 3) mkdir zookeeper/data
13. @master
14. 4) 写入文件echo 1到 zookeeper/data/myid 这样在本机master内写上标识1
15. @master zookeeper]# echo 1
16.
17.
18. b) 复制zookeeper文件夹到slave1、slave3上
19.
20. slave1:/usr/local
21. slave3:/usr/local
22.
23.
24. c) 其余节点写标识
25. slave1上执行命令echo 2
26. slave3上执行命令echo 3
27.
28.
29. d) 启动和验证
30. master slave1 slave3上,分别执行命令zookeeper/bin/zkServer.sh start
31. 执行命令zookeeper/bin/zkServer.sh status 可以看到三个节点的状态 哪个是leader 哪个是follower
32. 直接开启
4) hdfs配置文件:(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)
1. 2.1
2. 2.1.1
3. export JAVA_HOME=/usr/local/jdk
4. 2.1.2
5.
6. <property>
7. <name>fs.default.name</name>
8. <value>hdfs://cluster1</value>
9. </property>
10.
11. <property>
12. <name>hadoop.tmp.dir</name>
13. <value>/usr/local/hadoop/tmp</value>
14. </property>
15.
16. <property>
17. <name>ha.zookeeper.quorum</name> ------ 配置zk集群
18. <value>master:2181,slave1:2181, slave3:2181</value>
19. </property>
20.
21.
22. 2.1.3
23. <property>
24. <name>dfs.replication</name>
25. <value>3</value>
26. </property>
27.
28. <property>
29. <name>dfs.nameservices</name> ----每个nameservice对应一个hdfs集群
30. <value>cluster1</value>
31. </property>
32.
33. <property>
34. <name>dfs.ha.namenodes.cluster1</name>
35. <value>master,slave3</value>
36. </property>
37.
38. <property>
39. <name>dfs.namenode.rpc-address.cluster1.master</name>
40. <value>master:9000</value>
41. </property>
42.
43. <property>
44. <name>dfs.namenode.http-address.cluster1.master</name>
45. <value>master:50070</value>
46. </property>
47.
48. <property>
49. <name>dfs.namenode.rpc-address.cluster1.slave3</name>
50. <value>slave3:9000</value>
51. </property>
52.
53. <property>
54. <name>dfs.namenode.http-address.cluster1.slave3</name>
55. <value>slave3:50070</value>
56. </property>
57.
58. <property>
59. <name>dfs.ha.automatic-failover.enabled.cluster1</name>
60. <value>true</value>
61. </property>
62.
63. <property>
64. <name>dfs.namenode.shared.edits.dir</name>
65. <value>qjournal://master:8485;slave1:8485;slave3:8485/cluster1</value>
66. </property>
67.
68. <property>
69. <name>dfs.journalnode.edits.dir</name>
70. <value>/usr/local/hadoop/tmp/journal</value>
71. </property>
72.
73. <property>
74. <name>dfs.ha.fencing.methods</name>
75. <value>
76. sshfence
77. shell(/bin/true)
78. </value>
79. </property>
80.
81. <property>
82. <name>dfs.ha.fencing.ssh.private-key-files</name>
83. <value>/root/.ssh/id_rsa</value>
84. </property>
85.
86. <property>
87. <name>dfs.client.failover.proxy.provider.cluster1</name>
88. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
89. </property>
90.
91. 2.1.6
92. slave1
93. slave2
94. slave3
5) 删除其他节点的hadoop文件夹,修改好后拷贝到其余节点
scp -r /usr/local/hadoop 其他:/usr/local/
6) 启动hadoop2 hdfs集群
1. 6.1) 格式化zk集群
2. 5/bin/hdfs zkfc -formatZK 此操作仅仅表示和zk集群发生关联
3. 15/01/11 18:14:20
4.
5. 3在zookeeper中初始化
6. $HADOOP_HOME/bin/hdfs zkfc -formatZK
7. 运行这个命令后,会在zookeeper上创建一个/hadoop-ha/mycluster/的znode,用来存放automatic failover的数据
8. 4 启动zkfc(zookeeper failover controller)
9. 需要在namenode1和namenode2上都启动zkfc daemon进程。
10. $HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc
11.
12. 6.2) 启动journalnode集群
13. slave1、slave3上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode
14. 6.3) 格式化namenode、启动namenode
15. 在[nn1]上,对其进行格式化,并启动:
16. 在h2master上执行bin/hdfs namenode -format
17. 在h2master上执行sbin/hadoop-daemon.sh start namenode
18. 在[nn2]上,同步nn1的元数据信息:
19. 在h2master2上执行bin/hdfs namenode -bootstrapStandby
20. 在h2master2上执行sbin/hadoop-daemon.sh start namenode
21. 6.4) 启动datanode
22. 在h2master上执行hadoop/sbin/hadoop-daemons.sh start datanode 启动所有datanode节点
23. 此时访问如下链接
24. //master:50070/ http://slave3:50070/
25. 两个namenode都是standby状态
26. 6.5) 启动ZKFC (FailoverController) 必须是在namenode节点上启动 让zk来决定用哪个namenode作为active
27. slave3上 启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc
28. //master:50070/ http://slave3:50070/ 结果如下:
29. 'master:9000'
30. Overview 'slave3:9000' (standby)
7) 验证自动切换:
关闭master的namenode进程:
再次刷新
http://h2master:50070/ http://slave3:50070/ 结果如下:
Overview 'slave3:9000' (active) ----> zk自动切换节点slave3为active状态
master无法连接
8) 总结:自动切换比手工切换多出来的步骤
(1)配置上core-site.xml增加了配置项ha.zookeeper.quorum(zk集群的配置);
hdfs-site.xml中把dfs.ha.automatic-failover.enabled.cluster1改为true
(3)操作上格式化zk,执行命令bin/hdfs zkfc -formatZK;
启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc
转载于:https://blog.51cto.com/01wang/1656899