hadoop HA高可用搭建

hadoop HA高可用搭建

接上回hadoop概述二,我们了解到了hdfs有弊端,需要搭建HA,通过官网查看有2中方式进行高可用。一种基于QJM方式的,另一种基于联邦的,
我们今天先来使用QJM方案来做hadoop的高可用,使用4台服务器来做集群,还会用到zookeeper来做主备切换的调控

先说一下我们的IP分配和服务的规划信息

  • 节点和IP

    节点 IP
    ha01 192.168.56.20
    ha02 192.168.56.21
    ha03 192.168.56.22
    ha04 192.168.56.23
  • 服务规划

    节点 namenode namenode datanode zookeeper zkFC Journalnode
    ha01 * * *
    ha02 * * * * *
    ha03 * * *
    ha04 * *

修改4台服务器的/etc/hosts文件,追加IP和节点信息,HA集群需要用到ssh免密登录,这里免密登录有2中场景

  1. ha01控制执行hadoop脚本会用到免密登录到其他机器
  2. 两个namenode进行主备切换时需要登录到对方机器,杀死对方的相应进程,然后提升自己节点的为激活状态
vi /etc/hosts
192.168.56.20	ha01
192.168.56.21	ha02
192.168.56.22	ha03
192.168.56.23	ha04

保存退出后执行/etc/init.d/network restart ,生效hosts文件内容

安装zk

以前已写了安装zk教程,请查看之前的zookeeper集群安装的教程,本次需要安装的是ha02,ha03,ha04,切换成对应的机器信息即可

免密登录

我们使用的hadoop用户,所以我们就在hadoop用户的家目录下进行创建免密登录的信息,其他3台相同操作

[hadoop@ha01 ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[hadoop@ha01 ~]$ ssh-copy-id ha01          ##复制公钥信息到authorized_keys中

配置hadoop信息

  • hadoop.env.sh
cd /bigdata/install/hadoop-3.1.4/etc/hadoop/
vi hadoop.env.sh

找到JAVA_HOME和HADOOP_HOME,对该配置项进行编辑,并去掉注释符
JAVA_HOME=/bigdata/install/jdk1.8.0_141
HADOOP_HOME=/bigdata/install/hadoop-3.1.4
  • core-site.xml
vi core-site.xml
<configuration>
	<property>
	  <name>fs.defaultFS</name>
	  <value>hdfs://mycluster</value>
	</property>
	<!--  hadoop临时目录 -->
	<property>
	    <name>hadoop.tmp.dir</name>
	    <value>/bigdata/install/hadoop-3.1.4/hadoopDatas/tempDatas</value>
	</property>
	<!--  zk 集群信息 -->
	 <property>
	   <name>ha.zookeeper.quorum</name>
	   <value>ha02:2181,ha03:2181,ha04:2181</value>
	 </property>
	<!--  缓冲区大小,实际工作中根据服务器性能动态调整;默认值4096 -->
	<property>
	    <name>io.file.buffer.size</name>
	    <value>4096</value>
	</property>
</configuration>
  • hdfs-site.xml
<configuration>
	<property>
	  <name>dfs.nameservices</name>
	  <value>mycluster</value>
	</property>
	<property>
	  <name>dfs.ha.namenodes.mycluster</name>
	  <value>nn1,nn2</value>
	</property>
	<property>
	  <name>dfs.namenode.rpc-address.mycluster.nn1</name>
	  <value>ha01:8020</value>
	</property>
	<property>
	  <name>dfs.namenode.rpc-address.mycluster.nn2</name>
	  <value>ha02:8020</value>
	</property>
	<property>
	  <name>dfs.namenode.http-address.mycluster.nn1</name>
	  <value>ha01:9870</value>
	</property>
	<property>
	  <name>dfs.namenode.http-address.mycluster.nn2</name>
	  <value>ha02:9870</value>
	</property>
	<property>
	  <name>dfs.namenode.shared.edits.dir</name>
	  <value>qjournal://ha01:8485;ha02:8485;ha03:8485/mycluster</value>
	</property>
	<property>
	  <name>dfs.journalnode.edits.dir</name>
	  <value>/bigdata/install/hadoop-3.1.4/hadoopDatas/journal</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.replication</name>
	    <value>3</value>
	</property>
	<property>
	    <name>dfs.permissions.enabled</name>
	    <value>false</value>
	</property>
	<property>
	    <name>dfs.blocksize</name>
	    <value>134217728</value>
	</property>
</configuration>
  • yarn-site.xml
<configuration>
	<property>
	  <name>yarn.resourcemanager.ha.enabled</name>
	  <value>true</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.cluster-id</name>
	  <value>cluster1</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.ha.rm-ids</name>
	  <value>rm1,rm2</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.hostname.rm1</name>
	  <value>ha01</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.hostname.rm2</name>
	  <value>ha02</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.webapp.address.rm1</name>
	  <value>ha01:8088</value>
	</property>
	<property>
	  <name>yarn.resourcemanager.webapp.address.rm2</name>
	  <value>ha02:8088</value>
	</property>
	<property>
	  <name>hadoop.zk.address</name>
	  <value>ha02:2181,ha03:2181,ha04:2181</value>
	</property>
  <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value>
  </property>
  <!-- 如果vmem、pmem资源不够,会报错,此处将资源监察置为false -->
  <property>
      <name>yarn.nodemanager.vmem-check-enabled</name>
      <value>false</value>
  </property>
  <property>
      <name>yarn.nodemanager.pmem-check-enabled</name>
      <value>false</value>
  </property>
</configuration>
  • works
vi works,works里面表示的datanode节点的名称,我们这里是ha02-ha04
ha02
ha03
ha04

注意
由于我们在安装centos7的时候选择了最小化安装,默认是不安装psmics。但在ZKFC中会使用到里面的命令来进行主从切换,否则切换失败,所以需安装psmisc
yum -y install psmisc
简短说明,包含fuser,killall,pstree三个程序

fuser 显示使用指定文件或者文件系统的进程的PID。
killall 杀死某个名字的进程,它向运行指定命令的所有进程发出信号。
pstree 树型显示当前运行的进程。

集群启动验证

  1. 启动zookeeper集群
    由于我们在ha02/ha03/ha04安装zookeeper,启动是在这3台进行
    zkServer.sh start

2.启动journalnode
JN我们规划是在ha01/ha02/ha03,在这3台分别执行
hadoop-daemon.sh start journalnode

3.格式化namenode,启动主从namenode
格式化是hdfs中namenode第一次启动时要进行的操作,这里做了集群后是2个namenode,挑选一台,比如我们选的是ha01
ha01执行 hdfs namenode -format
启动主从namenode,
在ha01执行 hadoop-daemon.sh start namenode

在ha02执行 hdfs namenode -bootstrapStandby

4.格式化zk
在启动ZKFC时需要依赖zookeeper集群,上边已启动集群,对zookeeper集群格式化
在ha01执行 hdfs zkfc -formatZK

5.启动其他服务
现在就可以启动其他服务了,我们在ha01执行 start-dfs.sh

然后在4台机器上输入jps查看是否是我们规划的服务信息

posted @ 2021-03-28 10:55  Tenic  阅读(110)  评论(0编辑  收藏  举报