视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
hadoop高可用集群搭建
2025-10-03 03:55:39 责编:小OO
文档
Hadoop高可用集群搭建

一、Hadoop高可用原理

1.原理

Hadoop高可用(Hadoop High Availability),是保证业务连续性的有效解决方案,通常通过设置备用节点的方式实现。一般将执行业务的名称节点称为活动节点(Active),另一个名称节点作为备用的节点(Standby),当活动节点出现问题导致业务不能正常的执行时,备用节点此时就会监测到,并立即切换为活动状态,从而保证业务的正常运行而不会被中断。

2.NameNode高可用

NameNode是HDFS的核心,如果NameNode失效了,那么整个HDFS也就不能提供服务了,所以Hadoop提供了高可用的方案,即Hadoop HA;HDFS提供了两种高可用的方案:一种是基于QJM(Quorum Journal Manager),另一种是基于NFS的。这里使用QJM来解决NameNode的单点故障问题,解决的方案就是在HDFS集群中建立多个NameNode节点。

为了保证NameNode元数据的一致性和编辑日志的安全性,采用Zookeeper来存储编辑日志文件。

多个NameNode节点中只有一个是处于Active状态的,其余都是Standby状态,同一时间只能有一个处于Active状态的NameNode节点。

多个NameNode上存储的元数据是实时同步的,当Active的NameNode出现故障时,通过Zookeeper实时切换到Standby的NameNode上,并将状态改为Active。

HDFS HA架构中有两台NameNode节点,一台是处于活动状态(Active)为客户端提供服务,另外一台处于热备份状态(Standby)。

DataNode会将心跳信息和Block汇报信息同时发给两台NameNode,DataNode只接受Active NameNode发来的文件读写操作指令。为了使备用节点保持其状态与Active节点同步,两个节点都与一组称为“JournalNodes”(JN)的单独守护进程通信。当Active节点执行任何名称空间修改时,它会将修改记录持久地记录到大多数这些JN中。待机节点能够从JN读取编辑,并且不断观察它们对编辑日志的更改。当备用节点看到编辑时,它会将它们应用到自己的命名空间。如果发生故障转移,Standby将确保在将自身升级为Active状态之前已从JournalNodes读取所有编辑内容。这可确保在发生故障转移之前完全同步命名空间状态。

3.ResourceManager高可用

ResourceManager HA通过主动/备用架构实现 - 在任何时间点,其中一个RM处于活动状态,并且一个或多个RM处于待机模式,等待活动RM出现故障或者宕机时机。转换为活动的触发器来自管理员(通过CLI)或启用自动故障转移时的集成故障转移控制器。

RM可以选择嵌入基于Zookeeper的ActiveStandbyElector来决定哪个RM应该是Active。当Active关闭或无响应时,另一个RM自动被选为Active,然后接管。请注意,不需要像HDFS那样运行单独的ZKFC守护程序,因为嵌入在RM中的ActiveStandbyElector充当故障检测器和领导者选择器而不是单独的ZKFC守护程序。

当存在多个RM时,客户端和节点使用的配置(yarn-site.xml)应该列出所有RM。客户端,应用程序管理器ApplicationMaster(AM)和节点管理器NodeManager(NM)尝试以循环方式连接到RM,直到它们到达活动RM。如果活动停止,他们将恢复循环轮询,直到他们连接到新的RM。

二、集群规划

机器名IP地址

软件列表运行进程
hadoop01

192.168.128.128

JDK

Zookeeper

Hadoop

Namenode

Resourcemanager

Quorumpeermain(Zookeeper)

DFSZKFailoverController(zkfc)

hadoop02

192.168.128.129

JDK

Zookeeper

Hadoop

Namenode

Resourcemanager

Quorumpeermain(Zookeeper)

DFSZKFailoverController(zkfc)

hadoop03

192.168.128.130

JDK

Zookeeper

Hadoop

Datanode

Nodemanager

Journalnode

Quorumpeermain(Zookeeper)

Jobhistroy

hadoop04

192.168.128.131

JDK

Hadoop

Datanode

nodemanager

journalnode

hadoop05

192.168.128.132

JDK

Hadoop

