Centos7 Hadoop3.x HA 高可用搭建教程
什么是HDFS高可用?
1.NameNode存在单点失效问题,如果NameNode失效了,那么所有的客户端和mapreduce均无法读写文件,因为NameNode是唯一存储元数据与文件到数据块映射的地方。HDFS高可用是配置了一对活动-备用(active-standby) 的NameNode,当活动的NameNode挂掉时,备用NameNode就会接管它的任务并开始服务于来自客户端的请求,不会有任何明显的中断。
Hadoop3.x高可用架构图
在这里解释一下每个角色:
1.NameNode:两个名称节点,有active和standby两种状态。
2.JournalNode:用于共享edits文件,不但会给standby主机发一份,自己也会存一份。借此来做元数据的实时热备,这里JN也是个集群。
3.Zookeeper:zookeeper究竟是怎么监控各个主机的状态的?答案是通过监测临时节点,当我们启动集群时,会向zookeeper中注射一个节点:hadoop-ha,每个namenode启动时都会向该节点下注射自己的临时节点信息,如果该节点信息消失,那么zookeepr就知道这台主机挂掉了。所以zookeeper在Hadoop HA环境下的主要任务是用来做主备切换。
4.失败恢复进程类(FailOverController):zookeeper一旦检测到有active主机挂掉,就会通知standby状态的主机中的该进程,把standby转换为active,继续进行服务。而已经挂掉的那台不能让它一直宕机,我们需要单独启动,启动后状态会由active转变为standby。
5.NodeManager:该进程为要启动的任务准备好运行环境,并且将启动命令写在一个脚本中来运行。NodeManager会通过心跳信息向ResourceManager汇报自己所在节点的资源使用情况。
6.ResourceManager:该进程完成整个集群的资源管理和调度。
7.从上可以看出,搭建一个完整的HA系统,最少要14台主机。
但是在这里我们使用三台虚拟机完成Hadoop HA的搭建
以下简单操作需自行完成:
1.这里默认你的三台虚拟机安装好jdk1.8配好环境变量并且可以使用。
2.要熟悉基本的linux操作。
3.安装好Hadoop-3.1.2配好环境变量。
4.安装好zookeeper-3.4.6。
5.给自己的三台主机host改名为master,slave1,slave2
(三台主机都要有环境)
Hadoop核心配置文件介绍
文件名称 | 描述 |
---|---|
hadoop-env.sh | 脚本中要用到的环境变量,以运行hadoop |
mapred-env.sh | 脚本中要用到的环境变量,以运行mapreduce(覆盖hadoop-env.sh中设置的变量) |
yarn-env.sh | 脚本中要用到的环境变量,以运行YARN(覆盖hadoop-env.sh中设置的变量) |
core.site.xml | Hadoop Core的配置项,例如HDFS,MAPREDUCE,YARN中常用的I/O设置等 |
hdfs-site.xml | Hadoop守护进程的配置项,包括namenode和datanode等 |
mapred-site.xml | MapReduce守护进程的配置项,包括job历史服务器 |
yarn-site.xml | Yarn守护进程的配置项,包括资源管理器和节点管理器 |
workers | 具体运行datanode和节点管理器的主机名称 |
1.hadoop-env.sh配置
在文件结尾处添加:
export JAVA_HOME=/usr/java/jdk1.8.0_221-amd64
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_ZKFC_USER=root
export HDFS_JOURNALNODE_USER=root
java_home配成你自己的路径即可。
2.core-site.xml配置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/utils/hadoopdata</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
<property>
<name>hadoop.http.staticuser.user</name>
<value>root</value>
</property>
</configuration>
ns是集群的名称,hadoop.tmp.dir是存储临时数据的目录,ha.zookeeper.quorum下要配置zookeeper集群:主机名:2181,2181是zookeeper的默认端口,不要改。
3.hdfs-site.xml配置
<configuration>
<!-- 与前面配置的匹配-->
<property>
<name>dfs.nameservices</name>
<value>ns</value>
</property>
<!--给两个namenode起别名nn1,nn2这个名字不固定,可以自己取 -->
<property>
<name>dfs.ha.namenodes.ns</name>
<value>nn1,nn2</value>
</property>
<!--nn1的rpc通信端口 -->