hadoop的高可用搭建

HA集群的搭建可以在完全分布式的基础上搭建

目的:

减少单点故障的发生

规划配置图

NN1 NN2 DN zK ZKFC JNN RM
hadoop100 * * * * * *
hadoop101 * * * * * *
hadoop102 * * *

图中的 NN、DN、ZK、ZKFC、JNN、RM是以下简称
NN: NameNode
DN:DataNode
ZK:Zookeeper
ZKFC:Zookeeper客户端
JNN:Journalnode
RM:Resourcemanager

准备工作
1、配置时间同步服务器(可选操作)
所有节点都执行

yum  -y  install ntp
ntpdate ntp1.aliyun.com

2、配置好各个主机的映射(不懂自行百度解决)

3、免密登录
所有节点都执行

ssh-keygen-t rsa   //生成密钥  中途停下询问的一直按回车到执行成功为止
ssh-copy-id hadoop101 //发送公钥到其他节点上

4、设置关闭防火墙

systemctl stop firewalld.service //暂时关闭
systemctl disable firewalld.service //永久关闭

正式开始搭建Hadoop集群的高可用

安装jdk(如果是最小化安装Centos的默认是没有jdk的直接安装解压就好,图形化安装的需要卸载原来的jdk才能安装)

解压hadoop安装包

tar xf hadoop2.7.7... -C /module/ha/

进入hadoop的配置文件目录

cd /module/ha/hadoop/etc/hadoop

三个 (hadoop、yarn、mapred) -env.sh的文件,找到JAVA_HOME 设置jdk的安装路径
在这里插入图片描述

配置core-site.xml

vi core-site.xml
<!-- 设置hdfs的nameservice服务 名称自定义 -->
  <property>
     <name>fs.defaultFS</name>
     <value>hdfs://mycluster</value>
  </property>

<!-- 设置hadoop的元数据存放路径 -->
  <property>
     <name>hadoop.tmp.dir</name>
     <value>/moudle/ha/hadoop/data</value>
  </property>
  
<!-- 指定zookeeper地址 -->
  <property>
     <name>ha.zookeeper.quorum</name>
     <value>hadoop100:2181,hadoop101:2181,hadoop102:2181</value>
  </property>

vi hdfs-site.xml

	<!-- 完全分布式集群名称 -->
	<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>hadoop100:9000</value>
	</property>

	<!-- nn2的RPC通信地址 -->
	<property>
		<name>dfs.namenode.rpc-address.mycluster.nn2</name>
		<value>hadoop101:9000</value>
	</property>

	<!-- nn1的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.mycluster.nn1</name>
		<value>hadoop100:50070</value>
	</property>

	<!-- nn2的http通信地址 -->
	<property>
		<name>dfs.namenode.http-address.mycluster.nn2</name>
		<value>hadoop101:50070</value>
	</property>

	<!-- 指定NameNode元数据在JournalNode上的存放位置 -->
	<property>
		<name>dfs.namenode.shared.edits.dir</name>
	<value>qjournal://hadoop100:8485;hadoop101:8485;hadoop102: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>/module/ha/hadoop/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>
    <!--设置开启HA故障自动转移-->
    <property>
	    <name>dfs.ha.automatic-failover.enabled</name>
	    <value>true</value>
    </property>

配置mapred-site.xml

vi mapred-site.xml

增加以下配置

<!-- 指定mr框架为yarn方式 -->
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>

配置yarn-site.xml(可选配置)

vi 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>hadoop100</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop101</value>
    </property>
 
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop100:2181,hadoop101:2181,hadoop102: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>

配置slaves

vi slaves
hadoop100
hadoop101
hadoop102

配置完了分发到所有的节点上

scp –r -p /usr/local/hadoop/ root@master2:/usr/local/

Zookeeper安装

解压文件

tar xf 文件名  -C 存放路径

自行好配置环境变量

修改conf目录下的zoo_sample.cfg

mv  zoo_sample.cfg  zoo.cfg
vi  zoo.cfg

设置zk的存放元数据存放的路径

dataDir=/module/zookeeper/zk  

在文件最下面增加以下数据

Server.1=hadoop100:2888:3888
Server.2=hadoop101:2888:3888
Server.3=hadoop102:2888:3888

修改zookeeper生成logs的位置可以不修改

vi bin/zkEnv.sh

在这里插入图片描述
修改第二个箭头指向的路径到自已想存放的地方

创建出zk的存放元数据存放路径的文件

mkdir  /module/zookeeper/zk

分发zookeeper文件到所有配置zookeeper的节点上
在不同节点写入对应的id

echo  1 > /module/zookeeper/zk/myid   # hadoop100节点上:

在ZooKeeper集群的每个节点上,执行启动ZooKeeper服务的脚本

zkServer.sh start 

部署细节
1、必须先启动journalnode

hadoop-daemons.sh start journalnode

2、选择其中的一台是配置NN的节点上执行hadoop格式化

bin/hdfs namenode –format

3、选择一台NN启动namenode

sbin/hadoop-daemon.sh start namenode

4、在另一台NN节点上执行数据同步

bin/hdfs namenode -bootstrapStandby

5、在其中的一台NN上执行zkfc格式化

bin/hdfs zkfc –formatZK

在其中NN上启动hadoop集群

sbin/start-dfs.sh

使用jps命令查看各个节点上是否有以下节点
在这里插入图片描述
至此hadoop的HA集群完成!!!!

开启的RM的HA 在配置有RM节点上执行

sbin/start-yarn.sh

在另一台配置也有RM的节点上执行

sbin/yarn-daemon.sh start resourcemanager

查看所有节点有以下节点至此 RM的HA集群配置成功!!!!!!
在这里插入图片描述

常用的命令 NameNode进程启动:hadoop-daemon.sh start namenode
DataNode进程启动:hadoop-daemon.sh start datanode

HA高可用环境中需要启动的进程: zookeeper: zkServer.sh start 启动 zkServer.sh stop 停止
zkServer.sh status 查看状态 leader follwer

journalnode集群命令 hadoop-daemon.sh start journalnode 启动 hadoop-daemon.sh
stop journalnode 停止

ZKFC 格式化:hdfs zkfc -formatZK 启动zkfc进程: hadoop-daemon.sh start zkfc
停止zkfc进程: hadoop-daemon.sh stop zkfc

NameNode数据同步命名:hdfs namenode -bootstrapStandby

启动yarn的进程:

yarn-daemon.sh start resourcemanager

模拟故障转移自动切换主备NN状态

  1. 使用jps查看namenode进程id
jps
  1. 停止namenode进程
 kill -9 namenode的进程id

然后查看两个namenode的web页面查看状态是否切换过来
3. 重新启动namenode进程:

  hadoop-daemon.sh start namenode
发布了39 篇原创文章 · 获赞 13 · 访问量 2314

猜你喜欢

转载自blog.csdn.net/qq_43205282/article/details/103433702