前言
之前我们看过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>
|
只需要添加一句java的路径即可
export JAVA_HOME=/usr/local/src/jdk1.8.0_121
|
slaves
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>
|
只需要添加一句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上进行格式化
显示格式化成功后,我们启动master上的NameNode
sbin/hadoop-daemon.sh start namenode
|
启动成功后,在slave1上进行元数据的同步
在slave1的hadoop文件夹下输入
bin/hdfs namenode -bootstrapStandby
|
如图显示同步成功后:
把master上的NameNode关闭
关闭master上的NameNode后,我们还需要初始化zookpeeper的状态
我们看到如图所示的时候代表初始化成功:
测试
当我们上面的步骤都完成后,我们可以开始启动集群进行测试HA环境的搭建是否成功
先在master上启动所有节点
之后我们还需要手动启动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搭建到这里就结束了,如果有误欢迎大家指正,感谢大家的阅读.