Hadoop2的HA安装(high availability):JournalNode+ zookeeper
前面介绍过使用NFS+zookeeper来解决namenode单点失败问题,因为NFS可能也会存在单点问题,所以hadoop提供了一种叫做JournalNode技术,这项技术可以在JournalNode节点间共享数据
我们来介绍这一种技术:JournalNode+ zookeeper
Hadoop 版本:2.6.0
OS 版本: Centos6.5
Jdk 版本: jdk1.7.0_60
环境配置
|
机器名 |
Ip地址 |
功能 |
| centos-one |
192.168.50.173 |
NameNode, DataNode, ResourceManager, NodeManager Zookeeper Zkfc JournalNode |
|
centos-two |
192.168.0.74 |
NameNode DataNode, NodeManager Zookeeper Zkfc JournalNode |
|
centos-three |
192.168.0.75 |
DataNode, NodeManager Zookeeper Zkfc JournalNode |
一、zookeeper配置
上传zookeeper-3.4.5.tar.gzdataDir=/home/hadoop/app/zookeeper-3.4.5/mydata
dataLogDir=/home/hadoop/app/zookeeper-3.4.5/logs
server.1=192.168.50.173:2888:3888
server.2=192.168.0.74:2888:3888
server.3=192.168.0.75:2888:3888
二、配置hadooper
sudo chown -R hadoop:hadoop hadoop-2.6.0
将 hadoop-2.6.0 的所有者与用户组改为hadoop
[hadoop@centos-one hadoop-2.6.0]$ cd /home/hadoop/app/hadoop-2.6.0/export JAVA_HOME=/usr/java/jdk1.7.0_60
修改JDK位置
[hadoop@centos-one hadoop-2.6.0]$ vi etc/hadoop/core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/app/hadoop-2.6.0/mydata/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/app/hadoop-2.6.0/mydata/journal</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>192.168.50.173:2181,192.168.0.74:2181,192.168.0.75:2181</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/home/hadoop/app/hadoop-2.6.0/mydata/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/home/hadoop/app/hadoop-2.6.0/mydata/data</value>
</property>
<property>
<name>dfs.datanode.hostname</name>
<value>192.168.50.173</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>centos-one,centos-two</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.centos-one</name>
<value>192.168.50.173:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.centos-one</name>
<value>192.168.50.173:50070</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.centos-two</name>
<value>192.168.0.74:9000</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.centos-two</name>
<value>192.168.0.74:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://192.168.50.173:8485;192.168.0.74:8485;192.168.0.75:8485/mycluster</value>
</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>/home/hadoop/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
[hadoop@centos-one hadoop-2.6.0]$ vi etc/hadoop/yarn-site.xml
<configuration>
<property>
<description>the valid service name</description>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<description>The hostname of the RM.</description>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.50.173</value>
</property>
</configuration>
[hadoop@centos-one hadoop-2.6.0]$ vi etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
[hadoop@centos-one hadoop-2.6.0]$ vi etc/hadoop/slaves
192.168.50.173
192.168.0.74
192.168.0.75
部署hadoop安装包
[hadoop@centos-one hadoop-2.6.0]$ mkdir -p mydata/name [hadoop@centos-one hadoop-2.6.0]$ mkdir -p mydata/data [hadoop@centos-one hadoop-2.6.0]$ mkdir -p mydata/tmp [hadoop@centos-one hadoop-2.6.0]$ mkdir -p mydata/journal [hadoop@centos-one hadoop-2.6.0]$ mkdir -p mydata/yarn [hadoop@centos-one hadoop-2.6.0]$ cd .. [hadoop@centos-one app]$ scp -r hadoop-2.6.0 centos-two:/home/hadoop/app/ [hadoop@centos-one app]$ scp -r hadoop-2.6.0 centos-three:/home/hadoop/app/
三、运行hadoop
启动zookeeper,在centos-one,centos-two, centos-three上运行
[hadoop@centos-one hadoop-2.6.0]$ /home/hadoop/app/zookeeper-3.4.5/bin/zkServer.sh start
在centos-one 格式化namenode和failovercontroler
[hadoop@centos-one hadoop-2.6.0]$ cd /home/hadoop/app/hadoop-2.6.0
failovercontroler格式化:
bin/hdfs zkfc -formatZK
启动各节点JournalNode [hadoop@centos-one hadoop-2.6.0]$ sbin/hadoop-daemon.sh start journalnode [hadoop@centos-two hadoop-2.6.0]$ sbin/hadoop-daemon.sh start journalnode [hadoop@centos-three hadoop-2.6.0]$ sbin/hadoop-daemon.sh start journalnode
在centos-one节点上运行:
bin/hdfs namenode -format -clusterid mycluster
在hadoop2节点上的namenode信息需要与hadoop1节点同步,不能通过简单的格式化做到,hadoop2节点上的namenode需要向hadoop1的namenode发送数据请求。因此我们还需要启动hadoop1上的namenode.
在centos-one上运行: bin/hdfs namenode
在centos-two上运行:bin/hdfs namenode -bootstrapStandby
最后关闭centos-one上的namenode,然后启动整个hadoop集群。
启动hadoop集群
[hadoop@centos-one hadoop-2.6.0]$ /home/hadoop/app/hadoop-2.6.0/sbin/start-all.sh
从图上可以看出,先启动namenode,再启动datanode, 再启动journalnode, 再启动ZK failover controller, 再启动resourcemanger, 最后启动nodemanager。

使用jps查看启动的进程
在centos-one上运行jps

在centos-two上运行jps

在centos-three上运行jps

查看namenode的状态
bin/hdfs haadmin -getServiceState centos-one

bin/hdfs haadmin -getServiceState centos-two

从图上可以看出hadoop2上的namenode处于active状态,而hadoop1上的namenode处于standby状态
这些信息也可以通过Hadoop的web界面得到。
在浏览器里输入:http://hadoop1:50070

在浏览器里输入:http://hadoop2:50070

参考:
http://www.cnblogs.com/easycloud/p/3724908.html
http://mmicky.blog.163.com/blog/static/150290154201401812127758/
浙公网安备 33010602011771号