Hadoop部署(HA)高可用集群

发布于:2025-06-23 ⋅ 阅读:(18) ⋅ 点赞:(0)

一、准备工作

1.把集群全部停掉

在三台节点上都做(在xshell通过右键----> 发送输入到--->所有会话)

2..在/export/servers下创建HA目录

sudo mkdir -p /export/servers/HA

3.创建用户和设置所属主和所属组

#创建用户
sudo adduser ygre
#设置密码
sudo passwd ygre
# 创建用户组
sudo chown ygre:ygre HA

 4.将原hadoop拷贝到/export/servers/HA下(在hadoop1上即可--后面会分发)

cp -r /export/servers/hadoop /export/servers/HA

 5.将/export/servers/HA下的hadoop里面的data logs 和/tmp/* 全部删除

rm -rf data logs
sudo rm -rf /tmp/*

6.配置环境变量(将指向/export/servers/hadoop 修改成指向/export/servers/HA/hadoop)

sudo vi /etc/profile
# 修改
export HADOOP_HOME=/export/servers/HA/hadoop
# 保存退出
:wq
#初始化环境变量
source /etc/profile

 7.分发环境变量

#将系统环境变量文件分发至虚拟机Hadoop2的/etc目录
scp /etc/profile root@hadoop2:/etc 
#将系统环境变量文件分发至虚拟机Hadoop3的/etc目录
scp /etc/profile root@hadoop3:/etc 
# 分别在hadoop2和hadoop3中初始化环境变量
source /etc/profile 
# 每台节点一定要验证
echo $HADOOP_HOME

 二、配置HDFS

1.配置core-site.xml

<configuration>
  <!-- 默认文件系统地址(HA 集群逻辑名称) -->
  <property>
    <name>fs.defaultFS</name>
    <value>hdfs://mycluster</value>
  </property>

  <!-- Hadoop 临时目录 -->
  <property>
    <name>hadoop.tmp.dir</name>
    <value>/export/servers/HA/hadoop/data</value>
  </property>

  <!-- ZooKeeper 集群地址 -->
  <property>
    <name>ha.zookeeper.quorum</name>
    <value>hadoop1:2181,hadoop2:2181,hadoop3:2181</value>
  </property>

  <!-- 启用自动故障转移 -->
  <property>
    <name>dfs.ha.automatic-failover.enabled</name>
    <value>true</value>
  </property>

  <!-- ZKFC 会话超时时间 -->
  <property>
    <name>ha.zookeeper.session-timeout.ms</name>
    <value>5000</value>
  </property>
</configuration>

2. 配置hdfs-site.xml

注意:在hadoop2.x中只能有两个NameNode,但是在hadoop3.x中可以有无限个

<configuration>
     <!-- NameNode数据存储目录 -->
  <property>
    <name>dfs.namenode.name.dir</name>
    <value>file://${hadoop.tmp.dir}/name</value>
  </property>

  <!-- DataNode数据存储目录 -->
  <property>
    <name>dfs.datanode.data.dir</name>
    <value>file://${hadoop.tmp.dir}/data</value>
  </property>

  <!-- JournalNode数据存储目录 -->
  <property>
    <name>dfs.journalnode.edits.dir</name>
    <value>${hadoop.tmp.dir}/jn</value>
  </property>

  <!-- 完全分布式集群名称 -->
  <property>
    <name>dfs.nameservices</name>
    <value>mycluster</value>
  </property>

  <!-- 集群中NameNode节点都有哪些 -->
  <property>
    <name>dfs.ha.namenodes.mycluster</name>
    <value>nn1,nn2</value>
  </property>

  <!-- NameNode的RPC通信地址 -->
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    <value>hadoop1:8020</value>
  </property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    <value>hadoop2:8020</value>
  </property>
  <!-- NameNode的http通信地址 -->
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1</name>
    <value>hadoop1:50070</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2</name>
    <value>hadoop2:50070</value>
  </property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn3</name>
    <value>hadoop3:50070</value>
  </property>

  <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
  <property>
    <name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/mycluster</value>
  </property>

  <!-- 访问代理类:client用于确定哪个NameNode为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.fencing.methods</name>
    <value>sshfence</value>
  </property>

  <!-- 使用隔离机制时需要ssh秘钥登录-->
  <property>
    <name>dfs.ha.fencing.ssh.private-key-files</name>
    <value>/home/ygre/.ssh/id_rsa</value>
  </property>
    <property>
		<name>dfs.ha.automatic-failover.enabled</name>
		<value>true</value>
	</property>
</configuration>

 三、配置YARN

1.配置yarn-site.xml

<configuration>
    <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>

    <!--指定resourcemanager的逻辑列表-->
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2,rm3</value>
    </property>
<!-- ========== rm1的配置 ========== -->
    <!-- 指定rm1的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop1</value>
    </property>

    <!-- 指定rm1的web端地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm1</name>
        <value>hadoop1:8088</value>
    </property>

    <!-- 指定rm1的内部通信地址 -->
    <property>
        <name>yarn.resourcemanager.address.rm1</name>
        <value>hadoop1:8032</value>
    </property>

    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm1</name>  
        <value>hadoop1:8030</value>
    </property>

    <!-- 指定供NM连接的地址 -->  
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
        <value>hadoop1:8031</value>
    </property>

<!-- ========== rm2的配置 ========== -->
    <!-- 指定rm2的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop2</value>
    </property>
    <property>
        <name>yarn.resourcemanager.webapp.address.rm2</name>
        <value>hadoop2:8088</value>
    </property>
    <property>
        <name>yarn.resourcemanager.address.rm2</name>
        <value>hadoop2:8032</value>
    </property>
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm2</name>
        <value>hadoop2:8030</value>
    </property>

    <property>
<name>yarn.resourcemanager.resource-tracker.address.rm2</name>
        <value>hadoop2:8031</value>
    </property>

<!-- ========== rm3的配置 ========== -->
    <!-- 指定rm1的主机名 -->
    <property>
        <name>yarn.resourcemanager.hostname.rm3</name>
        <value>hadoop3</value>
    </property>
    <!-- 指定rm1的web端地址 -->
    <property>
        <name>yarn.resourcemanager.webapp.address.rm3</name>
        <value>hadoop3:8088</value>
    </property>
    <!-- 指定rm1的内部通信地址 -->
    <property>
        <name>yarn.resourcemanager.address.rm3</name>
        <value>hadoop3:8032</value>
    </property>
    <!-- 指定AM向rm1申请资源的地址 -->
    <property>
        <name>yarn.resourcemanager.scheduler.address.rm3</name>  
        <value>hadoop3:8030</value>
    </property>

    <!-- 指定供NM连接的地址 -->  
    <property>
    <name>yarn.resourcemanager.resource-tracker.address.rm3</name>
        <value>hadoop3:8031</value>
    </property>

    <!-- 指定zookeeper集群的地址 --> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop1:2181,hadoop2:2181,hadoop3: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.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

四、运行HA高可用集群和查看WebUI

1.分发HA中的hadoop安装目录

#将Hadoop安装目录分发至虚拟机HA中的hadoop2中存放安装程序的目录
scp -r /export/servers/HA/hadoop root@hadoop2:/export/servers/HA
#将Hadoop安装目录分发至虚拟机HA中的hadoop3中存放安装程序的目录
scp -r /export/servers/HA/hadoop root@hadoop3:/export/servers/HA

 2.在(hadoop1,hadoop2,hadoop3)启动journalnode

  hdfs start journalnode     

3.在[hadoop1]上,对其进行格式化

hdfs namenode -format

 4.在hadoop2上同步元数据

hdfs namenode -bootstrapStandby

 5.启动Zookeeper

# 启动zookeeper
/export/servers/zookeeper/bin/zhServer.sh start
# 验证集群状态
/export/servers/zookeeper/bin/zhServer.sh status

输出Mode:leader或Mode:follwer 表示集群正常运行

6.启动HDFS服务和启动YARN服务

# 启动hdfs服务
start-dfs.sh
# 启动yarn服务
start-yarn.sh

7.验证

jps

 

 

 五、恢复到原来Hadoop集群

1.关闭所有服务

2.修改环境变量

sudo vi /etc/profile
# 修改
export HADOOP_HOME=/export/servers/hadoop
# 保存退出:
:wq
#初始化环境变量
source /etc/profile

3.分发环境变量

#将系统环境变量文件分发至虚拟机Hadoop2的/etc目录
scp /etc/profile root@hadoop2:/etc 
#将系统环境变量文件分发至虚拟机Hadoop3的/etc目录
scp /etc/profile root@hadoop3:/etc 
# 分别在hadoop2和hadoop3中初始化环境变量
source /etc/profile 
# 每台节点一定要验证
echo $HADOOP_HOME

 3.每台节点都需要删除/tmp/*

sudo rm -rf /tmp/*

4.启动原集群:

start-all.sh

 

 

 

 

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到