Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

目录

一、目的及要求:

实验目的:

实验要求:

二、环境要求:

集群规划:

三、具体步骤:

项目一:Hadoop的基本安装配置

项目二:Hadoop高可用完全分布模式配置

项目三:同步安装和配置

项目四:Hadoop高可用完全分布模式格式化和启动

四、可能遇到的问题:


HA的架构

        Hadoop HA 即Hadoop的高可用,不同于普通的namenode+second namenode的模式,second namenode只能作为namenode的冷备份,当namenode挂掉后,second namenode不能自动充当namenode的角色。所以为了保证高可用性,就有了Hadoop HA的机制。

        hdfs HA中即有至少有两个namenode,这儿以两个namenode为例,一个可以对外提供服务的namenode成为active namenode,待命状态的namenode成为standby namenode。

 

1.如何做到两个namenode的元数据的一致性呢?

        将edits文件托管给稳定的第三方存放(当然,为了防止第三方挂掉,namenode本地的edits文件也是必要的),standby namenode就可以定时去第三方取edits文件放在内存中,做元素据的修改。这样就可以保证actice 和standby的数据一致性。

 

2.第三方用什么才能保证高可用?

        第三方用的是qjournal集群,集群就可以将edits文件存放在每个机器中。并且这个集群使用zookeeper作为集群的协调,保证数据写入一半以上的机器,才为写入成功。

 

3.怎么做到standby在active节点挂掉自动充当active的角色呢?

        这儿在每个namenode对应着一个监控进程ZKFC。在active上ZKFC使用RPC调用以判断active是否挂掉,如果挂掉,那么在zookeeper上将相应的节点删除(分布式锁),在Standby节点上的ZKFC进程就可以感知到节点删除的信息。Standby节点上的ZKFC进程感知到active节点挂掉的信息之后会向active节点发送一个杀死hdfs namenode的命令,确保active死亡,然后再向standby发送切换的指令,并向zookeeper创建节点。这样就可以让standby模式转换为active模式。

        对于resourceManager的HA,因为不存在数据的一致性,所以只需要向zookeeper创建节点(获得分布式锁)即可。

一、目的及要求:

实验目的:

      掌握完全分布模式的整合平台中Hadoop的完全分布模式的安装和验证

      Hadoop的高可用完全分布模式的安装和验证

实验要求:

  1. 完成 Hadoop的高可用完全分布模式的安装
  2. Hadoop的相关服务进程能够正常启动
  3. HDFS能够正常使用
  4. MapReduce示例程序能够正常运行

二、环境要求:

  1. 五*立的虚拟机
  2. 主机之间有有效的网络连接,并已完成网络属性配置
  3. 每台主机内存2G以上,磁盘50G
  4. 所有主机上已安装Centos 7.4_64操作系统
  5. 已完成Zookeeper集群的安装与部署
  6. 所有主机已安装JDK
  7. 软件版本:选用Hadoop的2.7.3版本,软件包名为hadoop-2.7.3.tar.gz

集群规划:

       ★Hadoop的高可用完全分布模式中有HDFS的主节点和数据节点、MapReduce的主节点和任务节点、数据同步通信节点、主节点切换控制节点总共6类服务节点,其中HDFS的主节点、MapReduce的主节点、主节点切换控制节点共用相同主机Cluster-01和Cluster-02,HDFS的数据节点、MapReduce的任务节点共用相同主机Cluster-03、Cluster-04、Cluster-05, 数据同步通信节点可以使用集群中的任意主机,但因为其存放的是元数据备份,所以一般不与主节点使用相同主机。

       ★高可用完全分布模式中需要满足主节点有备用的基本要求,所以需要两台或以上的主机作为主节点,而完全分布模式中需要满足数据有备份和数据处理能够分布并行的基本要求,所以需要两台或以上的主机作为HDFS的数据节点和MapReduce的任务节点, 同时数据同步通信节点工作原理同Zookeeper类似, 需要三台或以上的奇数台主机,

具体规划如下:

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

 

三、具体步骤:

项目一:Hadoop的基本安装配置

