Hadoop HA 完全分布式集群搭建(ZooKeeper)

本文详细记录了搭建Hadoop 3.2.3 HA集群过程,涉及环境配置、JN初始化、ZK设置、NN同步、HDFS与YARN服务启动及测试。从初始化到验证,包括自定义脚本和重要配置参数。

学了大半个月hadoop,现在来完整搭建并测试一遍HA集群,本文总共使用了三台CentOS 7.9服务器:hadoop102 hadoop103 hadoop104,hadoop版本为3.2.3,ZK版本为3.5.9,JDK版本为1.8;以下是本次实验所配置的环境变量

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_321
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.2.3

export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

具体的HA配置信息以及使用到的自定义Shell脚本在下一篇博客发出


第一步:使用自己写的 xcall shell脚本同时让所有服务器初始化启动JN
JN
第二步:初始化hadoop102的namenode
在这里插入图片描述
第三步:开启hadoop102的namenode服务
在这里插入图片描述
第四步:以standby状态同步hadoop102的namenode来初始化hadoop103 hadoop104的namenode

hdfs namenode -bootstrapStandby

在这里插入图片描述
在这里插入图片描述
第五步:关闭HDFS服务
在这里插入图片描述
第六步:通过自己写的 zk shell脚本开启所有服务器上的ZooKeeper
在这里插入图片描述
第七步:初始化ZK(在哪台服务器初始化ZK都可以),主要是用于创建监控HA集群节点目录,如果之前创建过HA集群节点目录则会提示你是否覆盖原目录,按Y选择format原目录然后继续初始化;至此初始化工作已经完成,可以开始正式启动HA集群

hdfs zkfc -formatZK

在这里插入图片描述
第八步:启动所有节点的JN服务,然后再通过官方脚本启动HDFS;注意这里之所以要先启动JN是因为:如果通过官方启动脚本启动HDFS,则会先启动NameNode和DataNode,再启动JN,这里启动NN的时候会先跟JN进行RPC心跳连接,如果默认10秒之后JN还没有被启动,NN则会认为无法连接JN从而报错,这里也可以手动修改core-site.xml的NN连接JN的心跳重连配置

<!-- NN 连接 JN 重试次数,默认是 10 次 -->
<property>
<name>ipc.client.connect.max.retries</name>
<value>10</value>
</property>
<!-- 重试时间间隔,默认 1s -->
<property>
<name>ipc.client.connect.retry.interval</name>
<value>1000</value>
</property>

在这里插入图片描述
第九步(可跳过):查看此时HDFS的 active NN 节点,下图显示此时是hadoop103为 active NN 节点
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
第十步:启动yarn,由于此时三台服务器都是RM,所以无论在哪台服务器上启动yarn都可以
在这里插入图片描述
在这里插入图片描述
第十一步(可跳过):测试HDFS是否正常
在这里插入图片描述
在这里插入图片描述
第十二步(可跳过):测试MapReduce和Yarn是否正常
在这里插入图片描述
在这里插入图片描述
可以发现日志聚集功能也正常
在这里插入图片描述

