前言

之前我们看过Hadoop的HA配置,大概对于HA的配置有了一些了解,我们现在开始从头搭建Hadoop的HA环境

修改配置文件

我们HA的搭建要修改hadoop下的几个文件,主要有:

core-site.xml

hdfs-site.xml

hadoop-env.sh

slaves

yarn-site.xml

yarn-env.sh

mapred-site.xml

本文基本以改配置文件为主,在Hadoop的HA配置前,zookpeeper一定要先配好

core-site.xml

<property>
<name>fs.defaultFS</name>
<value>hdfs://myhadoop</value>
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp</value>
</property>

<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>

hdfs-site.xml

<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<property>
<name>dfs.name.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/name</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/data</value>
</property>


<property>
<name>dfs.nameservices</name>
<value>myhadoop</value>
</property>

<property>
<name>dfs.ha.namenodes.myhadoop</name>
<value>nn1,nn2</value>
</property>

<property>
<name>dfs.namenode.rpc-address.myhadoop.nn1</name>
<value>master:9000</value>
</property>

<property>
<name>dfs.namenode.rpc-address.myhadoop.nn2</name>
<value>slave1:9000</value>
</property>

<property>
<name>dfs.namenode.http-address.myhadoop.nn1</name>
<value>master:50070</value>
</property>

<property>
<name>dfs.namenode.http-address.myhadoop.nn2</name>
<value>slave1:50070</value>
</property>

<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;slave1:8485;slave2:8485/myhadoop</value>
</property>

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/usr/local/src/hadoop-2.6.0/tmp/jn</value>
</property>

<property>
<name>dfs.ha.fencing.methods</name>
<value>shell(/bin/true)</value>
</property>

<property>
<name>dfs.ha.fencing.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>

<property>
<name>dfs.permissions.enable</name>
<value>false</value>
</property>

<property>
<name>dfs.client.failover.proxy.provider.myhadoop</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>



hadoop-env.sh

只需要添加一句java的路径即可

export JAVA_HOME=/usr/local/src/jdk1.8.0_121

slaves

master
slave1
slave2

yarn-site.xml

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

<!--启用resourcemanager ha-->
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>

<!--声明两台resourcemanager的地址-->
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster-yarn1</value>
</property>

<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>

<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>master</value>
</property>

<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slave1</value>
</property>

<!--指定zookeeper集群的地址-->
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>

<!--启用自动恢复-->
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>

<!--指定resourcemanager的状态信息存储在zookeeper集
群-->
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

yarn-env.sh

只需要添加一句java的路径即可

export JAVA_HOME=/usr/local/src/jdk1.8.0_121

mapred-site.xml

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>

<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>

如何开启HA

当我们的配置文件改好后,保证zookpeeper的启动

之后我们先在各节点上启动journalnode,保证journalnode启动成功后,在主节点master上进行格式化

hdfs namenode -format

mark

显示格式化成功后,我们启动master上的NameNode

sbin/hadoop-daemon.sh start namenode

启动成功后,在slave1上进行元数据的同步

在slave1的hadoop文件夹下输入

bin/hdfs namenode -bootstrapStandby

如图显示同步成功后:

mark

把master上的NameNode关闭

关闭master上的NameNode后,我们还需要初始化zookpeeper的状态

bin/hdfs zkfc -formatZK

我们看到如图所示的时候代表初始化成功:

mark

测试

当我们上面的步骤都完成后,我们可以开始启动集群进行测试HA环境的搭建是否成功

先在master上启动所有节点

sbin/start-all.sh

之后我们还需要手动启动jobhistoryserver

sbin/mr-jobhistory-daemon.sh start historyserver 

然后在slave1上我们还布置了一个resourcemanager,这个也是在start-all.sh时无法启动,我们需要在slave1下自行启动

在slave1的hadoop目录下,执行

sbin/yarn-daemon.sh start resourcemanager

这就是启动HadaoopHA上要启动的节点,测试基本与上一篇的测试环节基本一致,都是手动kill节点,然后在web端查看故障能否自动转移即可

本次的HA搭建到这里就结束了,如果有误欢迎大家指正,感谢大家的阅读.