Datanode

nodemanager

journalnode

其中hadoop01、hadoop02作为名称节点同时使用Zookeeper的zkfc对名称节点进行控制,并且作为YARN框架的主节点,hadoop03、hadoop04和hadoop05作为数据节点, 并且三台机器都是YARN的子节点,使用了Hadoop HA中的journalnode构成了一个共享存储器,当向名称节点传输元数据时,会拷贝三份到这个共享存储器中。

三、准备工作

1.创建5台linux服务器

2.安装文件上传下载工具

安装上传下载工具: yum -y install lrzsz 

(此处已提前安装过了)

从本地文件上传到服务器中: rz 

上传到服务器后查询上传文件(默认上传到当前目录下)

从服务器下载到本地文件中: sz 

下载到本地后查询文件(默认下载到下载目录下)

3.配置SSH免密登录

1)配置每台服务器的主机名

●查看当前主机的主机名: hostname 

●修改当前主机的主机名: hostnamectl set-hostname 新主机名 

2)配置每台服务器的本地解析hosts文件

●配置解析文件: vim /etc/hosts 

3)配置SSH免密登录

●查询是否有hadoop用户: cat /etc/passwd  

●创建Hadoop用户和密码: useradd hadoop  passwd hadoop  

●切换至hadoop用户: su hadoop 

●生成SSH密匙: ssh-keygen -t rsa 

●将id发送至其他机器中: ssh-copy-id -I hadoop01 同样的方式发送到其他机器中

●测试ssh连接

4.安装Java运行环境

1)下载Java安装包并上传到服务器中

●在hadoop家目录下创建文件夹apps: mkdir apps 

●从本地上传Java安装包到服务器中: rz 

●解压完成安装: tar -zxvf jdk-8u241-linux-x.tar.gz 

2)配置Java环境

●查看jdk的版本: bin/java -version 

●配置hadoop用户的环境变量(在家目录下): vi .bashrc 

●使配置文件生效: source .bashrc 

●创建软链接映射到/usr/local目录下(不使用sudo可以切换为root用户): 

sudo ln -s app/jdk1.8.0_241 /usr/local/jdk  

●查询是否创建成功: ll /usr/local/ 

3)使用远程传输到其他机器中,并配置环境变量:

 scp -r /home/hadoop/app/jdk1.8.0_241 hadoop@hadoop02:~/apps/ 

5.安装Zookeeper

1)下载Zookeeper并上传到服务器中

●从本地上传zookeeper安装包到服务器中: rz 

●解压安装版完成安装: tar -zvxf zookeeper-3.4.13.tar.gz 

2)配置Zookeeper环境

●创建Zookeeper的软链接:

 sudo ln -s /home/hadoop/app/zookeeper-3.4.13 /usr/local/zookeeper 

●修改环境变量(在家目录下): vi .bashrc 

●重新编译环境变量:source .bashrc 

●修改软链接的用户和组(使用root用户):

 chown -R hadoop:hadoop /usr/local/zookeeper 

●进入zookeeper配置文件目录: cd /usr/local/zookeeper/conf 

●拷贝样例配置文件并重命名为zoo.cfg,并进入编辑:

 cp zoo_sample.cfg zoo.cfg    vi zoo.cfg 

●创建data、log目录,只有hadoop有权限(先回到上级目录):

 cd ..    mkdir data    mkdir log 

●在data目录下新建myid文件,并编写对应节点编号:

 cd data    echo 1 > myid 

3)使用远程传输到其他机器中,并配置环境变量

●上传到其他两台机器中(hadoop02和hadoop03):

scp -r /home/hadoop/app/zookeeper-3.4.13 hadoop@hadoop02:~/apps/ 

●修改对应的myid (如在hadoop02中):echo 2 > myid

●Zookeeper的启动(3台机器都启动): zkServer.sh start 

●查看Zookeeper的状态: zkServer.sh status  

四、Hadoop集群安装

1.安装Hadoop

1)从本地上传Hadoop安装包到服务器中: rz 

2)解压压缩包完成安装: tar -zvxf hadoop-2.7.4.tar.gz 

2.配置Hadoop环境

