首页 > 代码库 > hadoop 2.2 第二步 HA zookeeper 配置

hadoop 2.2 第二步 HA zookeeper 配置

    第一篇文章还有要修改的地方,现在我的集群已经扩展到5台(虚拟机)有些配置还要改,这一篇记录一下Hadoop HA 和zookeeper的配置,方便自己以后看。

    新的HDFS中的NameNode不再是只有一个了,可以有多个(目前只支持2个)。每一个都有相同的职能。

    在HDFS(HA) 集群中,Standby 节点还执行着对namespace 状态的checkpoint 功能,因此没有必要再运行SecondaryNameNode。

    这两个NameNode的地位如何:一个是active状态的,一个是standby状态的。当 集群运行时,只有active状态的NameNode是正常工作的,standby状态的NameNode是处于待命状态的,时刻同步active状态 NameNode的数据。一旦active状态的NameNode不能工作,通过手工或者自动切换,standby状态的NameNode就可以转变为 active状态的,就可以继续工作了。这就是高可靠。

    当NameNode发生故障时,他们的数据如何保持一致:在这里,2个NameNode的数据其实是实时共享的。新HDFS采用了一种共享机制,JournalNode集群或者NFS进行共享。NFS是操作系统层面的,JournalNode是hadoop层面的,我们这里使用JournalNode集群进行数据共享。

     如何实现NameNode的自动切换:这就需要使用ZooKeeper集群进行选择了。HDFS集群中的两个NameNode都在ZooKeeper中注册,当active状态的NameNode出故障时,ZooKeeper能检测到这种情况,它就会自动把standby状态的NameNode切换为active状态。

    

    先介绍一下环境:

ip地址主机名NameNodeJournalNodeDataNode
192.168.1.109hadoop1 
192.168.1.110hadoop2 
192.168.1.111hadoop3 
192.168.1.112hadoop4 
192.168.1.113hadoop5 

  zookeeper:

    1.下载解压,我放在了/usr/local/zookeeper下

    2.修改配置项,进入zookeeper的conf目录,拷贝命名zoo_sample.cfg 为zoo.cfg,然后修改其内容如下:

    

 1        tickTime=2000 2        initLimit=10 3        syncLimit=5 4        dataDir=/hadoop/zookeeper/zkdata 5        dataLogDir=/hadoop/zookeeper/zkdatalog 6        clientPort=2181 7        server.1=hadoop1:2888:3888 8        server.2=hadoop2:2888:3888  9        server.3=hadoop3:2888:388810        server.4=hadoop4:2888:388811        server.5=hadoop5:2888:3888    

 

    3.创建zkdata和zkdatalog两个文件夹和一个myid文件:

     创建/hadoop/zookeeper/zkdata 和 /hadoop/zookeeper/zkdatalog 如有不存在目录则创建。还有一个myid文件其内容为1  意思是zoo.cfg文本中的server.1中     的1。

    4.添加环境变量server.namenode.ha.ConfiguredFailoverProxyProviderserver.namenode.ha.ConfiguredFailoverProxyProvider

    export ZOOKEEPER_HOME=/usr/local/zookeeper 

    PATH=$ZOOKEEPER_HOME/bin:$PATH

    source /etc/profile

    5.这样子zookeeper就配置好了,scp拷贝到其他节点。

 

    然后就到了HA部分了

   1.修改core-site.xml

    server.namenode.ha.ConfiguredFailoverProxyProvider

 1 <configuration> 2     <property> 3         <name>fs.defaultFS</name> 4         <value>hdfs://mycluster</value> 5     </property> 6  7     <property> 8         <name>hadoop.tmp.dir</name> 9         <value>/hadoop/tmp</value>10     </property>11 12     <property>      13         <name>ha.zookeeper.quorum</name>      14       <value>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value>     15     </property>16 17 </configuration>

 

 

 

    2.修改hdfs-site.xml

     

 1 <configuration> 2     <property> 3         <name>dfs.nameservices</name> 4         <value>mycluster</value> 5     </property> 6  7     <property> 8         <name>dfs.ha.namenodes.mycluster</name> 9         <value>hadoop1,hadoop2</value>10     </property>11 12     <property>13         <name>dfs.namenode.secondary.http-address</name>14         <value>hadoop2:9001</value>15     </property>16 17     <property>18         <name>dfs.namenode.rpc-address.mycluster.hadoop1</name>19         <value>hadoop1:8020</value>20     </property>21 22     <property>23         <name>dfs.namenode.rpc-address.mycluster.hadoop2</name>24         <value>hadoop2:8020</value>25     </property>26 27     <property>28         <name>dfs.namenode.http-address.mycluster.hadoop1</name>29         <value>hadoop1:50070</value>30     </property>31 32     <property>33         <name>dfs.namenode.http-address.mycluster.hadoop2</name>34         <value>hadoop2:50070</value>35     </property>36 37     <property>38         <name>dfs.namenode.shared.edits.dir</name>39         <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485;hadoop4:8485;hadoop5:8485/mycluster</value>40     </property>41 42     <property>43         <name>dfs.client.failover.proxy.provider.mycluster</name>44         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>45     </property>46 47     <property>      48         <name>dfs.journalnode.edits.dir</name>49         <value>/hadoop/journal</value>50     </property>51 52     <property>      53         <name>dfs.ha.fencing.methods</name>54         <value>sshfence</value>55     </property>56 57     <property>      58         <name>dfs.ha.fencing.ssh.private-key-files</name>      59         <value>/root/.ssh/id_rsa</value>      60     </property>61 62     <property>  63         <name>dfs.ha.fencing.ssh.connect-timeout</name>  64         <value>10000</value>  65     </property>66 67     <property>  68         <name>dfs.namenode.handler.count</name>  69         <value>100</value>  70     </property>71 72     <property>73         <name>dfs.namenode.name.dir</name>74         <value>/hadoop/hdfs/name</value>75     </property>76 77     <property>78         <name>dfs.datanode.data.dir</name>79         <value>/hadoop/hdfs/data</value>80     </property>81 82     <property>83         <name>dfs.replication</name>84         <value>2</value>85     </property>86 87 </configuration>

    3.修改slaves

      hadoop3
      hadoop4
      hadoop5

    4.修改masters 没有则创建

      hadoop2

    

    现在所有配置就算全部完成了,如果从第一步中配置过来现在的就没有问题,来跑一跑吧。

    顺序不能乱。

    1.在每台机器上启动zookeeper,zkServer.sh start

    2.检查是否启动成功 echo ruok | nc hadoop1 2181

              echo ruok | nc hadoop2 2181

              echo ruok | nc hadoop3 2181

              echo ruok | nc hadoop4 2181

              echo ruok | nc hadoop5 2181

     若返回的imok则zookeeper是正常的。

     或者直接使用jps查看进程若有QuorumPeerMain的进程则启动正常。

    3.启动JournalNode集群

     分别在hadoop1,2,3,4,5上面执行命令  hadoop-daemon.sh start journalnode

    4.在hadoop1上格式化NameNode

      hadoop namenode -format

    5.启动这个NameNode

      hadoop-daemon.sh start namenode

    6.在Hadoo2上格式化NameNode

      hdfs namenode -bootstrapStandby

    7.启动hadoop2的NameNode

      hadoop-daemon.sh start namenode

    8.通过 http://hadoop1:50070,http://hadoop2:50070 查看这两个NameNode 现在都是standby状态

    9.切换hadoop1到active状态 hdfs haadmin -transitionToActive hadoop1

    10.启动DataNodes   hadoop-daemons.sh start datanode

hadoop 2.2 第二步 HA zookeeper 配置