搭建HadoopHA高可用集群详细配置教程

一、前言

  • 所谓HadoopHA高可用集群就是要消灭单点故障问题,实现7 * 24小时无间断提供服务。
  • 当然想到搭建高可用前提示会搭建hadoop的分布式,最起码也要熟练搭建伪分布式。
  • 想要实现自动故障转移,需要借助Zookeeper来实现管理和检查节点的健康状态。也就是需要会搭建Zookeeper集群,本次搭建我就不在演示搭建zookeeper集群了,如果还不熟悉参考我之前的博客。https://blog.youkuaiyun.com/qq_44719527/article/details/104671380
  • 如果伪分布式还不熟悉参考(包括修改主机名,修改hosts文件,解压)https://blog.youkuaiyun.com/qq_44719527/article/details/104560392
  • 需要免密登录,详见https://blog.youkuaiyun.com/qq_44719527/article/details/104670797

二、搭建环境版本和环境说明

1.使用linuxCentOS6.10(三台)
2.hadoop2.7.2,jdk1.8.0_144
3.zookeeper3.0.4
4.Xshell5

三、搭建步骤

1.首先当然是上传压缩包,解压就不演示了。。。
2.关闭防火墙,修改静态ip,更改主机名,三台都需要修改。然后重启
3.更改/ect/hosts文件,三台都需要同样的配置
节点有几台就配几台的IP和主机名映射

192.168.25.134 hadoop102
192.168.25.135 hadoop103
192.168.25.136 hadoop104

在这里插入图片描述
4.保证zookeeper集群是启动没问题的,地址https://blog.youkuaiyun.com/qq_44719527/article/details/104671380
在这里插入图片描述
5.配置高可用的HDFS
(1)去修改core-site.xml

<!-- 把两个NameNode)的地址组装成一个集群mycluster -->
		<property>
			<name>fs.defaultFS</name>
        	<value>hdfs://mycluster</value>
		</property>

		<!-- 指定hadoop运行时产生文件的存储目录 -->
		<property>
			<name>hadoop.tmp.dir</name>
			<value>/opt/ha/hadoop-2.7.2/data/tmp</value>
		</property>
	<!--zookeeper配置-->
	<property>
      <name>ha.zookeeper.quorum</name>
      <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
	</property>

(2)修改hdfs-site.xml,这里注意使用隔离机制时需要ssh无秘钥登录,我这里是root用户,你是什么用户,就写你的用户名。注意修改主机名与你自己的对应了。

<property>
		<name>dfs.replication</name>
		<value>1</value>
	</property>
	<!-- 完全分布式集群名称 -->
	<property>
		<name>dfs.nameservices</name>
		<value>mycluster</value>
	</property>
	<!-- 集群中NameNode节点都有哪些 -->
	<property>
		<name>dfs.ha.namenodes.mycluster</name>
		<value>nn1,nn2</value>
	</property>
	<!-- nn1的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.nn1</name>
		<value>hadoop102:9000</value>
	</property>
	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
		<value>hadoop103:9000</value>
	</property>

	<!-- nn1的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.mycluster.nn1</name>
		<value>hadoop102:50070</value>
	</property>
	<!-- nn2的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.mycluster.nn2</name>
		<value>hadoop103:50070</value>
	</property>
	<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
	</property>
	<!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
	<property>
		<name>dfs.ha.fencing.methods</name>
		<value>sshfence</value>
	</property>
	<!-- 使用隔离机制时需要ssh无秘钥登录-->
	<property>
		<name>dfs.ha.fencing.ssh.private-key-files</name>
		<value>/root/.ssh/id_rsa</value>
	</property>
	<!-- 声明journalnode服务器存储目录-->
	<property>
		<name>dfs.journalnode.edits.dir</name>
		<value>/opt/ha/hadoop-2.7.2/data/jn</value>
	</property>
	<!-- 关闭权限检查-->
	<property>
		<name>dfs.permissions.enable</name>
		<value>false</value>
	</property>
	<!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
	<property>
  		<name>dfs.client.failover.proxy.provider.mycluster</name>
	<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
	</property>
		<!--自动故障转移开启-->
	<property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>

(3)修改hadoop.env.xml,填写jdk的路径
在这里插入图片描述
(4)修改yarn.site.xml,注意修改主机名与你自己的对应了。

<!-- reducer获取数据的方式 -->
	<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>hadoop102</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop103</value>
    </property>
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop102:2181,hadoop103:2181,hadoop104: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>
	<!--配置日志聚集功能使用-->
	  <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
     </property>
	 <!--日志保留时间7天-->
     <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
	</property>

(5)修改yarn.env.xml,添加jdk的路径,
在这里插入图片描述
(6)打开slaves添加节点主机名,不需要ip,注意修改主机名与你自己的对应了。在这里插入图片描述
(7)复制mapred.site.xml.template 文件名是mapred.site.xml,注意修改主机名与你自己的对应了。

<!-- 指定mr运行在yarn上 -->
	<property>
		<name>mapreduce.framework.name</name>
		<value>yarn</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.address</name>
		<value>hadoop102:10020</value>
	</property>
	<property>
		<name>mapreduce.jobhistory.webapp.address</name>
		<value>hadoop102:19888</value>
	</property>

(8)打开mapred.env.xml添加jdk路径
在这里插入图片描述
(9)分发给其他节点,这里就需要时候ssh免密登录了,如果不设置免密,需要一直输入密码。还有启动的时候,会麻烦死。
1)可以使用分发,这个是适合我的脚本,对脚本不熟悉的可以使用scp

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=102; host<105; host++)); do
        #echo $pdir/$fname $user@hadoop$host:$pdir
        echo --------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

2)分发完去其他节点查看一下有没有,是否分发成功

四、启动

1.先启动journalnode,三台都需要启动

sbin/hadoop-daemon.sh start journalnode

在这里插入图片描述
2.在[nn1]上,对其进行格式化,并启动

(1)格式化命令,只是第一次需要,以后启动不再需要格式化。

bin/hdfs namenode -format

(2)启动namenode

sbin/hadoop-daemon.sh start namenode

在这里插入图片描述
3.在[nn2]上,同步nn1的元数据信息

bin/hdfs namenode -bootstrapStandby

4.如果两个namenode都能手动起来说明配置八成没有问题,现在把两个namenode都关闭

sbin/hadoop-daemon.sh stop namenode

5.初始化HA在Zookeeper中状态

bin/hdfs zkfc -formatZK

6.启动hdfs服务

sbin/start-dfs.sh

在这里插入图片描述
7.启动yarn进程,这个脚本只能启动一个resourcemanager

sbin/start-yarn.sh

在这里插入图片描述
8.发现只有一个resourcemanager,我们需要手动开启nn2节点上的resourcemanager

sbin/yarn-daemons.sh start resourcemanager

在这里插入图片描述

五、遇到的问题和注意事项

1.格式化只需要第一次启动的时候格式化,以后启动不需要了
2.zookeeper集群一定保证正常开启且是第一个开启的。
3.注意ip和主机名的映射不要写错,最好是配置静态ip
4.如果多次格式化了 ,需要删掉 临时目录和日志文件在格式化。如果不删,namenode八成起不来
5.防火墙一定要关闭或开放端口。
6.其他问题私信博主

写作不易,如果对您有所帮助,请给一个小小的赞,您的点赞是对我莫大的支持和鼓励,谢谢!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值