Centos8搭建hadoop高可用集群
以下是基于 CentOS 8 搭建高可用 Hadoop 集群的完整操作流程及命令,涵盖 6 台主机的规划、部署步骤和高可用(HA)配置。结合 Hadoop 3.x 官方文档和最佳实践整理:
先决条件
- 硬件规划
- 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
- 软件要求
- 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 集群
四、验证高可用功能
- 检查服务状态
bash
hdfs haadmin -getServiceState nn1 # 应返回 active
yarn rmadmin -getServiceState rm1 # 应返回 active
- 模拟故障转移
bash
# 手动杀死 active NameNode
kill -9 <NameNode_PID>
# 30秒内 ZKFC 应自动切换备节点为 active
hdfs haadmin -getServiceState nn2 # 验证是否变为 active
- Web UI 访问
- NameNode: http://node1:9870
- ResourceManager: http://node3:8088
五、关键运维命令
|
功能 |
命令示例 |
|
手动切换 NameNode |
hdfs haadmin -failover nn1 nn2 |
|
查看 JournalNode 状态 |
hdfs dfsadmin -report |
|
修复数据块 |
hdfs fsck / -delete |
|
添加新节点 |
将新主机加入 workers 并重启集群 |
注意:
- 所有配置文件修改后需同步到集群所有节点(可用 scp 分发)18。
- 高可用下需确保 JournalNode 和 ZK 服务奇数节点存活(至少 3 台)310。
- 生产环境建议配置 Kerberos 认证 和 磁盘 RAID 提升安全性。
完整操作流程参考:Hadoop 官方 HA 文档。
Centos8搭建hadoop高可用集群的更多相关文章
- 基于 ZooKeeper 搭建 Hadoop 高可用集群
一.高可用简介 二.集群规划 三.前置条件 四.集群配置 五.启动集群 六.查看集群 七.集群的二次启动 一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS ...
- Hadoop 学习之路(八)—— 基于ZooKeeper搭建Hadoop高可用集群
一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求 ...
- Hadoop 系列(八)—— 基于 ZooKeeper 搭建 Hadoop 高可用集群
一.高可用简介 Hadoop 高可用 (High Availability) 分为 HDFS 高可用和 YARN 高可用,两者的实现基本类似,但 HDFS NameNode 对数据存储及其一致性的要求 ...
- hadoop高可用集群搭建小结
hadoop高可用集群搭建小结1.Zookeeper集群搭建2.格式化Zookeeper集群 (注:在Zookeeper集群建立hadoop-ha,amenode的元数据)3.开启Journalmno ...
- Hadoop高可用集群存在的一些共性问题
Hadoop高可用集群存在的一些共性问题 1.NameNode 偶然性挂掉 问题原因: 用群启脚本启动HA集群,启动过程中NameNode要依赖于JournalNode,所以在启动过程中, Nam ...
- Hadoop高可用集群
1.简介 若HDFS集群中只配置了一个NameNode,那么当该NameNode所在的节点宕机,则整个HDFS就不能进行文件的上传和下载. 若YARN集群中只配置了一个ResourceManager, ...
- 搭建 Kubernetes 高可用集群
使用 3 台阿里云服务器(k8s-master0, k8s-master1, k8s-master2)作为 master 节点搭建高可用集群,负载均衡用的是阿里云 SLB ,需要注意的是由于阿里云负载 ...
- 搭建Redis高可用集群的哨兵模式(Redis-Sentinel)【Windows环境】
参考 https://blog.csdn.net/itanping/article/details/100544152 哨兵模式搭建好,Java中配置和使用Redis高可用集群的哨兵模式,引入Jedi ...
- 阿里云搭建k8s高可用集群(1.17.3)
首先准备5台centos7 ecs实例最低要求2c4G 开启SLB(私网) 这里我们采用堆叠拓扑的方式构建高可用集群,因为k8s 集群etcd采用了raft算法保证集群一致性,所以高可用必须保证至少3 ...
- 基于 ZooKeeper 搭建 Spark 高可用集群
一.集群规划 二.前置条件 三.Spark集群搭建 3.1 下载解压 3.2 配置环境变量 3.3 集群配置 3.4 安装包分发 四.启 ...
随机推荐
- Python 3.14 新特性盘点,更新了些什么?
Python 3.14.0 稳定版将于 2025 年 10 月正式发布,目前已进入 beta 测试阶段.这意味着在往后的几个月里,3.14 的新功能已冻结,不再合入新功能(除了修复问题和完善文档). ...
- RabbitMQ高级使用
概述 在支付场景中,支付成功后利用RabbitMQ通知交易服务,更新业务订单状态为已支付.但是大家思考一下,如果这里MQ通知失败,支付服务中支付流水显示支付成功,而交易服务中的订单状态却显示未支付,数 ...
- 1+2+...+n
时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M 题目描述 求1+2+3+...+n,要求不能使用乘除法.for.while.if.else.switch.cas ...
- win10系统 wsappx消耗内存导致死机
问题描述:win10系统开机后,wsappx内存占用率一路飙升,直至电脑蓝屏,手动kill后,过一会死灰复燃. 问题解决:win+R输入 regedit 跳转注册表编辑器,找到 HKEY_LOCAL_ ...
- linux安全基线自查手册
1.Redhat/CentOS 7.x配置模板 1.1 帐号管理 1.1.1 检查是否设置除root之外UID为0的用户 严重级别:中危 理论依据:任何UID为0的帐户都具有系统上的超级用户特权,只有 ...
- 搭建邮局-3.安装邮局前端roundcube和测试
目录 搭建邮局-1.安装hMailserver和配置邮局 https://www.cnblogs.com/daen/p/16040202.html 搭建邮局-2.添加域名和域名解析 https://w ...
- 使用Logback实现不同微服务输出各自的日志文件
找到logback-spring.xml配置文件,在里面使用如下配置 <!--定义策略日志文件的存储地址--><property name="logStrategy.pat ...
- wso2~api生命周期与关联事件
api生命周期 CREATED 建立 PRE-RELEASED 预发布 PUBLISHED 发布 DEPRECATED 删除 BLOCKED 冻结 RETIRED 退役 状态为Published的ap ...
- Tcode:PFAL说明
Short text HR: ALE Distribution of HR Master Data Description. Scenario 1: Distribution of HR Master ...
- 对S4的看法
我是12年开始接触SAP的,13年还没毕业就进入了某个项目做CRM...在这个项目之前,我学习了abap开发基础,还有web dynpro开发基础,以及CRM UI开发基础. 后来我入职了甲方,那时候 ...