前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住给大家分享一下。点击跳转到网站:https://www.captainai.net/dongkelun

前言
有时会需要安装开源的大数据集群进行测评或者验证问题,已经装过很多遍了,所以想系统的总结整理一下各个组件的安装部署,包括 Zookeeper、Hadoop、Hive、Spark 等。
版本
SSH互信
1 | # 每个节点 |
下载Zookeeper
下载地址:https://archive.apache.org/dist/zookeeper/
解压
以 3.5.6 为例:1
2tar -zxvf apache-zookeeper-3.5.6-bin.tar.gz -C /usr/local/
ln -s /usr/local/apache-zookeeper-3.5.6-bin /usr/local/zookeeper
配置环境变量
1 | vi /etc/profile.d/zookeeper.sh |
1 | export ZOOKEEPER_HOME=/usr/local/zookeeper |
1 | source /etc/profile.d/zookeeper.sh |
配置Zookeeper
zoo.cfg
1 | cd /usr/local/zookeeper/conf/ |
1 | tickTime=2000 |
创建数据目录
1 | mkdir -p /usr/local/zookeeper/data |
dataDir
- 核心作用:存储 ZooKeeper 的快照数据(snapshot) 和事务日志索引。
- 快照数据:ZooKeeper 会定期将内存中的数据状态(如节点、权限等)持久化到快照文件中,用于快速恢复数据。快照文件通常以 snapshot.xxxx 命名(xxxx 为事务 ID)。
- 其他元数据:包括集群成员信息、myid 文件(用于标识当前节点在集群中的 ID,仅在集群模式下存在)等。
- 特点:
- 快照数据是内存数据的周期性备份,并非实时更新,因此不能单独作为数据恢复的唯一依据,需要配合事务日志使用。
- 该目录是 ZooKeeper 运行的必填目录,必须在配置文件(zoo.cfg)中指定。
dataLogDir
- 核心作用:专门存储 ZooKeeper 的事务日志(transaction log)。
- 事务日志记录了 ZooKeeper 处理的所有写操作(如创建节点、修改数据等),是实时追加的,每一次事务操作都会被立即写入日志,确保数据的一致性和可恢复性。
- 特点:
- 事务日志是 ZooKeeper 数据一致性的关键,恢复数据时需先通过事务日志重演所有操作,再结合快照数据补充最新状态。
- 该目录是可选配置(若不指定,事务日志会默认存储在 dataDir 中),但强烈建议单独设置,原因是:
- 事务日志的写入频率远高于快照,单独存储可减少磁盘 IO 竞争,提升性能。
- 便于日志管理(如单独备份、清理过期日志)。
配置日志
主要是修改了默认的日志路径,也可以用默认的日志配置
修改 zkEnv.sh
1 | vi /usr/local/zookeeper/bin/zkEnv.sh |
将1
2
3
4
5
6
7
8
9if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="$ZOOKEEPER_PREFIX/logs"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE"
fi
修改为1
2
3
4
5
6
7
8
9if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="/var/log/zookeeper"
fi
if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,CONSOLE,ROLLINGFILE"
fi
- ZOO_LOG4J_PROP : 可以根据需要选择是否保留CONSOLE,设置日志级别等, 3.8 和 3.9 版本没有这个属性可以忽略
创建日志目录
每个节点都执行:1
mkdir -p /var/log/zookeeper
log4j.properties
3.8 和 3.9 版本默认没有 log4j.properties ,可以根据需要选择是否添加:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35# DEFAULT: console appender only
log4j.rootLogger=WARN, CONSOLE, ROLLINGFILE
# Example with rolling log file and tracing
#log4j.rootLogger=TRACE, CONSOLE, ROLLINGFILE, TRACEFILE
# Log INFO level and above messages to the console
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=WARN
log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
# Add ROLLINGFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.ROLLINGFILE=org.apache.log4j.RollingFileAppender
log4j.appender.ROLLINGFILE.Threshold=DEBUG
log4j.appender.ROLLINGFILE.File=/var/log/zookeeper/zookeeper.log
# Max log file size of 10MB
log4j.appender.ROLLINGFILE.MaxFileSize=10MB
# uncomment the next line to limit number of backup files
#log4j.appender.ROLLINGFILE.MaxBackupIndex=10
log4j.appender.ROLLINGFILE.layout=org.apache.log4j.PatternLayout
log4j.appender.ROLLINGFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L] - %m%n
# Add TRACEFILE to rootLogger to get log file output
# Log DEBUG level and above messages to a log file
log4j.appender.TRACEFILE=org.apache.log4j.FileAppender
log4j.appender.TRACEFILE.Threshold=TRACE
log4j.appender.TRACEFILE.File=zookeeper_trace.log
log4j.appender.TRACEFILE.layout=org.apache.log4j.PatternLayout
### Notice we are including log4j's NDC here (%x)
log4j.appender.TRACEFILE.layout.ConversionPattern=%d{ISO8601} - %-5p [%t:%C{1}@%L][%x] - %m%n
复制Zookeeper和系统环境变量到其他节点
1 | scp -r /usr/local/apache-zookeeper-3.5.6-bin/ 192.168.1.2:/usr/local/ |
创建软链接并使环境变量生效
在其他每个节点上都创建软链接1
2ln -s /usr/local/apache-zookeeper-3.5.6-bin /usr/local/zookeeper
source /etc/profile.d/zookeeper.sh
修改myid文件内容
将2节点上ZooKeeper的myid文件内容修改为数字2:1
echo "2" > /usr/local/zookeeper/data/myid
将3节点上ZooKeeper的myid文件内容修改为数字3:1
echo "3" > /usr/local/zookeeper/data/myid
启动ZooKeeper
在每个节点上执行如下操作启动ZooKeeper:1
zkServer.sh start
1 | ZooKeeper JMX enabled by default |
在每个节点上执行如下命令查看ZooKeeper状态:1
zkServer.sh status
1 | ZooKeeper JMX enabled by default |
或1
2
3
4ZooKeeper JMX enabled by default
Using config: /usr/local/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follow
验证ZooKeeper
当ZooKeeper服务启动成功之后,在任意一个节点上执行如下命令进行验证:
1 | zkCli.sh |
zkCli.sh 默认连接 localhost:2181 ,也可以连接指定的 server 如:1
2
3
4
5
6
7
8
9zkCli.sh -server 192.168.1.2:2181
Connecting to 192.168.1.2:2181
Welcome to ZooKeeper!
JLine support is enabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
[zk: 192.168.1.2:2181(CONNECTED) 0]