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 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 文档

相关推荐
一匹电信狗19 小时前
【Linux我做主】细说进程等待
linux·运维·服务器·c++·ubuntu·小程序·开源
芒果量化19 小时前
redis - 远程发送买卖信号、本地接收信号处理
redis·python·金融
网安INF19 小时前
【论文阅读】-《Besting the Black-Box: Barrier Zones for Adversarial Example Defense》
人工智能·深度学习·网络安全·黑盒攻击
思辨共悟19 小时前
(Python)数据分析:概念和流程
python·数据分析
数据科学作家19 小时前
0基础怎么学习数据分析、统计分析、机器学习?数学不好、一看编程就头疼,能行吗?
python·数据分析·统计分析·stata·spss·统计学·计量经济学
AKAMAI20 小时前
部署在用户身边,将直播延迟压缩至毫秒级
人工智能·云计算·直播
在钱塘江20 小时前
LangGraph从新手到老师傅 - 11 - 自定义序列化处理复杂数据
人工智能·python
THMAIL20 小时前
机器学习从入门到精通 - 卷积神经网络(CNN)实战:图像识别模型搭建指南
linux·人工智能·python·算法·机器学习·cnn·逻辑回归
无法无天霸王龙20 小时前
云计算培训为什么这么贵?
linux·运维·学习·云计算
小蒜学长20 小时前
基于Hadoop的网约车公司数据分析系统设计(代码+数据库+LW)
java·大数据·数据库·hadoop·spring boot·后端