以下是基于 CentOS 8 搭建高可用 Hadoop 集群的完整操作流程及命令,涵盖 6 台主机的规划、部署步骤和高可用(HA)配置。结合 Hadoop 3.x 官方文档和最佳实践整理:


先决条件

  1. 硬件规划
    • 6 台 CentOS 8 主机(物理机或虚拟机),每台建议配置:
      • 4GB+ 内存,50GB+ 磁盘
      • 静态 IP(示例规划):

主机名

IP 地址

角色分配

node1

192.168.1.101

NameNode + ZKFC + JournalNode

node2

192.168.1.102

NameNode + ZKFC + JournalNode

node3

192.168.1.103

ResourceManager + JournalNode

node4

192.168.1.104

DataNode + NodeManager

node5

192.168.1.105

DataNode + NodeManager

node6

192.168.1.106

DataNode + NodeManager

    • 服务说明
      • JournalNode:存储 HA 状态(至少 3 台)
      • ZKFC(ZooKeeper Failover Controller):监控 NameNode 状态38
  1. 软件要求
    • Java JDK 1.8+(推荐 OpenJDK)
    • Hadoop 3.3.4+(官网下载
    • ZooKeeper 3.6.3+(用于 HA 仲裁)810

一、基础环境配置(所有节点执行)

1. 网络与主机名

bash

# 设置静态 IP(以 node1 为例)

sudo nmcli con mod ens33 ipv4.addresses 192.168.1.101/24 ipv4.gateway 192.168.1.1 ipv4.dns "8.8.8.8" ipv4.method manual

sudo nmcli con up ens33

# 修改主机名

sudo hostnamectl set-hostname node1

# 配置 hosts 映射(所有节点相同)

sudo vi /etc/hosts

## 添加以下内容:

192.168.1.101 node1

192.168.1.102 node2

192.168.1.103 node3

192.168.1.104 node4

192.168.1.105 node5

192.168.1.106 node6

2. 关闭防火墙与 SELinux

bash

sudo systemctl stop firewalld

sudo systemctl disable firewalld

sudo setenforce 0

sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

3. 安装 JDK

bash

sudo dnf install java-1.8.0-openjdk-devel -y

echo 'export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk' | sudo tee -a /etc/profile

source /etc/profile

4. 配置 SSH 免密登录

bash

# 所有节点生成密钥

ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 在 node1 上汇总公钥并分发

ssh-copy-id node1

ssh-copy-id node2

... # 依次操作所有节点

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

scp ~/.ssh/authorized_keys node2:~/.ssh/  # 复制到其他节点


二、Hadoop 安装与 HA 配置

1. 解压 Hadoop 到所有节点

bash

# 在 node1 操作

tar -zxvf hadoop-3.3.4.tar.gz -C /opt

sudo mv /opt/hadoop-3.3.4 /opt/hadoop

# 分发到其他节点

scp -r /opt/hadoop node2:/opt/

... # 重复至 node6

2. 配置环境变量(所有节点)

bash

echo 'export HADOOP_HOME=/opt/hadoop' | sudo tee -a /etc/profile

echo 'export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin' | sudo tee -a /etc/profile

source /etc/profile

3. 修改 Hadoop 配置文件($HADOOP_HOME/etc/hadoop/)

  • core-site.xml - 定义全局 HA 访问点

xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://mycluster</value> <!-- HA 逻辑名 -->

</property>

<property>

<name>ha.zookeeper.quorum</name>

<value>node1:2181,node2:2181,node3:2181</value> <!-- ZK 集群 -->

</property>

</configuration>

  • hdfs-site.xml - 配置 HA 和 JournalNode

xml

<property>

<name>dfs.nameservices</name>

<value>mycluster</value> <!-- 与 core-site 一致 -->

</property>

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2</value> <!-- 两个 NameNode ID -->

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>node1:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>node2:8020</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://node1:8485;node2:8485;node3:8485/mycluster</value> <!-- JournalNode -->

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/opt/hadoop/journal</value> <!-- JN 数据目录 -->

</property>

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value> <!-- 启用自动故障转移 -->

</property>

  • workers - 指定 DataNode

plaintext

node4

node5

node6

  • yarn-site.xml - 配置 YARN HA

xml

<property>

<name>yarn.resourcemanager.ha.enabled</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>yarn-cluster</value>

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<property>

<name>yarn.resourcemanager.hostname.rm1</name>

<value>node3</value> <!-- RM 主节点 -->

</property>

<property>

<name>yarn.resourcemanager.hostname.rm2</name>

<value>node4</value> <!-- RM 备节点 -->

</property>


三、启动高可用集群

1. 启动 ZooKeeper(node1~node3)

bash

# 在 ZK 节点上

zkServer.sh start

2. 启动 JournalNode(node1~node3)

bash

hdfs --daemon start journalnode

3. 格式化并启动 NameNode HA

bash

# 在 node1 上格式化(首次)

hdfs namenode -format

hdfs zkfc -formatZK  # 在 ZK 中初始化 HA 状态

# 启动 node1 的 NameNode

hdfs --daemon start namenode

# 在 node2 上同步元数据

hdfs namenode -bootstrapStandby

# 启动所有服务

start-dfs.sh  # 启动 HDFS 集群

start-yarn.sh # 启动 YARN 集群


四、验证高可用功能

  1. 检查服务状态

bash

hdfs haadmin -getServiceState nn1  # 应返回 active

yarn rmadmin -getServiceState rm1   # 应返回 active

  1. 模拟故障转移

bash

# 手动杀死 active NameNode

kill -9 <NameNode_PID>

# 30秒内 ZKFC 应自动切换备节点为 active

hdfs haadmin -getServiceState nn2  # 验证是否变为 active

  1. Web UI 访问
    • NameNode: http://node1:9870
    • ResourceManager: http://node3:8088

五、关键运维命令

功能

命令示例

手动切换 NameNode

hdfs haadmin -failover nn1 nn2

查看 JournalNode 状态

hdfs dfsadmin -report

修复数据块

hdfs fsck / -delete

添加新节点

将新主机加入 workers 并重启集群

注意

  1. 所有配置文件修改后需同步到集群所有节点(可用 scp 分发)18。
  2. 高可用下需确保 JournalNode 和 ZK 服务奇数节点存活(至少 3 台)310。
  3. 生产环境建议配置 Kerberos 认证 和 磁盘 RAID 提升安全性。

完整操作流程参考:Hadoop 官方 HA 文档

Centos8搭建hadoop高可用集群的更多相关文章

  1. 基于 ZooKeeper 搭建 Hadoop 高可用集群

    一.高可用简介 二.集群规划 三.前置条件 四.集群配置 五.启动集群 六.查看集群 七.集群的二次启动 一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS ...

  2. Hadoop 学习之路(八)—— 基于ZooKeeper搭建Hadoop高可用集群

    一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求 ...

  3. Hadoop 系列(八)—— 基于 ZooKeeper 搭建 Hadoop 高可用集群

    一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求 ...

  4. hadoop高可用集群搭建小结

    hadoop高可用集群搭建小结1.Zookeeper集群搭建2.格式化Zookeeper集群 (注:在Zookeeper集群建立hadoop-ha,amenode的元数据)3.开启Journalmno ...

  5. Hadoop高可用集群存在的一些共性问题

    Hadoop高可用集群存在的一些共性问题 1.NameNode 偶然性挂掉 问题原因: 用群启脚本启动HA集群,启动过程中NameNode要依赖于JournalNode,所以在启动过程中, ​ Nam ...

  6. Hadoop高可用集群

    1.简介 若HDFS集群中只配置了一个NameNode,那么当该NameNode所在的节点宕机,则整个HDFS就不能进行文件的上传和下载. 若YARN集群中只配置了一个ResourceManager, ...

  7. 搭建 Kubernetes 高可用集群

    使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载 ...

  8. 搭建Redis高可用集群的哨兵模式(Redis-Sentinel)【Windows环境】

    参考 https://blog.csdn.net/itanping/article/details/100544152 哨兵模式搭建好,Java中配置和使用Redis高可用集群的哨兵模式,引入Jedi ...

  9. 阿里云搭建k8s高可用集群(1.17.3)

    首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...

  10. 基于 ZooKeeper 搭建 Spark 高可用集群

    一.集群规划 二.前置条件 三.Spark集群搭建         3.1 下载解压         3.2 配置环境变量         3.3 集群配置         3.4 安装包分发 四.启 ...

随机推荐

  1. Python 3.14 新特性盘点,更新了些什么?

    Python 3.14.0 稳定版将于 2025 年 10 月正式发布,目前已进入 beta 测试阶段.这意味着在往后的几个月里,3.14 的新功能已冻结,不再合入新功能(除了修复问题和完善文档). ...

  2. RabbitMQ高级使用

    概述 在支付场景中,支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付.但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单状态却显示未支付,数 ...

  3. 1+2+...+n

    时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.cas ...

  4. win10系统 wsappx消耗内存导致死机

    问题描述:win10系统开机后,wsappx内存占用率一路飙升,直至电脑蓝屏,手动kill后,过一会死灰复燃. 问题解决:win+R输入 regedit 跳转注册表编辑器,找到 HKEY_LOCAL_ ...

  5. linux安全基线自查手册

    1.Redhat/CentOS 7.x配置模板 1.1 帐号管理 1.1.1 检查是否设置除root之外UID为0的用户 严重级别:中危 理论依据:任何UID为0的帐户都具有系统上的超级用户特权,只有 ...

  6. 搭建邮局-3.安装邮局前端roundcube和测试

    目录 搭建邮局-1.安装hMailserver和配置邮局 https://www.cnblogs.com/daen/p/16040202.html 搭建邮局-2.添加域名和域名解析 https://w ...

  7. 使用Logback实现不同微服务输出各自的日志文件

    找到logback-spring.xml配置文件,在里面使用如下配置 <!--定义策略日志文件的存储地址--><property name="logStrategy.pat ...

  8. wso2~api生命周期与关联事件

    api生命周期 CREATED 建立 PRE-RELEASED 预发布 PUBLISHED 发布 DEPRECATED 删除 BLOCKED 冻结 RETIRED 退役 状态为Published的ap ...

  9. Tcode:PFAL说明

    Short text HR: ALE Distribution of HR Master Data Description. Scenario 1: Distribution of HR Master ...

  10. 对S4的看法

    我是12年开始接触SAP的,13年还没毕业就进入了某个项目做CRM...在这个项目之前,我学习了abap开发基础,还有web dynpro开发基础,以及CRM UI开发基础. 后来我入职了甲方,那时候 ...