Hadoop高可用集群搭建

Hadoop高可用(HA)集群是企业级大数据平台的核心基础设施,通过多主节点冗余和自动故障转移机制,确保系统在单点故障时仍能正常运行。本文将详细介绍如何基于CentOS 7搭建Hadoop 3.X高可用集群,涵盖环境准备、组件配置、集群启动及管理的全流程。

一、环境要求与准备

1. 基础环境配置
bash 复制代码
# 系统要求
CentOS 7.x
JDK 8+
Zookeeper 3.7+
Hadoop 3.X
2. 环境变量配置
bash 复制代码
# 编辑~/.bash_profile
export JAVA_HOME=/home/hadoop/app/jdk
export ZOOKEEPER_HOME=/home/hadoop/app/zookeeper
export HADOOP_HOME=/home/hadoop/app/hadoop
export PATH=$PATH:$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

# 使配置生效
source ~/.bash_profile
3. 集群节点规划
主机名 NameNode ResourceManager ZKFC DataNode NodeManager JournalNode Zookeeper
hadoop01
hadoop02
hadoop03
hadoop04

二、网络与SSH配置

1. 关闭防火墙
bash 复制代码
# 所有节点执行
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
2. 配置域名解析
bash 复制代码
# 编辑所有节点的/etc/hosts
vi /etc/hosts

# 添加以下内容
192.168.1.101 hadoop01
192.168.1.102 hadoop02
192.168.1.103 hadoop03
192.168.1.104 hadoop04
3. SSH免密登录配置
bash 复制代码
# 所有节点生成密钥对
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 所有节点互传公钥
ssh-copy-id hadoop@hadoop01
ssh-copy-id hadoop@hadoop02
ssh-copy-id hadoop@hadoop03
ssh-copy-id hadoop@hadoop04

# 验证免密登录
ssh hadoop01

三、Zookeeper集群安装

1. 解压与配置
bash 复制代码
# 解压安装包(hadoop01执行)
tar -zxvf apache-zookeeper-3.7.1-bin.tar.gz -C ~/app/
cd ~/app/
mv apache-zookeeper-3.7.1-bin zookeeper

# 配置文件
cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfg
vi $ZOOKEEPER_HOME/conf/zoo.cfg

# 修改内容
dataDir=/home/hadoop/data/zk
server.1=hadoop01:2888:3888
server.2=hadoop02:2888:3888
server.3=hadoop03:2888:3888
2. 复制配置到其他节点
bash 复制代码
# 从hadoop01复制到其他节点
scp -r ~/app/zookeeper hadoop@hadoop02:~/app/
scp -r ~/app/zookeeper hadoop@hadoop03:~/app/
3. 创建myid文件
bash 复制代码
# hadoop01执行
mkdir -p /home/hadoop/data/zk
echo 1 > /home/hadoop/data/zk/myid

# hadoop02执行
mkdir -p /home/hadoop/data/zk
echo 2 > /home/hadoop/data/zk/myid

# hadoop03执行
mkdir -p /home/hadoop/data/zk
echo 3 > /home/hadoop/data/zk/myid
4. 启动Zookeeper集群
bash 复制代码
# 所有ZK节点启动服务
zkServer.sh start

# 检查状态(每个节点应显示leader或follower)
zkServer.sh status

四、Hadoop配置文件详解

1. hadoop-env.sh
bash 复制代码
# 配置Java路径
export JAVA_HOME=/home/hadoop/app/jdk
2. core-site.xml
xml 复制代码
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/data/hdfs</value>
    </property>
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop01:2181,hadoop02:2181,hadoop03:2181</value>
    </property>
</configuration>
3. hdfs-site.xml
xml 复制代码
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.nameservices</name>
        <value>mycluster</value>
    </property>
    <property>
        <name>dfs.ha.namenodes.mycluster</name>
        <value>nn1,nn2</value>
    </property>
    <property>
        <name>dfs.namenode.rpc-address.mycluster.nn1</name>
        <value>hadoop01:8020</value>
    </property>
    <!-- 其他NameNode配置... -->
    <property>
        <name>dfs.ha.automatic-failover.enabled</name>
        <value>true</value>
    </property>
</configuration>
4. yarn-site.xml
xml 复制代码
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>
    <!-- 其他RM配置... -->