该项的所有操作步骤使用专门用于集群的用户admin下进行

此项只在一台主机主机操作,然后在下一步进行同步安装与配置

1:首先,Hadoop软件包“Hadoop-2.7.3.tar.gz”我们已经上传到用户家目录的“setups”目录下。然后进行解压和环境变量设置。

★创建用于存放Hadoop相关文件的目录,并进入该目录

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

★将软件包解压

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

2:进入 .bash_profile文件配置Hadoop相关的环境变量。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

3:使新配置的环境变量立即生效,查看新添加和修改的环境变量是否设置成功,以及环境变量值是否正确,并验证Hadoop的安装配置是否成功。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

项目二:Hadoop高可用完全分布模式配置

该项的所有操作步骤使用专门用于集群的用户admin下进行

1:进入Hadoop相关文件的目录,分别创建Hadoop的临时文件目录“tmp”、HDFS的元数据文件目录“name”、HDFS的数据文件目录“data”、Journal的逻辑状态数据目录“journal”。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

2:进入Hadoop的配置文件所在目录,对配置文件进行修改

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

3:进入core-site.xml修改配置文件

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

3:进入hdfs-site.xml修改配置文件

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

4:由模板文件拷贝生成配置文件“mapred-site.xml”

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

5:进入mapred-site.xml修改配置文件

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

6:进入yarn-env.sh修改配置文件

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

7:进入yarn-site.xml修改配置文件

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

8:进入slaves修改配置文件

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

项目三:同步安装和配置

该项的所有操作步骤使用专门用于集群的用户admin下进行

1:将“hadoop”目录和“.bash_profile”文件发送给集群中所有主机,发送目标用户为集群专用用户admin,发送目标路径为“/home/admin”,即集群专用用户admin的家目录。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

2:在集群中的每台主机上立即生效新配置的环境变量,查看新添加和修改的环境变量是否设置成功,以及环境变量的值是否正确,并验证Hadoop的安装配置是否成功。

Cluster-02

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-03

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-04

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-05

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

项目四:Hadoop高可用完全分布模式格式化和启动

该项的所有操作步骤使用专门用于集群的用户admin下进行

本环节格式化内容不可多次执行

注意格式化步骤

1:在所有同步通信节点的主机执行,启动同步通信服务,然后使用命令“jps”查看Java进程信息,若有名为“JournalNode”的进程,则表示同步通信节点启动成功。

本操作只在第一次安装时执行。安装完成后,以及关机重启服务器后不需要再次执行。

Cluster-03

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-04

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-05

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

2:在主节点使用hadoop namenode -format命令,对HDFS进行格式化,若格式化过程中没有报错则表示格式化成功。

本操作只在第一次安装时执行。安装完成后,以及关机重启服务器后不需要再次执行。千万不可多次格式化。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

3:格式化完成后将“hadoop”目录下的“name”目录发给集群中所有备用主节点的主机,发送目标用户为集群的专用用户admin,即当前与登录用户同名的用户,发送目标路径为“/home/admin/hadoop/”,即集群专用用户admin家目录下的Hadoop相关文件的目录。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

4:在集群中所有主机上使用命令“zkServer.sh start”启动Zookeeper服务的脚本。Cluster-01

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-02

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-03

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-04

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-05

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

5:在集群中所有主机上使用命令“zkServer.sh status”查看该节点Zookeeper服务当前的状态,若集群中只有一个“leader”节点,其余均为“follower”节点,则集群的工作状态正常。

Cluster-01

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-02

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-03

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-04

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-05

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

6:在主节点使用“hafs zkfc -formatZK”命令,对Hadoop集群在Zookeeper中的主节点切换控制信息进行格式化,若格式化过程中没有报错则表示格式化成功。格式化之前确保集群中各主机Zookeeper开启。

本操作只在第一次安装时执行。安装完成后,以及关机重启服务器后不需要再次执行。不可多次格式化。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

7:在所有同步通信节点的主机,使用“hadoop-daemon.sh stop journalnode”命令,关闭同步通信服务。

