ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Hadoop HDFS 高可用实战指南

Hadoop HDFS 高可用实战指南 目录ZooKeeper 集群部署指南1. 环境准备与规划2. 软件安装与配置3. 集群节点配置4. 启动集群与状态验证Hadoop 高可用配置1. 高可用架构与原理2. 核心配置文件详解3. 启动 JournalNode 服务4. 格式化与启动 HDFS 集群5. 验证 ZooKeeper 中的 HA 状态6. 测试故障切换YARN 高可用配置1. 配置 mapred-site.xml2. 配置 yarn-site.xml3. 启动 YARN 服务4. 测试故障切换ZooKeeper 集群部署指南摘要本文详细介绍了 ZooKeeper 集群的部署流程涵盖环境准备、软件安装、配置文件详解、集群启动与验证、以及高可用HA配置等核心步骤。通过分步操作和代码示例帮助读者快速搭建一个稳定可靠的 ZooKeeper 集群。1. 环境准备与规划在部署 ZooKeeper 集群之前需要完成以下准备工作服务器规划建议至少准备 3 台或 5 台服务器奇数台以确保集群选举的多数原则。本文示例使用三台服务器server2 (192.168.223.182), server3 (192.168.223.183), server4 (192.168.223.184)。系统用户为统一管理在所有节点创建专用用户如 hadoop。共享目录可选若需使用 NFS 共享配置文件或数据可额外配置一台 NFS 服务器如 server5, 192.168.223.185。网络与防火墙确保集群节点间网络互通并开放 ZooKeeper 所需端口默认 2181 用于客户端2888 用于 Leader-Follower 通信3888 用于选举。JDK 安装ZooKeeper 需要 Java 运行环境请在所有节点安装相同版本的 JDK如 OpenJDK 8 或 11。2. 软件安装与配置2.1 下载与解压在其中一个节点如 server1下载 ZooKeeper 安装包并解压到共享目录或各节点本地。在server2、3、4、5执行 [rootserver5 ~]# mount 192.168.223.181:/home/hadoop/ /home/hadoop/选取server5作为备节点[rootserver5 ~]# yum install -y nfs-utils [rootserver5 ~]# useradd hadoop [rootserver5 ~]# vi /etc/hosts# 以 hadoop 用户操作 [rootserver1 ~]# ls anaconda-ks.cfg apache-zookeeper-3.8.6-bin.tar.gz [rootserver1 ~]# mv apache-zookeeper-3.8.6-bin.tar.gz /home/hadoop/ [rootserver1 ~]# su - hadoop [hadoopserver1 ~]$ tar -zxf apache-zookeeper-3.8.6-bin.tar.gz -C /home/hadoop/ [hadoopserver1 ~]$ cd /home/hadoop/apache-zookeeper-3.8.6-bin/2.2 配置文件详解进入 conf 目录复制样例配置文件并编辑zoo.cfg。[hadoopserver1 ~]$ cd apache-zookeeper-3.8.6-bin/conf/ [hadoopserver1 conf]$ cp zoo_sample.cfg zoo.cfg [hadoopserver1 conf]$ vim zoo.cfg关键配置项如下# 基础配置 tickTime2000 initLimit10 syncLimit5 dataDir/tmp/zookeeper clientPort2181 集群服务器列表 server.1192.168.223.182:2888:3888 server.2192.168.223.183:2888:3888 server.3192.168.223.184:2888:38883. 集群节点配置3.1 创建数据目录与 myid 文件在每个 ZooKeeper 节点上创建数据目录并写入唯一的 myid 文件。# 在 server2 (对应 server.1) 上执行 [hadoopserver2 ~]$ mkdir -p /tmp/zookeeper [hadoopserver2 ~]$ echo 1 /tmp/zookeeper/myid 在 server3 (对应 server.2) 上执行 [hadoopserver3 ~]$ mkdir -p /tmp/zookeeper [hadoopserver3 ~]$ echo 2 /tmp/zookeeper/myid 在 server4 (对应 server.3) 上执行 [hadoopserver4 ~]$ mkdir -p /tmp/zookeeper [hadoopserver4 ~]$ echo 3 /tmp/zookeeper/myid4. 启动集群与状态验证4.1 启动 ZooKeeper 服务在每台节点上启动 ZooKeeper 服务。# 在 server2 上启动 [hadoopserver2 ~]$ cd apache-zookeeper-3.8.6-bin/ [hadoopserver2 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh start 在 server3 上启动 [hadoopserver3 ~]$ cd apache-zookeeper-3.8.6-bin/ [hadoopserver3 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh start 在 server4 上启动 [hadoopserver4 ~]$ cd apache-zookeeper-3.8.6-bin/ [hadoopserver4 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh start4.2 检查服务状态启动后检查各节点的角色Leader 或 Follower。# 检查 server2 状态 [hadoopserver2 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh status Mode: follower 检查 server3 状态 [hadoopserver3 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh status Mode: leader 检查 server4 状态 [hadoopserver4 apache-zookeeper-3.8.6-bin]$ bin/zkServer.sh status Mode: follower输出显示 server3 为 Leaderserver2 和 server4 为 Follower表明集群选举成功运行正常。Hadoop 高可用配置在完成 ZooKeeper 集群部署后我们可以基于 ZooKeeper 实现 Hadoop HDFS 的高可用High Availability, HA。HDFS HA 通过配置两个 NameNode一个 Active一个 Standby来消除单点故障确保 HDFS 服务在 NameNode 故障时能够自动切换保证集群持续可用。1. 高可用架构与原理Hadoop HDFS 高可用架构的核心组件包括Active NameNode处理所有客户端请求管理文件系统元数据。Standby NameNode实时同步 Active NameNode 的元数据变更随时准备接管。JournalNode 集群通常由 3 个或 5 个节点组成用于存储 NameNode 的编辑日志Edits Log确保 Active 和 Standby 之间的元数据同步。ZooKeeper 集群用于协调故障检测和主备切换通过 ZKFCZooKeeper Failover Controller监控 NameNode 状态。DataNode同时向两个 NameNode 发送心跳和块报告。当 Active NameNode 发生故障时ZooKeeper 会触发故障转移流程将 Standby NameNode 提升为新的 Active整个过程对客户端透明。2. 核心配置文件详解在配置 HA 之前需要修改 Hadoop 的核心配置文件。以下配置基于本文的服务器规划NameNode 节点server1 (192.168.223.181) 作为 h1server5 (192.168.223.185) 作为 h2。JournalNode 节点server2、server3、server4与 ZooKeeper 节点复用。ZooKeeper 集群server2:2181, server3:2181, server4:2181。配置 core-site.xml该文件定义文件系统默认的访问地址和 ZooKeeper 集群地址。[hadoopserver1 hadoop]$ vim core-site.xml configuration property namefs.defaultFS/name valuehdfs://masters/value /property property nameha.zookeeper.quorum/name value192.168.223.182:2181,192.168.223.183:2181,192.168.223.184:2181/value /property /configuration2. 配置 hdfs-site.xml这是 HA 配置的核心文件需要详细设置 NameService、NameNode RPC/HTTP 地址、JournalNode 地址等。[hadoopserver1 hadoop]$ vim hdfs-site.xml configuration property namedfs.replication/name value3/value /property property namedfs.nameservices/name valuemasters/value /property property namedfs.ha.namenodes.masters/name valueh1,h2/value /property property namedfs.namenode.rpc-address.masters.h1/name value192.168.223.181:9000/value /property property namedfs.namenode.http-address.masters.h1/name value192.168.223.181:9870/value /property property namedfs.namenode.rpc-address.masters.h2/name value192.168.223.185:9000/value /property property namedfs.namenode.http-address.masters.h2/name value192.168.223.185:9870/value /property property namedfs.namenode.shared.edits.dir/name valueqjournal://192.168.223.182:8485;192.168.223.183:8485;192.168.223.184:8485/masters/value /property ···将上述配置文件同步到所有 Hadoop 节点包括 NameNode 和 DataNode。3. 启动 JournalNode 服务JournalNode 用于存储 NameNode 的编辑日志必须在首次启动 HDFS 前先启动。在三个 JournalNode 节点server2、server3、server4上依次执行[hadoopserver4 ~]$ cd hadoop [hadoopserver4 hadoop]$ bin/hdfs --daemon start journalnode [hadoopserver4 hadoop]$ jps 3923 QuorumPeerMain # ZooKeeper 进程 4195 Jps 4152 JournalNode # 成功启动的 JournalNode 进程同样在 server2 和 server3 上启动 JournalNode。使用jps命令确认 JournalNode 进程已运行。4. 格式化与启动 HDFS 集群步骤 1格式化 NameNode仅在 server1 上执行[hadoopserver1 hadoop]$ bin/hdfs namenode -format格式化成功后会在/tmp/hadoop-hadoop/目录下生成 NameNode 的元数据。步骤 2将元数据拷贝到备节点server5[hadoopserver1 hadoop]$ scp -r /tmp/hadoop-hadoop server5:/tmp步骤 3在 ZooKeeper 中格式化 HA 状态仅在 server1 上执行[hadoopserver1 hadoop]$ bin/hdfs zkfc -formatZK此命令会在 ZooKeeper 中创建/hadoop-ha目录用于存储故障转移所需的状态信息。步骤 4启动 HDFS 集群在 server1 上执行[hadoopserver1 hadoop]$ sbin/start-dfs.sh启动后检查两个 NameNode 的进程# 在 server1 上查看 [hadoopserver1 hadoop]$ jps 4609 NameNode # Active NameNode 5026 Jps 4943 DFSZKFailoverController # ZKFC 进程 在 server5 上查看 [hadoopserver5 tmp]$ jps 1671 Jps 1528 NameNode # Standby NameNode 1598 DFSZKFailoverController # ZKFC 进程验证集群状态此时通过浏览器访问两个 NameNode 的 Web 界面访问http://192.168.223.181:9870server1应显示Active状态。访问http://192.168.223.185:9870server5应显示Standby状态。这表示 HA 集群已成功启动一个节点为 Active另一个为 Standby。5. 验证 ZooKeeper 中的 HA 状态可以通过 ZooKeeper 客户端查看 HA 相关的 ZNode确认 Active NameNode 信息已注册。[hadoopserver2 apache-zookeeper-3.8.6-bin]$ bin/zkCli.sh Connecting to localhost:2181 [zk: localhost:2181(CONNECTED) 0] ls / [hadoop-ha, zookeeper] # 存在 hadoop-ha 节点 [zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha [masters] # 对应 nameservice [zk: localhost:2181(CONNECTED) 2] get /hadoop-ha/masters/ActiveBreadCrumb mastersh1server1 F( # 显示当前 Active 为 h1 (server1)6. 测试故障切换下面模拟 Active NameNodeserver1故障验证集群能否自动切换到 Standbyserver5。步骤 1查看当前进程并杀死 Active NameNode# 在 server1 上查看进程 [hadoopserver1 hadoop]$ jps 5440 Jps 4609 NameNode # Active NameNode 进程 4943 DFSZKFailoverController # ZKFC 进程 模拟故障杀死 Active NameNode 进程 [hadoopserver1 hadoop]$ kill -9 4609 再次查看NameNode 进程已消失 [hadoopserver1 hadoop]$ jps 5475 Jps 4943 DFSZKFailoverController # ZKFC 仍在运行步骤 2观察备节点状态变化# 在 server5原 Standby上查看进程 [hadoopserver5 tmp]$ jps 5130 Jps 5068 DFSZKFailoverController 4974 NameNode # 此时 NameNode 应已变为 Active步骤 3通过 Web 界面验证刷新浏览器http://192.168.223.181:9870server1将无法访问或显示错误。http://192.168.223.185:9870server5现在应显示为Active状态。步骤 4恢复原 Active 节点在 server1 上重新启动 NameNode 进程它将自动以 Standby 身份加入集群[hadoopserver1 hadoop]$ bin/hdfs --daemon start namenode启动后server1 的 NameNode 将处于 Standby 状态server5 保持 Active。此时集群恢复为正常的一主一备模式。至此一个具备高可用能力的 Hadoop 集群已部署完成能够有效应对 NameNode 单点故障保障大数据服务的持续稳定运行。YARN 高可用配置在完成 HDFS 高可用配置后接下来配置 YARN ResourceManager 的高可用HA以进一步提升 Hadoop 集群的容错能力。1. 配置 mapred-site.xml首先在server1上编辑mapred-site.xml文件指定 MapReduce 框架为 YARN[hadoopserver1 hadoop]$ vim mapred-site.xml configuration property namemapreduce.framework.name/name valueyarn/value /property property namemapreduce.application.classpath/name value$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*/value /property /configuration2. 配置 yarn-site.xml接着编辑yarn-site.xml文件添加 YARN ResourceManager HA 相关配置[hadoopserver1 hadoop]$ vim yarn-site.xml # 添加如下内容 property nameyarn.resourcemanager.ha.enabled/name valuetrue/value /property property nameyarn.resourcemanager.cluster-id/name valueRM_CLUSTER/value /property property nameyarn.resourcemanager.ha.rm-ids/name valuerm1,rm2/value /property property nameyarn.resourcemanager.hostname.rm1/name valueserver1/value /property property nameyarn.resourcemanager.hostname.rm2/name valueserver5/value /property property nameyarn.resourcemanager.recovery.enabled/name valuetrue/value /property property nameyarn.resourcemanager.store.class/name valueorg.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore/value /property property nameyarn.resourcemanager.zk-address/name value192.168.223.182:2181,192.168.223.183:2181,192.168.223.184:2181/value /property注意请确保yarn.resourcemanager.zk-address中的 ZooKeeper 地址正确无误。3. 启动 YARN 服务配置完成后在server1上启动 YARN 服务[hadoopserver1 hadoop]$ sbin/start-yarn.sh Starting resourcemanagers on [ server1 server5 ] Starting nodemanagers [hadoopserver1 hadoop]$启动后检查各节点进程状态# server1 节点 [hadoopserver1 hadoop]$ jps 5537 NameNode 7298 Jps 7163 ResourceManager # Active ResourceManager 4943 DFSZKFailoverController server5 节点 [hadoopserver5 tmp]$ jps 6242 Jps 5068 DFSZKFailoverController 6189 ResourceManager # Standby ResourceManager 4974 NameNode server2 节点 [hadoopserver2 ~]$ jps 3777 NodeManager 3876 Jps 1310 QuorumPeerMain 2975 DataNode 3055 JournalNode server3 节点 [hadoopserver3 ~]$ jps 5968 Jps 5026 DataNode 5106 JournalNode 5828 NodeManager 1307 QuorumPeerMain server4 节点 [hadoopserver4 ~]$ jps 3923 QuorumPeerMain 5748 NodeManager 5846 Jps 4986 DataNode 5066 JournalNode通过浏览器访问 YARN Web 界面可以看到server1为 Active 状态server5为 Standby 状态三个 NodeManager 均正常运行。4. 测试故障切换下面模拟 Active ResourceManagerserver1故障验证集群能否自动切换到 Standbyserver5。步骤 1查看当前进程并杀死 Active ResourceManager# 在 server1 上查看进程 [hadoopserver1 hadoop]$ jps 5537 NameNode 7298 Jps 7163 ResourceManager # Active ResourceManager 进程 4943 DFSZKFailoverController 模拟故障杀死 Active ResourceManager 进程 [hadoopserver1 hadoop]$ kill -9 7163步骤 2观察备节点状态变化进程被终止后server5会自动接管集群变为 Active ResourceManager。步骤 3恢复原 Active 节点在server1上重新启动 ResourceManager 服务[hadoopserver1 hadoop]$ bin/yarn --daemon start resourcemanager重新启动后server1的 ResourceManager 将处于 Standby 状态server5保持 Active。此时集群恢复为正常的一主一备模式。通过 zookeeper 客户端查看 YARN‑HA查看 ZK 根目录下/yarn‑leader‑election文件夹这个目录专门用于 YARN‑HA 两个 ResourceManager 选主。返回结果[RM_CLUSTER]RM_CLUSTER读取RM_CLUSTER/ActiveBreadCrumb节点内容 输出RM_CLUSTERrm2含义当前 YARN‑HA 的 Active 主 ResourceManager 是 rm2。rm2 对应server5[hadoopserver2 apache-zookeeper-3.8.6-bin]$ bin/zkCli.sh /home/hadoop/jdk/bin/java Connecting to localhost:2181 WATCHER:: WatchedEvent state:SyncConnected type:None path:null [zk: localhost:2181(CONNECTED) 0] ls /yarn-leader-election [RM_CLUSTER] [zk: localhost:2181(CONNECTED) 1] get /yarn-leader-election/RM_CLUSTER/ActiveBreadCrumb RM_CLUSTERrm2至此YARN ResourceManager 的高可用配置与验证完成。整个 Hadoop 集群HDFS YARN均已实现高可用能够有效应对 NameNode 和 ResourceManager 的单点故障保障大数据服务的持续稳定运行。
返回列表