hadoop2 比 hadoop1的一些新的功能:

其中HA解决了hadoop1的单点故障问题

1) 各节点:
namenode:master   slave3
datanode:slave1  slave2  slave3

journalnode: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.     a.1)把conf/zoo_sample.cfg重命名为conf/zoo.cfg  mv zoo_sample.cfg zoo.cfg  

  3.     a.2)修改文件conf/zoo.cfg  

  4.      1)dataDir=/usr/local/zookeeper/data  

  5.      2)增加以下内容  

  6.      server.1=master:2888:3888   

  7. ---> 标识1 是master对应在zookeeper集群的编号 2888:3888是数据通信端口  

  8.      server.2=slave1:2888:3888  

  9. ---> 标识2 是slave1对应在zookeeper集群的编号 2888:3888是数据通信端口  

  10.      server.3=slave3:2888:3888

  11. ---> 标识3 是slave3对应在zookeeper集群的编号 2888:3888是数据通信端口  

  12.     a.3) mkdir zookeeper/data   

  13.     [root@master zookeeper]# mkdir data  

  14.     a.4) 写入文件echo 1到 zookeeper/data/myid 这样在本机master内写上标识1 两者关联起来  

  15.     [root@master zookeeper]# echo 1 > data/myid  

  16.   

  17.       

  18. b) 复制zookeeper文件夹到slave1、slave3上  

  19.   

  20.     scp -rq zookeeper  slave1:/usr/local  

  21.     scp -rq zookeeper  slave3:/usr/local  

  22.       

  23.       

  24. c) 其余节点写标识  

  25.     在slave1上执行命令echo 2 zookeeper/data/myid  

  26.     在slave3上执行命令echo 3 zookeeper/data/myid  

  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 配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、slaves)  

  2. 2.1.1 hadoop-env.sh  

  3.   export JAVA_HOME=/usr/local/jdk  

  4. 2.1.2 core-site.xml  

  5.   

  6.   

  7. fs.default.name  

  8. hdfs://cluster1  

  9.   

  10.   

  11.   

  12. hadoop.tmp.dir  

  13. /usr/local/hadoop/tmp  

  14.   

  15.   

  16.   

  17. ha.zookeeper.quorum    ------ 配置zk集群  

  18. master:2181,slave1:2181,  slave3:2181  

  19.   

  20.   

  21.   

  22. 2.1.3 hdfs-site.xml  

  23.   

  24. dfs.replication  

  25. 3  

  26.   

  27.   

  28.   

  29. dfs.nameservices ----每个nameservice对应一个hdfs集群  

  30. cluster1  

  31.   

  32.   

  33.   

  34. dfs.ha.namenodes.cluster1  

  35. master,slave3  

  36.   

  37.   

  38.   

  39. dfs.namenode.rpc-address.cluster1.master  

  40. master:9000  

  41.   

  42.   

  43.   

  44. dfs.namenode.http-address.cluster1.master  

  45. master:50070  

  46.   

  47.   

  48.   

  49. dfs.namenode.rpc-address.cluster1.slave3  

  50. slave3:9000  

  51.   

  52.   

  53.   

  54. dfs.namenode.http-address.cluster1.slave3  

  55. slave3:50070  

  56.   

  57.   

  58.   

  59. dfs.ha.automatic-failover.enabled.cluster1  

  60. true  

  61.   

  62.   

  63.   

  64. dfs.namenode.shared.edits.dir  

  65. qjournal://master:8485;slave1:8485;slave3:8485/cluster1  

  66.   

  67.   

  68.   

  69. dfs.journalnode.edits.dir  

  70. /usr/local/hadoop/tmp/journal  

  71.   

  72.   

  73.   

  74. dfs.ha.fencing.methods  

  75.   sshfence

  76.    shell(/bin/true)

  77.   

  78.   

  79.   

  80.   

  81. dfs.ha.fencing.ssh.private-key-files  

  82. /root/.ssh/id_rsa  

  83.   

  84.   

  85.   

  86. dfs.client.failover.proxy.provider.cluster1  

  87. org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider  

  88.   

  89.   

  90. 2.1.6 slaves -----> 指定NodeManager 和 datanode   

  91. slave1    

  92. slave2    

  93. slave3    

 

 

 

5) 删除其他节点的hadoop文件夹,修改好后拷贝到其余节点
scp -r /usr/local/hadoop   其他:/usr/local/

 

6) 启动hadoop2 hdfs集群

 


  1. 6.1) 格式化zk集群  

  2.   在master上执行hadoop2.5/bin/hdfs zkfc -formatZK   此操作仅仅表示和zk集群发生关联  

  3.   15/01/11 18:14:20 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/cluster1 in ZK.  

  4. 3在zookeeper中初始化 

  5. $HADOOP_HOME/bin/hdfs zkfc -formatZK

  6. 运行这个命令后,会在zookeeper上创建一个/hadoop-ha/mycluster/的znode,用来存放automatic  failover的数据

  7. 4 启动zkfc(zookeeper failover controller) 

  8. 需要在namenode1和namenode2上都启动zkfc daemon进程。

  9. $HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc


  10. 6.2) 启动journalnode集群  

  11.   在master、slave1slave3上分别执行hadoop/sbin/hadoop-daemon.sh start journalnode  

  12. 6.3) 格式化namenode、启动namenode 

  13. 在[nn1]上,对其进行格式化,并启动: 

  14.   在h2master上执行bin/hdfs namenode -format  

  15.   在h2master上执行sbin/hadoop-daemon.sh start namenode 

  16. 在[nn2]上,同步nn1的元数据信息: 

  17.   在h2master2上执行bin/hdfs namenode -bootstrapStandby  

  18.   在h2master2上执行sbin/hadoop-daemon.sh start namenode  

  19. 6.4)  启动datanode  

  20.   在h2master上执行hadoop/sbin/hadoop-daemons.sh start datanode   启动所有datanode节点  

  21.   此时访问如下链接  

  22.   http://master:50070/ http://slave3:50070/  

  23.   两个namenode都是standby状态  

  24. 6.5)  启动ZKFC (FailoverController) 必须是在namenode节点上启动 让zk来决定用哪个namenode作为active  

  25.   在master、slave3上 启动zkfc,执行命令sbin/hadoop-daemon.sh start zkfc  

  26.   此时访问   http://master:50070/ http://slave3:50070/ 结果如下:  

  27.   Overview 'master:9000' (active)  

  28.   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