利用zookeeper来实现namanode的高可用(HA)(第二篇,接上篇)
?
?
机器设备:为了叙述方面 采用nodeX的形式来表示主机名
192.168.159.31(node1) ? ? ? ? ? ? ? ?Namenode
?
192.168.159.32(node2) zookeeper ? ? ?Datanode ? ? JN(JournalNode)
??
192.168.159.33(node3) zookeeper ? ? ?Datanode ? ? JN
?
192.168.159.34(node4) zookeeper ? ? ?Datanode ? ? JN
?
192.168.159.35(node5) ? ? ? ? ? ? ? ?Namenode
?
第一步:
1:zookeeper环境已经搭好,并启动
2:hadoop在.bash_profile已经配置好
3:hadoop-env.sh JAVA_HOME已经配置好
?
第二步:
?
node1可以免密登录到node2,node3,node4,node5;
node5可以免密登录到node1
?
具体怎么做我不做解释,很简单的
?
第三步:
?
在node1上配置hadoop然后 scp到其他主机上即可?
?
vim hdfs-site.xml ?(汉字不要复制)
?
<property>
<name>dfs.nameservices</name> ?#集群名字 唯一标识
<value>mycluster</value>
</property>
?
<property>
<name>dfs.ha.namenodes.mycluster</name> ?#namenode 两个
<value>nn1,nn2</value>
</property>
?
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name> #第一个namenode在哪
<value>node1:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name> ?#第二个namenode在哪
<value>node5:8020</value>
</property>
?
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name> ?#页面访问 第一个namenode
<value>node1:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name> ?#页面访问 第二个namenode
<value>node5:50070</value>
</property>
?
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://node2;node3;node4/mycluster</value> ?#JN在哪几台主机上
</property>
?
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
?
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
?
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
?
?
第四步:
?
vim core-site.xml
?
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop</value>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/JN</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>node2:2181,node3:2181,node4:2181</value> ?#zookeeper部署在哪几台主机
</property>
?
?
?
?
第五步:
?
把node1上配置好的hadoop scp到node2...node5上
?
第六步:
?
在node2,node3,node4上执行: (这是第一次运行环境的时候需要,为hdfs namenode -format做准备)
?
hadoop-daemon.sh start journalnode
?
第七步:
?
在任意一个namenode节点上运行.比如在node1上
?
hdfs namenode -format
?
成功之后执行
?
hadoop-daemon.sh start namenode 启动节点
?
在node5上执行
?
hdfs namenode -bootstrapStandby
?
然后在node5上启动namenode
?
hadoop-daemon.sh start namenode 启动节点
?
第七步的作用是:首先在一个节点上格式化namenode,然后把元数据fsimage复制到另一个namenode节点上
?
最后:
?
在node1上执行: stop-dfs.sh
?
全面启动:stop-dfs.sh?
?
?
验证:
?
1:利用jps检验是否成功:
?
node1,node5
?
7512 DFSZKFailoverController
7745 Jps
7626 NameNode
?
node2,node3,node4
?
3165 Jps
2931 QuorumPeerMain (zookeeper进程)
3068 JournalNode ? (JN进程)
2983 DataNode
?
2:页面验证
?
192.168.159.31:50070
192.168.159.35:50070
?
这两个中一个是active,另一个是standby
?
然后把active的进程kill掉,就可以看到原先是standby的变为了active了
?
?
?
这样就表示成功啦.
利用zookeeper来实现namanode的高可用(HA)(第二篇)
原文:http://indinna.iteye.com/blog/2286656