大数据开发之HA

第 1 章:Hadoop HA 高可用

1.1 HA 概述

所谓HA(High Availablity),即高可用(7*24小时不间断服务)。
实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。
NameNode主要在以下两个方面影响HDFS集群

  • NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启。
  • NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用。
    HDFS HA功能通过配置多个NameNodes(Activate/Standby)实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器奔溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

解释名词:
HDFS(Hadoop Distributed File System):

  • 定义:HDFS是Hadoop框架中的一个分布式系统,它被设计用来存储大量数据,并提供高吞吐量的数据访问。这个系统可以跨越多个机器运行,使得它可以处理大量数据。
  • 特点:HDFS是一个主/从结构。一个HDFS集群由一个NameNode(主节点)和多个DataNodes(从节点)组成。NameNode管理文件系统的元数据,比如文件目录和文件属性,同时还负责客户端请求的处理。DataNodes则负责存储实际的数据。
  • 用途:主要用于大数据应用,特别是那些需要处理PB级(千亿字节)数据的应用。

YARN(Yet Another Resource Negotiator):

  • 定义:YARN是Hadoop2.0引入的资源管理和作业调度技术。它允许数据处理框架(如MapReduce和其它分布式计算框架)有效地共享一个共同的资源池。
  • 组件:主要包括ResourceManager(负责整个系统的资源分配)和多个NodeManagers(在每个节点上管理用户作业运行)。
  • 目的:YARN的目的是提高集群的资源利用率,同时支持多种数据处理模型。

NameNode:

  • 角色:在HDFS中,NameNode是一个关键的服务器,负责管理文件系统的命名空间和客户端对文件的访问。NameNode记录了每个文件在文件系统树的目录结构中的位置,以及文件的元数据,如权限、时间戳等。
  • 功能:NameNode还记录了每个文件的数据块(block)信息和这些数据块在DataNodes上的位置。但是它并不存储实际的数据。

1.2 HDFS-HA核心问题

大数据开发之HA_第1张图片
4 强行杀死namenode~ + 5 如果ssh补刀失败~:强行再补一刀,防止同时出现两个活着的NameNode,也就出现了脑裂。
1)怎么保证三台namenode的数据一致?
(1)Fsimage:让一台nn生成数据,让其它机器nn同步。
(2)Edits:需要引进新的模块JournalNode来保证edits的文件的数据一致性。
2)怎么同时只有一台nn是active,其它所有的是standby?
(1)手动分配
(2)自动分配
3)2nn在ha架构中并不存在,定期合并fsimage和edits的活谁来干?
(1)由standby的nn来干
4)如果nn真的发生了问题,怎么让其它的nn上位干活?
(1)手动故障转移
(2)自动故障转移

1.3 HDFS-HA 手动模式

1.3.1 环境准备

(1)修改IP
(2)修改主机号及主机名和IP地址的映射
(3)关闭防火墙
(4)ssh免密登录
(5)按照JDK,配置环境变量等

1.3.2 规划集群

hadoop102 hadoop103 hadoop104
NameNode NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode

1.3.3 配置HDFS-HA集群

  • 在opt目录下创建一个ha文件夹
  • 将/opt/module/下的hadoop拷贝到/opt/ha目录下(记得删除data和log目录)
  • 配置core-site.xml
    (1)把多个NameNode的地址组装成一个集群mycluster
    (2)指定hadoop运行时产生文件的存储目录
  • 配置hdfs-site.xml
    (1)NameNode数据存储目录
    (2)DataNode数据存储目录
    (3)JournalNode数据存储目录
    (4)完全分布式集群名称
    (5)集群中NameNode节点都有哪些
    (6)NameNode的RPC通信地址:RPC通信是一种允许远程计算机程序调用另一台计算机上程序的协议,主要用于数据管理、元数据操作以及各种控制指令的传输。
    (7)NameNode的http通信地址:用于Web界面访问,供管理员和用户查看文件系统状态和性能指标。
    (8)指定NameNode元数据在JournalNode上的存储地址
    (9)访问代理类:client用于确定哪个NameNode为Active
    (10)配置隔离机制,即同一时刻只能有一台服务器对外响应
    (11)使用隔离机制时需要ssh密钥登录
  • 分发配置好的hadoop环境到其它节点

1.3.4 启动HDFS-HA集群

1)将HADOOP_HOME环境变量更改到HA目录(三台机器)
2)在各个JournalNode节点上,输入以下命令启动journalnode服务

  • hdfs --daemon start journalnode

3)在[nn1]上,对其进行格式化,并启动

  • hdfs namenode -format
  • hdfs --daemon start namenode
    4)在[nn2]和[nn3]上,同步nn1的元数据信息
  • hdfs namenode -bootstrapStandby
    5)启动[nn2]和[nn3]
  • hdfs --daemon start namenode
    6)查看web页面显示大数据开发之HA_第2张图片
    大数据开发之HA_第3张图片
    大数据开发之HA_第4张图片
    7)在所有节点上,启动datanode
  • hdfs --daemon start datanode
    8)将[nn1]切换成Active
  • hdfs haadmin -transitionToActive nn1

9)查看是否Active

  • hdfs haadmin -getServiceState nn1

1.4 HDFS-HA 自动模式

1.4.1 HDFS-HA自动故障转移工作机制

自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程,如图所示。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。

1.4.2 HDFS-HA自动故障转移的集群规划