</configuration>
5. mapred-site.xml
xml 复制代码
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_HOME/share/hadoop/mapreduce/*:$HADOOP_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>
6. workers文件
bash 复制代码
# 配置DataNode节点
hadoop01
hadoop02
hadoop03

五、Hadoop集群启动流程

1. 启动JournalNode
bash 复制代码
# 在hadoop02、hadoop03、hadoop04上执行
$HADOOP_HOME/sbin/hadoop-daemon.sh start journalnode

# 验证启动
jps | grep JournalNode
2. 格式化HDFS
bash 复制代码
# 在hadoop01上执行
$HADOOP_HOME/bin/hdfs namenode -format

# 启动第一个NameNode
$HADOOP_HOME/sbin/hadoop-daemon.sh start namenode
3. 同步第二个NameNode
bash 复制代码
# 在hadoop02上执行
$HADOOP_HOME/bin/hdfs namenode -bootstrapStandby
4. 格式化ZKFC
bash 复制代码
# 在hadoop01上执行
$HADOOP_HOME/bin/hdfs zkfc -formatZK
5. 启动集群
bash 复制代码
# 停止所有服务(确保干净启动)
$HADOOP_HOME/sbin/stop-all.sh

# 启动HDFS和YARN
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

# 启动ZKFC
$HADOOP_HOME/sbin/hadoop-daemon.sh start zkfc

六、Web UI访问

服务 URL 说明
YARN ResourceManager http://hadoop01:8088/ui2 资源管理与作业监控
HDFS NameNode http://hadoop01:9870 HDFS文件系统查看
MapReduce HistoryServer http://hadoop01:19888 历史作业详情

七、高可用集群管理

1. ResourceManager管理
bash 复制代码
# 查看RM状态
yarn rmadmin -getServiceState rm1

# 手动切换为Active状态
yarn rmadmin -transitionToActive rm2

# 刷新队列配置
yarn rmadmin -refreshQueues
2. NameNode管理
bash 复制代码
# 查看NN状态
hdfs haadmin -getServiceState nn1

# 手动故障转移
hdfs haadmin -failover --forceactive nn1 nn2

# 检查健康状态
hdfs haadmin -checkHealth nn2

八、常见问题排查

1. 服务无法启动
  • 检查日志:$HADOOP_HOME/logs/
  • 确认配置文件一致性
  • 检查端口占用:netstat -tulpn | grep <端口号>
2. 自动故障转移失败
  • 验证Zookeeper集群状态
  • 检查SSH免密配置
  • 确认dfs.ha.fencing.methods配置正确
3. 数据不同步
  • 检查JournalNode服务状态
  • 查看NameNode日志中的编辑日志同步情况
  • 手动执行bootstrapStandby操作

九、性能优化建议

  1. 内存配置优化

    bash 复制代码
    # 修改yarn-site.xml
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>65536</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>32768</value>
    </property>
  2. HDFS块大小调整

    bash 复制代码
    # hdfs-site.xml
    <property>
        <name>dfs.blocksize</name>
        <value>268435456</value> <!-- 256MB -->
    </property>
  3. 数据本地化优化

    bash 复制代码
    # yarn-site.xml
    <property>
        <name>yarn.nodemanager.local-dirs</name>
        <value>/data1/hadoop/nm-local-dir,/data2/hadoop/nm-local-dir</value>
    </property>

通过以上步骤,你可以成功搭建一个高可用的Hadoop集群,实现HDFS和YARN的双高可用架构。在生产环境中,建议定期备份关键数据,监控集群性能,并进行必要的容量规划,以确保系统稳定运行。

相关推荐
FII工业富联科技服务2 小时前
GPT-6 Astra发布,Agent的竞争开始从“会调用工具”走向“完成完整工作”
大数据·人工智能·gpt·架构·机器人·制造
QYR-分析3 小时前
蓝海赛道高速扩容!全球小型观察ROV市场格局、细分场景与发展趋势分析
大数据·运维·云计算
Elastic 中国社区官方博客3 小时前
Elasticsearch Python DSL 客户端开发
大数据·数据库·python·elasticsearch·搜索引擎·全文检索
hughnz3 小时前
石油工程的端到端数字化转型:演化还是革命
大数据·人工智能·科技
龙亘川4 小时前
旅游强国建设|一网统管智慧旅游服务模块,赋能节假日文旅数字化治理
大数据·数据库·人工智能·科技·智慧城市·旅游
Databend4 小时前
只看 PASS 会骗你,6 条 Agent Trace 里的 Coding Agent 评测真相
大数据·数据库·agent
数字新视界4 小时前
动环监控可视化技术在机房管理智能化中的实际应用剖析
大数据·人工智能·数据中心·微模块机房·模块化机房
朴实赋能4 小时前
AI拒答机制实战:心理咨询危机识别Agent三层防护、五级分层与六类智能体拆解
大数据·人工智能·多agent协同·心理咨询ai·心理危机识别·ai拒答机制·隐私匿名化
龙亘川5 小时前
智慧景区建设实践|文旅热度持续走高,景区如何把流量稳稳转化为口碑?
大数据·人工智能·科技·信息可视化·智慧城市