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的双高可用架构。在生产环境中,建议定期备份关键数据,监控集群性能,并进行必要的容量规划,以确保系统稳定运行。

相关推荐
巴里巴气22 分钟前
zookeeper基本概念介绍
linux·分布式·zookeeper
zuozewei1 小时前
随笔之TDengine基准测试示例
大数据·时序数据库·tdengine
数据要素X4 小时前
【数据架构10】数字政府架构篇
大数据·运维·数据库·人工智能·架构
ApacheSeaTunnel5 小时前
从日志到告警,带你用好 SeaTunnel 的事件监听能力
大数据·数据集成·seatunnel·技术分享
appearappear6 小时前
防止飞书重复回调通知分布式锁
分布式·飞书
智海观潮7 小时前
DeepSeek在大数据领域正掀起一场深刻的变革
大数据·ai·deepseek
陈煜的博客7 小时前
elasticSearch 增删改查 java api
java·大数据·elasticsearch
zskj_zhyl8 小时前
让科技之光,温暖银龄岁月——智绅科技“智慧养老进社区”星城国际站温情纪实
大数据·人工智能·科技·生活
wzy06239 小时前
基于 Hadoop 生态圈的数据仓库实践 —— OLAP 与数据可视化(三)
hadoop·impala
不辉放弃9 小时前
Spark的累加器(Accumulator)
大数据·数据库·spark