<think>嗯,用户现在的问题是希望在Hadoop完全分布式集群搭建Kafka高可用集群。首先,需要理解用户的场景:用户可能正在搭建一个大数据处理平台,需要集成Kafka实现实时数据流处理,同时要求高可用性。用户引用的资料里提到SSH免密登录、Hadoop集群配置、Zookeeper集群搭建等,说明用户已经有基本环境,但可能对Kafka集成部分不太熟悉。用户的需求明确,但深层需求可能是确保Kafka在Hadoop集群上稳定运行,避免单点故障,并能够和现有组件如Hive、Spark等协同工作。用户提供的引用中有提到Zookeeper、Flink、HiveServer2等,推测用户可能计划构建包含流处理和批处理的综合系统,所以Kafka的高可用性至关重要。接下来需要确定用户的环境:从引用看,用户似乎已经部署了Hadoop集群(包括NameNode和ResourceManager的高可用),Zookeeper集群也已搭建(引用[2][3])。因此,步骤应该从验证Zookeeper状态开始,因为Kafka依赖Zookeeper进行协调和元数据管理。Kafka高可用集群的核心在于多Broker配置,每个Broker需要唯一的ID和相同的Zookeeper连接地址。配置文件中必须设置监听地址、日志存储路径、副本数等关键参数。分发配置文件到所有节点并启动Kafka时,需要注意启动顺序:先Zookeeper,后Kafka。用户可能遇到的常见问题包括端口冲突、磁盘权限不足、副本配置错误导致高可用失效。因此,准备在相关问题中补充这些运维知识点。最后,测试部分需要覆盖创建多分区Topic、生产者-消费者验证、模拟故障转移等场景,确保高可用机制生效。还需要考虑和现有Hadoop组件的兼容性,比如HDFS路径权限(如果Kafka日志存HDFS)、防火墙设置等。引用[4]提到Spark启动命令,用户可能有流计算需求,所以应该提醒后续集成SparkStreaming或Flink的配置要点。</think> 以下是基于 Hadoop 完全分布式集群搭建 Kafka 高可用集群的详细步骤(需确保 Hadoop 集群Zookeeper 集群及 SSH 免密登录已就绪): --- ### **一、前置条件** 1. **Hadoop 集群** - 确认 HDFS/YARN 高可用已启用(如 NameNode HA、ResourceManager HA)[^3] 2. **Zookeeper 集群** - 至少 3 节点(例如 `hadoop01,hadoop02,hadoop03:2181`)[^2][^5] - 验证状态:`zkServer.sh status` 3. **Java 环境** - 所有节点安装 JDK 8+,配置 `JAVA_HOME`(参考 `hadoop-env.sh` 设置)[^1][^3] 4. **SSH 免密登录** - 确保集群节点间可无密码互访[^1] --- ### **二、Kafka 集群搭建步骤** #### **1. 下载并分发 Kafka** ```bash # 在 hadoop01 操作 wget https://downloads.apache.org/kafka/3.6.1/kafka_2.13-3.6.1.tgz tar -zxvf kafka_2.13-3.6.1.tgz -C /usr/local/ scp -r /usr/local/kafka_2.13-3.6.1 hadoop02:/usr/local/ scp -r /usr/local/kafka_2.13-3.6.1 hadoop03:/usr/local/ ``` #### **2. 配置 Kafka 高可用** 编辑每台节点的 `server.properties`(路径:`$KAFKA_HOME/config/server.properties`): ```properties # 唯一 Broker ID(不同节点不同ID) broker.id=1 # hadoop01=1, hadoop02=2, hadoop03=3 # 监听地址(内网IP) listeners=PLAINTEXT://hadoop01:9092 # 日志存储目录(确保目录存在且可写) log.dirs=/data/kafka-logs # 建议使用独立磁盘 # Zookeeper 集群地址 zookeeper.connect=hadoop01:2181,hadoop02:2181,hadoop03:2181 # 高可用关键配置 default.replication.factor=3 # 副本数≥Broker数 min.insync.replicas=2 # 最小同步副本数 offsets.topic.replication.factor=3 transaction.state.log.replication.factor=3 ``` #### **3. 同步配置并设置环境变量** ```bash # 分发配置文件(以 hadoop01 为基准) scp /usr/local/kafka/config/server.properties hadoop02:/usr/local/kafka/config/ scp /usr/local/kafka/config/server.properties hadoop03:/usr/local/kafka/config/ # 所有节点添加环境变量 echo 'export KAFKA_HOME=/usr/local/kafka' >> /etc/profile echo 'export PATH=$PATH:$KAFKA_HOME/bin' >> /etc/profile source /etc/profile # [^4] ``` #### **4. 启动 Kafka 集群** ```bash # 所有节点依次启动(先启Zookeeper,再启Kafka) zkServer.sh start # 若Zookeeper未运行 kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties # 验证进程 jps | grep Kafka # 应看到 Kafka 进程 ``` #### **5. 测试高可用** ```bash # 创建 Topic(副本数=3) kafka-topics.sh --create \ --bootstrap-server hadoop01:9092 \ --replication-factor 3 \ --partitions 3 \ --topic test-ha # 查看 Topic 状态 kafka-topics.sh --describe \ --bootstrap-server hadoop01:9092 \ --topic test-ha # 模拟故障(关闭一个Broker后观察Leader切换) kafka-server-stop.sh # 在某个节点执行 ``` --- ### **三、关键配置说明** | **配置项** | **值示例** | **作用** | |------------|------------|----------| | `broker.id` | 1/2/3 | Broker 唯一标识 | | `zookeeper.connect` | `hadoop01:2181,...` | 集群协调服务地址 | | `default.replication.factor` | 3 | 数据默认副本数 | | `min.insync.replicas` | 2 | 最小同步副本数(保证数据安全) | | `log.dirs` | `/data/kafka-logs` | 高性能磁盘目录 | --- ### **四、常见问题** 1. **端口冲突** - 检查 `server.properties` 中的 `listeners` 端口是否被占用 2. **磁盘空间不足** - 监控 `/data/kafka-logs` 目录,设置日志清理策略: ```properties log.retention.hours=168 # 保留7天 log.retention.bytes=1073741824 # 1GB/分区 ``` 3. **副本不同步** - 确保 `min.insync.replicas < replication.factor` --- ### **相关配置参考** - **Zookeeper 集成**:Zookeeper 管理 Kafka Broker 元数据与选举[^5] - **Hadoop 协作**:Kafka 数据可下沉至 HDFS(需配置 `connect-hdfs` 插件) - **安全加固**:建议启用 SASL/SSL 认证(生产环境必备)
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值