前言
传统的Hadoop集群从,由于只存在一个NameNode,一旦这个唯一的NameNode发生故障,就会导致整个集群变得不可用,也就是常说的“单点故障问题”,虽然存在Secondary NameNode,但是Secondary NameNode并不是NameNode的备用节点。在HDFS HA中,通过配置多个 NameNodes(Active/Standby)实现在集群中对 NameNode 的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将 NameNode 很快的切换到另外一台机器。
一、HA概述:
所谓 HA(High Availablity),即高可用(7*24 小时不中断服务)。实现高可用最关键的策略是消除单点故障。HA 严格来说应该分成各个组件的 HA 机制:HDFS 的 HA 和 YARN 的 HA。NameNode 主要在以下两个方面影响 HDFS 集群 ➢ NameNode 机器发生意外,如宕机,集群将无法使用,直到管理员重启 ➢ NameNode 机器需要升级,包括软件、硬件升级,此时集群也将无法使用
二、HDFS-HA 核心问题
怎么保证三台 namenode 的数据一致: a. Fsimage:让一台 nn 生成数据,让其他机器 nn 同步 b. Edits:需要引进新的模块 JournalNode 来保证 edtis 的文件的数据一致性怎么让同时只有一台 nn 是 active,其他所有是 standby 的:手动或自动分配2nn 在 ha 架构中并不存在,定期合并 fsimage 和 edtis 的活谁来干:由 standby 的 nn 来干如果 nn 真的发生了问题,怎么让其他的 nn 上位干活:手动或自动故障转移
三、HDFS HA 集群搭建
当前HDFS集群规划
hadoop102hadoop103hadoop104NameNodeSecondary NameNodeDataNodeDataNodeDataNode
HA 的主要目的是消除 namenode 的单点故障,需要将 HDFS 集群规划成以下模样
hadoop102hadoop103hadoop104NameNodeNameNodeNameNodeDataNodeDataNodeDataNode
HDFS-HA 手动模式
环境准备:
修改IP修改主机名及主机名和IP地址映射关闭防火墙ssh免密登录安装JDK,配置环境变量
规划集群
hadoop102hadoop103hadoop104NameNodeNameNodeNameNodeDataNodeDataNodeDataNodeJournalNodeJournalNodeJournalNode
配置HDFS-HA集群
1. 在 opt 目录下创建一个hadoopHA文件夹
[leon@hadoop102 ~]$ cd /opt
[leon@hadoop102 opt]$ sudo mkdir hadoopHA
[leon@hadoop102 opt]$ sudo chown leon:leon /opt/hadoopHA # 这里给用户赋权限
2. 将/opt/module/下的 hadoop-3.1.3 拷贝到/opt/hadoopHA 目录下,并删除data和log目录
[leon@hadoop102 opt]$ cp -r /opt/module/hadoop-3.1.3 /opt/hadoopHA/
3. 配置core-site.xml
4. 配置hdfs-site.xml(注意:在最后ssh部分将用户名改成自己的)
分发到其他节点
[leon@hadoop102 opt]$ xsync hadoopHA
启动 HDFS-HA 集群
将 HADOOP_HOME 环境变量更改到 HA 目录(三台机器)
[leon@hadoop102 ~]$ sudo vim /etc/profile.d/my_env.sh
将 HADOOP_HOME 部分改为如下
#HADOOP_HOME
export HADOOP_HOME=/opt/ha/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
在三台机器上source一下
[leon@hadoop102 ~]$source /etc/profile
在各个 JournalNode 节点上,输入以下命令启动 journalnode 服务
[leon@hadoop102 ~]$ hdfs --daemon start journalnode
[leon@hadoop103 ~]$ hdfs --daemon start journalnode
[leon@hadoop104 ~]$ hdfs --daemon start journalnode
在[nn1]上,对其进行格式化,并启动
[leon@hadoop102 ~]$ hdfs namenode -format
[leon@hadoop102 ~]$ hdfs --daemon start namenode
在[nn2]和[nn3]上,同步 nn1 的元数据信息
[leon@hadoop103 ~]$ hdfs namenode -bootstrapStandby
[leon@hadoop104 ~]$ hdfs namenode -bootstrapStandby
启动[nn2]和[nn3]
[leon@hadoop103 ~]$ hdfs --daemon start namenode
[leon@hadoop104 ~]$ hdfs --daemon start namenode
查看web页面显示
在所有节点上,启动 datanode
[leon@hadoop102 ~]$ hdfs --daemon start datanode
[leon@hadoop103 ~]$ hdfs --daemon start datanode
[leon@hadoop104 ~]$ hdfs --daemon start datanode
将[nn1]切换为 Active
[leon@hadoop102 ~]$ hdfs haadmin -transitionToActive nn1
11.查看是否Active
[leon@hadoop102 ~]$ hdfs haadmin -getServiceState nn1
HDFS-HA 自动模式
集群规划
hadoop102hadoop103hadoop104NameNodeNameNodeNameNodeDataNodeDataNodeDataNodeJournalNodeJournalNodeJournalNodeZookeeperZookeeperZookeeperZKFCZKFCZKFC
修改配置文件
在 hdfs-site.xml 中增加
在 core-site.xml 文件中增加
修改后分发配置文件
[leon@hadoop102 etc]$ xsync hadoop/ # 在/opt/ha/hadoop-3.1.3/etc目录下
启动
关闭所有 HDFS 服务:
[leon@hadoop102 ~]$ stop-dfs.sh
启动 Zookeeper 集群(ZK集群的安装部署可以看这篇):
[leon@hadoop102 ~]$ zkServer.sh start
[leon@hadoop103 ~]$ zkServer.sh start
[leon@hadoop104 ~]$ zkServer.sh start
启动 Zookeeper 以后,然后再初始化 HA 在 Zookeeper 中状态:
[leon@hadoop102 ~]$ hdfs zkfc -formatZK
启动 HDFS 服务
[leon@hadoop102 ~]$ start-dfs.sh
YARN-HA 配置(这个是在上述zk的基础上进行的)
修改配置文件:
yarn-site.xml
JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME
分发yarn-site.xml启动YARN
[leon@hadoop102 ~]$ start-yarn.sh # 在 hadoop102或者hadoop103中启动
查看服务状态
[leon@hadoop102 ~]$ yarn rmadmin -getServiceState rm1
web 端查看 hadoop102:8088 和 hadoop103:8088 的 YARN 的状态
HA集群最终配置
hadoop102hadoop103hadoop104NameNodeNameNodeNameNodeDataNodeDataNodeDataNodeJournalNodeJournalNodeJournalNodeZookeeperZookeeperZookeeperZKFCZKFCZKFCResourceManagerResourceManagerResourceManagerNodeManagerNodeManagerNodeManager
总结
以上就是今天要讲的内容,本文仅仅简单介绍了Hadoop HA集群的安装配置,是在Hadoop集群的基础上搭建的。本人太懒了,HA都写好了,Hadoop安装与部署还没补上/(ㄒoㄒ)/~~,这个坑会在后续填上。如果这篇文章对你有帮助的话,可以动动手指一键三连(bushi),谢谢同志们
参考文章
发表评论