Hadoop高可用集群部署
一、Zookeeper 集群部署
1. 环境准备与解压安装
首先在各节点创建统一的安装目录/opt/module/,将 Zookeeper 安装包上传至服务器后执行解压操作:
tar -zxvf apache-zookeeper-3.9.3-bin.tar.gz -C ../module/
mv apache-zookeeper-3.9.3-bin/ zookeeper-3.9.3
2. 核心配置文件修改
进入配置目录并创建自定义配置文件:
cd zookeeper-3.9.3/conf
cp zoo_sample.cfg zoo.cfg
在zoo.cfg中添加以下关键配置(注意数据目录需提前创建):
# 基本配置
tickTime=2000 # 基本时间单位(毫秒)
initLimit=10 # Leader选举初始化超时时间
syncLimit=5 # 与Leader同步的超时时间
clientPort=2181 # 客户端连接端口
# 数据与日志存储目录
dataDir=/opt/module/zookeeper-3.9.3/data # 数据存储目录
dataLogDir=/opt/logs/zookeeper # 日志存储目录
# 集群节点配置(格式:server.ID=主机名:选举端口:通信端口)
server.1=node1:2888:3888 # node1节点配置
server.2=node2:2888:3888 # node2节点配置
server.3=node3:2888:3888 # node3节点配置
# 自动清理配置(可选)
autopurge.purgeInterval=24 # 自动清理频率(小时)
autopurge.snapRetainCount=3 # 保留快照数量
3. 节点标识配置
在每个节点的数据目录中创建唯一标识文件:
mkdir -p /opt/module/zookeeper-3.9.3/data # 创建数据目录
cd /opt/module/zookeeper-3.9.3/data
echo "1" > myid # node1节点写入1
# node2节点执行:echo "2" > myid
# node3节点执行:echo "3" > myid
4. 集群文件分发
通过 rsync 工具快速同步安装目录到其他节点:
rsync -rv zookeeper-3.9.3 node2:/opt/module/ # 分发到node2
rsync -rv zookeeper-3.9.3 node3:/opt/module/ # 分发到node3
5. 环境变量配置
在/etc/profile中添加 Zookeeper 环境变量并生效:
# ZK_HOME配置
export ZK_HOME=/opt/module/zookeeper-3.9.3
export PATH=$PATH:$ZK_HOME/bin
source /etc/profile # 使配置立即生效
6. 集群启动与状态验证
在所有节点执行启动命令,并通过状态检查确认集群运行情况:
zkServer.sh start # 启动Zookeeper服务
zkServer.sh status # 查看节点状态(应显示Leader/Follower)
二、Hadoop 高可用集群部署
1. 基础环境准备
解压 Hadoop 压缩包
tar -zxvf hadoop-3.4.1.tar.gz -C ../module/
2.修改配置文件
hdfs-site.xml
<configuration>
<!-- 定义HDFS高可用集群的命名服务ID -->
<!-- 客户端通过此名称访问HDFS,而不需要直接指定NameNode主机名 -->
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<!-- 指定命名服务下的NameNode标识符列表 -->
<!-- 多个NameNode通过逗号分隔,用于实现主备切换 -->
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<!-- 配置每个NameNode的RPC通信地址 -->
<!-- 客户端通过此地址与NameNode进行元数据操作 -->
<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>
<!-- 配置每个NameNode的HTTP Web UI地址 -->
<!-- 用户通过此地址访问NameNode管理界面 -->
<property