hadoop、zookeeper完全分布式、高可用环境搭建

本文详细介绍了如何搭建Hadoop和Zookeeper的完全分布式及高可用环境,包括集群准备、安装配置、启动服务以及验证高可用性。主要步骤包括:集群规划,安装JDK和配置SSH,配置HDFS-HA和YARN-HA,以及启动和验证整个集群的正常运行。

完全分布式

集群准备

准备3台客户机

客户机要关闭防火墙

stop firewalled

配置静态ip

vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 
-----------------------------------------------------
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
NAME=eno16777736
UUID=f19fae49-46da-4b52-b704-6e1ec4c0470e
ONBOOT=yes
HWADDR=00:0C:29:EC:14:1F
IPADDR0=192.168.191.101   // ip地址
PREFIX0=24
GATEWAY0=192.168.191.2
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
DNS1=114.114.114.114
DNS2=8.8.8.8

主机映射

vi /etc/hosts
-----------------------------------------------------
192.168.191.101 hadoop1
192.168.191.102 hadoop2
192.168.191.103 hadoop3

主机名称

hostnamectl set-hostname hadoop1
hostnamectl set-hostname hadoop2
hostnamectl set-hostname hadoop3

主机名称分别为hadoop2,hadoop3,hadoop4

安装jdk,配置环境变量

# 解压  -C表示解压到指定目录
tar zxvf jdk-8u171-linux-x64.tar.gz -C /opt/soft/

#配置环境变量
vi /etc/profile

# JAVA_HOME
export JAVA_HOME=/opt/soft/jdk1.8.0_251
export PATH=$JAVA_HOME/bin:$PATH
#刷新环境变量
source /etc/profile

#验证
java -version
java version "1.8.0_251"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

配置ssh,免密登录

拷贝密钥的时候需要拷贝9次

ssh-keygen -t rsa -P '' 
#3次回车
#拷贝密钥
ssh-copy-id hadoop1
ssh-copy-id hadoop2
ssh-copy-id hadoop3

配置时间同步

安装ntp【hadoop2】

rpm -qa|grep ntp
yum -y install ntp

vi /etc/ntp.conf
-----------------------
# 修改1(设置本地网络上的主机不受限制。)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
# 修改2(设置为不采用公共的服务器)
server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst为
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
# 添加3(添加默认的一个内部时钟数据,使用它为局域网用户提供服务。)
server 127.127.1.0
fudge 127.127.1.0 stratum 10

修改/etc/sysconfig/ntpd

vim /etc/sysconfig/ntpd
-----------------------
# 增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes

重新启动ntpd

service ntpd status
service ntpd start
chkconfig ntpd on

其他机器配置

crontab -e
----------------
*/10 * * * * /usr/sbin/ntpdate hadoop2

集群规划

hadoop2 hadoop3 hadoop4
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager ResourceManager NodeManager NodeManager

安装hadoop

Hadoop 的安装模式分为3种:单机(本地)模式,伪分布式,完全分布式(集群模式)

本地模式安装

# 解压
tar zxf hadoop-2.6.0-cdh5.14.2.tar.gz -C /opt/soft/
# 环境变量
vi /etc/profile
---------------------------
# hadoop
export HADOOP_HOME=/opt/soft/hadoop-2.6.0-cdh5.14.2
export PATH=$HADOOP_HOME/bin:$PATH
---------------------------------
source /etc/profile
# 测试
hadoop

伪分布式搭建

修改HDFS配置文件

##### etc/hadoop/hadoop-env.sh
export JAVA_HOME=/opt/soft/jdk1.8.0_251

#### etc/hadoop/core-site.xml
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop1:9000</value>
</property>

##### etc/hadoop/hdfs-site.xml
<property>
    <name>dfs.replication</name>
    <value>1</value>
</property>

##### etc/hadoop/slaves
hadoop1

#### 格式化文件系统
bin/hdfs namenode -format

#### 启动HDFS
sbin/start-dfs.sh

#### 验证是否成功
jps
20896 Jps
20787 SecondaryNameNode
20521 NameNode
20638 DataNode

#### 修改Yarn配置
####### mapred-site.xml
cp etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
--------------------------
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

####### yarn-site.xml
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

#### 启动Yarn
sbin/start-yarn.sh

#### 查看jps进程
jps
22304 ResourceManager
21989 DataNode
22389 NodeManager
21868 NameNode
22143 SecondaryNameNode
22703 Jps

完全分布式修改配置文件

hadoop-env.sh

export JAVA_HOME=/opt/soft/jdk1.8.0_251

core-site.xml

<configuration>
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://hadoop1:9000</value>
	</property>
	
<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
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值