当前位置: 首页 > news >正文

Centos8搭建hadoop高可用集群

以下是基于 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 文档。

http://www.njgz.com.cn/news/361.html

相关文章:

  • 连载小说《Server》 Part 1 《简幻欢》 序言
  • 折腾笔记[30]-使用bun_python通过javascript优雅调用python库
  • Linux系统目录结构完全指南:目录与文件夹的本质区别
  • 【2025最新】官方Claude API中转服务 | 快速接入Claude 4 API | 国内Claude API接口中转指南
  • 基于Qt封装tomlplusplus得到读写键值对的库
  • AT_abc396_c [ABC396C] Buy Balls 题解
  • [ABC394D] Colorful Bracket Sequence 题解
  • K8S
  • Redis桌面管理工具Another-Redis-Desktop-Manager 1.3.7 安装全流程
  • 1
  • 创建【网络连接】的快捷方式
  • 线性代数
  • 12 MCP Servers的介绍
  • 500部迪士尼电影下载推荐_迪士尼动画大全列表必看网盘分享
  • 点分治
  • 华为荣耀手机还原主屏幕布局
  • ESP IDF引入外部资源文件
  • Day11 矩阵乘法 dp、*常系数齐次线性递推、*动态 dp
  • 亿邮相关漏洞总结
  • 使用DFU模式快速重装macOS15到macbook
  • 大模型的JSON之殇:从脆弱的API调用到稳健的未来
  • [20250727]数论基本概念、最大公约数
  • day05
  • 读心与芯:我们与机器人的无限未来06问题或方案
  • 使用Vue.js实现表单验证
  • HackerOne漏洞报告:AddTagToAssets操作中的IDOR漏洞分析
  • 2025.7 广大附中集训游记
  • Cursor 远程主机无法下载 Python 插件解决
  • 图灵奖和诺贝尔奖双料得主、AI教父Hinton教授国内首次演讲PPT全文实录
  • Chiplet封装技术全面介绍