本操作只在第一次安装时执行。安装完成后,以及关机重启服务器后不需要再次执行。

Cluster-03

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-04

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-05

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

8:在主节点使用“start-all.sh”命令,启动Hadoop集群。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

9:在所有备用主节点的主机,使用“yarn-daemon.sh start resourcemanager”命令,启动YARN主节点服务。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

★★★启动命令,每次重启后,在zookeeper启动成功的前提下,只需要执行8,9两步操作即可。

10:在主节点使用命令“jps”查看Java进程信息,若有名为“NameNode”、“ResouceManager”、“DFSZAFailoverController”的三个进程,则表示Hadoop集群的主节点启动成功。

★可使用“Hadoop dfsadmin -report”查看HDFS状态。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

11:使用命令“ssh 目标主机名或IP地址”远程登录到所有备用主节点主机,使用命令“jps”查看Java进程信息,若有名为“NameNode”、“ResouceManager”、“DFSZAFailoverController”的三个进程,则表示Hadoop集群的备用主节点启动成功。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

12:使用命令“ssh 目标主机名或IP地址”远程登录到所有数据节点主机,使用命令“jps”查看Java进程信息,若有名为“DataNode”、“NodeManager”、“JournalNode”的三个进程,则表示Hadoop集群的数据节点启动成功。

Cluster-03

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-04

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Cluster-05

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

项目五:Hadoop高可用完全分布模式验证

该项的所有操作步骤使用专门用于集群的用户admin下进行

1:在Hadoop中创建当前登录用户自己的目录。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

2:查看HDFS中的所有文件和目录的结构。

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

3:进入Hadoop的示例程序包hadoop-mapreduce-examples-2.7.3.jar所在目录。

4:运行使用蒙地卡罗法计算PI的示例程序

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

Hadoop HA高可用集群的配置-Hadoop HA集群模式的安装

四、可能遇到的问题:

问题1:

Call From Cluster-01/192. 168.10.111 to Cluster-04:8485 failed on

connection exception: java.net.ConnectException: Connection refused;

查看hadoop日志发现报错,namenode进程丢失。

 

分析故障原因:

用start-al.sh启动的集群,journalnode (端口8485)是在namenode后启动的。默认情况下namenode启动10s(maxRetries= 10,sleepTime= 1000)journalnode还没有启动,就会报上述错误。

由于部署好ha后,首次启动是分步启动的,没有遇到该问题之后都是start-allsh启动,大约70%情况下会有该问题,30%左右的启动是正常的,究其原因,可能70%的时候journalnode启动比较慢,另有个别时候是启动比较快。实测中确实发现集群主机刚刚开机,就启动hadoop,会比较慢;等一段时间再启动或者首次启动hadoop后停止,然后再重新启动,这两种情况下hadoop启动会比较快。尤其是在虚拟机,通常会第一时间启动hadoop,所以遇到这个坑的时候比较多。所以,找到了根本原因,无论hadoop启动快慢namenode都不会挂掉了。

解决方法1:

手动分步启动(该方式不用修改配置文件)

#启动hadfs,注意有的是在多个节点执行的。

#每个同步通讯节点都要执行,注意后面没有s,03、04、05

#每个namenode都要执行,01、02     

#每个namenode都要执行,  01、02

#每个datanode都要执行,03、04、05

#启动yarn,只在主节点01#启动yarn,  只在备用主节点02

hadoop- daemon.sh start journalnode

hadoop-daemon.sh start namenode 

hadoop-daemon.sh start zkfc 

hadoop-daemon.sh start datanode 

start-yarn.sh 

yarn-daemon.sh start resourcemanager 

分步启动集群的方式,因为journalnode 是在namenode之前启动的,所以正常情况下一次就会连接成功,不会重试多次。

解决方法2:

先启动ha集群,报错后再单独启动namenode (该方式不用修改配置文件)

start-all.sh  #启动ha集群

启动后等待一会, jps确认没有namenode,再重新单独启动namenode

hadoop-daemon.sh start namenode #挂掉的namenode节点执行