hadoop102 hadoop103 hadoop104
NameNode NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
Zookeeper Zookeeper Zookeeper
ZKFC ZKFC ZKFC

1.4.3 配置HDFS-HA自动故障转移

1)具体配置
(1)在hdfs-site.xml中增加:启动nn故障自动转移
(2)在core-site.xml文件中增加:指定zkfc要连接的zkService地址
(3)修改后分发配置文件
2)启动
(1)关闭所有HDFS服务

  • stop-dfs.sh

(2)启动Zookeeper集群

  • zkServer.sh start

(3)初始化HA在Zookeeper中状态

  • hdfs zkfc -formatZK

(4)启动HDFS

  • start-dfs.sh

(5)可以去zkCli.sh客户端查看Namenode选举锁节点内容
3)验证
(1)将Active NameNode进程kill,查看网页端三台Namenode的状态变化

1.5 YARN-HA配置

1.5.1 YARN-HA工作机制

大数据开发之HA_第5张图片
ZooKeeper集群存储了Active ResourceManager的状态,这样在主节点失败时,可以从ZooKeeper获取状态信息,以便进行故障转移。Standby ResourceManager是备用的ResourceManager,它在正常情况下不会处理任何作业或管理资源。当Active ResourceManager发生故障时,Standby ResourceManager会从ZooKeeper集群获取最新的状态信息,并成为新的Active ResourceManager,这个过程称为故障转移(Fail-over)。

1.5.2 配置YARN-HA集群

1)环境准备
(1)修改IP
(2)修改主机号及主机名和IP地址的映射
(3)关闭防火墙
(4)ssh免密登录
(5)按照JDK,配置环境变量等
(6)配置Zookeeper集群
2)集群规划

hadoop102 hadoop103 hadoop104
ResourceManager ResourceManager ResourceManager
NodeManager NodeManager NodeManager
Zookeeper Zookeeper Zookeeper

3)核心问题
(1)如果当前active rm挂了,其他rm怎么将其他standby rm上位?
答:核心原理跟HDFS一样,利用了zk的临时节点。
(2)当前rm上有很多计算程序在等待运行,其他的rm怎么将这些程序接受过来接着跑?
答:rm会将当前所有计算程序的状态存储在zk中,其他rm上位后会去读取,然后接着跑。
4)具体配置
(1)yarn-site.xml

  • 1、启用resourcemanager ha
  • 2、声明两台resourcemanager的地址
  • 3、指定resourcemanager的逻辑顺序
  • 4、rm1的配置(指定rm1的主机名、指定rm1的web端地址、指定rm1的内部通信地址、指定AM向rm1申请资源的地址、指定供NM连接的地址)
  • 5、rm2的配置:和rm1的配置一致
  • 6、rm3的配置:和rm1的配置一致
  • 7、指定zookeeper集群的地址
  • 8、启动自动恢复
  • 9、指定resourcemanager的状态信息存储在zookeeper集群
  • 10、环境变量继承

(2)同步更新其他节点信息的配置信息,分发配置文件
4)启动YARN
(1)在有ResourceManager的节点启动

  • start-yarn.sh

(2)查看服务状态

  • yarn rmadmin -getServiceState rm1

(3)可以去zkCli.sh客户端查看ResourceManager选举锁节点内容
(4)web端查看hadoop102:8088和hadoop103:8088的YARN的状态
大数据开发之HA_第6张图片

1.6 HADOOP HA的最终规划

将整个ha搭建完成后,集群将形成以下模样

hadoop102 hadoop103 hadoop104
NameNode NameNode NameNode
JournalNode JournalNode JournalNode
DataNode DataNode DataNode
Zookeeper Zookeeper Zookeeper
ZKFC ZKFC ZKFC
ResourceManager ResourceManager ResourceManager
NodeManager NodeManager NodeManager

NameNode:Hadoop文件系统(HDFS)的核心部分,负责管理文件系统的命名空间。NameNode跟踪整个文件系统的目录和文件结构,并维护文件系统树及其元数据。在Ha配置中,通常由两个NameNode,一个处于活跃状态,另外一个处于待命状态,以提供故障转移能力。
JournalNode:在Ha配置中,JournalNode用于维护NameNode之间的状态同步。当活动NameNode对文件进行更改时,这个更改会先记录到一组JournalNode中,然后由待命NameNode读取,以保持状态一致。
DataNode:HDFS的数据存储节点。DataNode负责存储实际的数据块。NameNode负责跟踪哪个DataNode存储了文件的哪部分内容。
Zookeeper:一种集中式服务,用于维护配置信息、命令、提供分布式同步,以及提供群组服务。 在Hadoop HA配置中,Zookeeper用于管理和协调NameNode的状态。
ZKFC(Zookeeper Failover Controller):ZKFC是一个基于Zookeeper的故障转移控制器。它监控和管理NameNode的健康状态,以及在主NameNode失效时触发故障转移功能。
ResourceManager:YARN(Yet Another Resource Negotiator)的核心部分,负责管理集群中的计算资源。ResourceManager跟踪可用的处理器和内存资源,并根据需求将这些资源分配给各个应用程序。
NodeManager:YARN架构中的每个节点上运行的组件。NodeManager负责监控其节点上的资源使用情况,并向ResourceManager报告。此外,它还负责管理容器的生命周期,容器是执行应用程序代码的隔离环境。

你可能感兴趣的:(大数据,hadoop)