1)配置使得hadoop能使用root权限

●修改用户使用root用户登录: su - root 

●修改hadoop用户的权限: visudo 

2)创建软链接,并修改链接属主:

创建: sudo ln -s /home/hadoop/app/hadoop-2.7.4 /usr/local/hadoop 

修改: chown -R hadoop:hadoop /usr/local/hadoop  

3)配置相关的环境变量

●在hadoop用户家目录编辑环境配置文件: vi .bashrc 

●使配置文件生效: source .bashrc 

3.配置HDFS

1)进入Hadoop配置文件路径中

● cd /usr/local/hadoop/etc/hadoop 

2)修改hadoop-env.sh

● vim hadoop-env.sh 

3)配置core-site.xml

● vim core-site.xml 

4)配置hdfs-site.xml

● vim hdfs-site.xml 

4.配置YARN

1)配置yarn-site.xml

● vim yarn-site.xml 

2)配置mapred-site.xml

●vim mapred-site.xml 

3)在/usr/local/hadoop下创建hdpdata文件夹

● cd /usr/local/hadoop    mkdir hdpdata 

4)修改slaves文件(配置文件目录下)

● vim slaves   配置数据节点的主机

5.将配置好的Hadoop远程传输到其他主机中

1) scp -r /home/hadoop/app/hadoop-2.7.4 hadoop@hadoop2:~/app/ 

2)配置其他主机的环境变量即可

五、Hadoop集群启动

Hadoop集群的启动需要严格的按照以下顺序进行启动

1.启动JournalNode(在hadoop03、hadoop04和hadoop05上执行)

● hadoop-daemon.sh start journalnode  

2.格式化HDFS(在hadoop01上执行)

● hdfs namenode -format 

●启动zookeeper: zkStart-all.sh 

●格式化成功之后会在core-site.xml中的hadoop.tmp.dir指定的路径下生成dfs文件夹,将该文件夹拷贝到hadoop02的相同路径下

 scp -r hdpdata hadoop@hadoop02:/usr/local/hadoop 

3.执行格式化ZKFC操作(在hadoop01上执行)

● hdfs zkfc -formatZK 

4.启动HDFS(在hadoop01上执行)

●start-dfs.sh start

5.启动YARN(在hadoop02上执行)

● start-yarn.sh 

●在hadoop01中单独启动一个ResourceManager作为备份节点

● yarn-daemon.sh start resourcemanager 

6.启动JobHistoryServer(在hadoop02上执行)

● mr-jobhistory-daemon.sh start historyserver 

7.安装启动完成

●NameNode (active):http://192.168.128.128:50070

●NameNode (standby):http://192.168.128.129:50070

●ResourceManager HTTP访问地址

●ResourceManager :http://192.168.128.129:8088

●历史日志HTTP访问地址

●JobHistoryServer:http://192.168.128.129:19888

六、Hadoop集群验证

1.向HDFS中上传一个文件

2.手动关闭active的名称节点

● hadoop-daemon.sh stop namenode 

3.验证YARN是否正常工作及ResourceManager HA高可用

● hadoop fs -mkdir /wordcount 

● hadoop fs -mkdir /wordcount/input 

● hadoop fs -mv /README.txt /wordcount/input 

● hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.4.jar wordcount /wordcount/input  /wordcount/output 

运行中:

运行成功:

七、集群搭建过程中遇到的问题

1.Zookeeper配置时,提示可能未运行

●解决: 

1)关闭防火墙

2)禁用开机启动

2.所有启动Hadoop的步骤做完后,发现hadoop02中使用jps后的进程数不对

●解决:发现原因是启动HDFS等操作之前没有启动Zookeeper,在启动HDFS前启动Zookeeper后成功!

八、总结

 通过这次Hadoop HA集群的搭建,我了解如何通过linux系统安装Java环境、通过linux系统完成从本地文件的上传和下载,了解了如何配置SSH的免密登录。学会了如何安装和配置Zookeeper和Hadoop。这些使得我对大数据有了更深一步的了解,也知道了Hadoop HA所带来的强大的高可用性体验,总的来说,通过这次的实现我的收益颇多!下载本文

显示全文
专题