环境准备:Linux基础环境搭建、Docker与Docker Compose安装、JDK与Maven配置

说实话,做实时数仓这件事,环境准备是最容易被轻视的一环。我见过太多人兴致勃勃地看完了架构设计,结果卡在装Docker这一步上,一卡就是半天。嗯,咱们今天就把这些坑提前填上。

这一章的目标很简单:让你手头有一台能跑实时数仓的机器。不管是你的笔记本,还是云上的服务器,都行。我会把每一步拆开来讲,你跟着做就好。

本章核心产出:一台安装了 Docker + Docker Compose + JDK 8/11 + Maven 3.8+ 的 Linux 机器,所有服务能正常启动。

3.1 Linux 基础环境搭建

我个人的习惯是使用 CentOS 7.9 或者 Ubuntu 20.04。这两个发行版在实时数仓生态里兼容性最好。如果你用的是云服务器,买完实例后第一件事就是检查内核版本和网络配置。

3.1.1 检查系统版本与内核

# CentOS / RedHat
cat /etc/redhat-release
uname -r

# Ubuntu / Debian
lsb_release -a
uname -r

内核版本最好在 3.10 以上。Docker 对内核有依赖,太老的内核跑不起来。我曾经在一台 2.6 内核的老机器上折腾了半天,最后发现是内核不支持 overlay2 存储驱动——白费功夫。

3.1.2 基础工具安装

装完系统后,先把常用工具补齐。别小看这一步,后面编译源码、调试网络都靠它们。

# CentOS
yum install -y wget curl vim net-tools git lrzsz

# Ubuntu
apt-get update && apt-get install -y wget curl vim net-tools git lrzsz

小技巧:装完系统后顺手把防火墙关掉,或者至少把要用到的端口放行。实时数仓里组件多,端口冲突是家常便饭。我一般直接 systemctl stop firewalld && systemctl disable firewalld,省心。

3.1.3 配置主机名与 hosts

实时数仓集群里,主机名解析很重要。很多组件(比如 Kafka、Zookeeper)依赖主机名通信,配不好会出各种奇怪的问题。

# 设置主机名
hostnamectl set-hostname node01

# 编辑 hosts 文件
cat >> /etc/hosts << EOF
127.0.0.1   localhost localhost.localdomain
192.168.1.100 node01
EOF

你想想看,如果 hosts 没配好,Kafka 启动时解析不到 broker 地址,那日志里全是 UnknownHostException,排查起来特别痛苦。

3.2 Docker 与 Docker Compose 安装

Docker 是实时数仓的基石。我们后面所有的中间件——Kafka、Flink、ClickHouse——都会跑在容器里。所以这一步必须稳。

3.2.1 卸载旧版本

如果你之前装过 Docker,先清理干净。我遇到过因为旧版本残留导致新版本装不上的情况。

yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

3.2.2 安装 Docker

官方推荐用 yum-config-manager 添加仓库,然后安装。我个人习惯用阿里云的镜像源,速度快很多。

# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

# 添加阿里云镜像源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker
yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
systemctl start docker
systemctl enable docker

# 验证
docker version

注意:安装完成后,记得把当前用户加入 docker 组。否则每次执行 docker 命令都要加 sudo,很烦人。

usermod -aG docker $USER
# 退出重新登录,或者执行 newgrp docker 使组生效

3.2.3 配置 Docker 镜像加速器

国内拉取 Docker 镜像的速度你懂的。不配加速器的话,一个 Flink 镜像能下半小时。我一般用阿里云或者中科大的加速器。

mkdir -p /etc/docker
cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://你的加速器地址.mirror.aliyuncs.com"],
  "exec-opts": ["native.cgroupdriver=systemd"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "100m",
    "max-file": "3"
  }
}
EOF

systemctl daemon-reload
systemctl restart docker

3.2.4 安装 Docker Compose

Docker Compose 用来编排多容器应用。实时数仓里组件多,用 Compose 可以一键启动整个集群,非常方便。

# 下载最新版(v2 版本)
curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 赋予执行权限
chmod +x /usr/local/bin/docker-compose

# 验证
docker-compose --version

避坑指南:我曾经在 CentOS 7 上装 Docker Compose v1 版本,结果发现它已经停止维护了。现在官方主推 v2,语法有些变化。建议直接上 v2,别走弯路。

3.3 JDK 与 Maven 配置

实时数仓里很多组件是用 Java 写的——Flink、Kafka、Zookeeper、HBase 都是。JDK 版本选不对,后面全是坑。

3.3.1 JDK 版本选择

我个人推荐 JDK 8 或者 JDK 11。Flink 1.13 以上对 JDK 11 支持很好,但 JDK 8 更稳定、生态更成熟。如果你拿不准,就装 JDK 8。

组件 推荐 JDK 版本 说明
Flink 1.13+ JDK 8 / 11 JDK 11 性能略优
Kafka 2.8+ JDK 8 / 11 JDK 8 最稳
Zookeeper 3.6+ JDK 8 / 11 JDK 8 足够
ClickHouse 不依赖 JDK C++ 写的,省心

3.3.2 安装 JDK 8

我习惯用 Oracle JDK 或者 OpenJDK。生产环境用 OpenJDK 多一些,没版权问题。

# 下载 JDK 8(以 OpenJDK 为例)
wget https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz

# 解压到指定目录
tar -zxvf OpenJDK8U-jdk_x64_linux_hotspot_8u292b10.tar.gz -C /usr/local/

# 重命名(方便管理)
mv /usr/local/jdk8u292-b10 /usr/local/jdk8

# 配置环境变量
cat >> /etc/profile << EOF
export JAVA_HOME=/usr/local/jdk8
export PATH=\$JAVA_HOME/bin:\$PATH
export CLASSPATH=.:\$JAVA_HOME/lib/dt.jar:\$JAVA_HOME/lib/tools.jar
EOF

# 使配置生效
source /etc/profile

# 验证
java -version

注意:环境变量一定要配好。我见过有人把 JAVA_HOME 写错了,结果 Flink 启动时一直报 "JAVA_HOME is not set"。检查三遍再往下走。

3.3.3 安装 Maven

Maven 用来管理 Java 项目的依赖和构建。实时数仓里有些场景需要自己编译源码(比如 Flink 自定义 connector),这时候 Maven 就派上用场了。

# 下载 Maven 3.8.6
wget https://dlcdn.apache.org/maven/maven-3/3.8.6/binaries/apache-maven-3.8.6-bin.tar.gz

# 解压
tar -zxvf apache-maven-3.8.6-bin.tar.gz -C /usr/local/

# 重命名
mv /usr/local/apache-maven-3.8.6 /usr/local/maven

# 配置环境变量
cat >> /etc/profile << EOF
export MAVEN_HOME=/usr/local/maven
export PATH=\$MAVEN_HOME/bin:\$PATH
EOF

source /etc/profile

# 验证
mvn -version

3.3.4 配置 Maven 国内镜像

Maven 默认从中央仓库下载依赖,速度慢得让人抓狂。我一般换成阿里云镜像。

# 编辑 settings.xml
vim /usr/local/maven/conf/settings.xml

# 在 mirrors 节点下添加:
<mirror>
  <id>aliyunmaven</id>
  <mirrorOf>central</mirrorOf>
  <name>阿里云公共仓库</name>
  <url>https://maven.aliyun.com/repository/central</url>
</mirror>

小技巧:如果你经常编译大项目(比如 Flink 源码),建议把 Maven 的本地仓库路径改到空间大的磁盘分区。默认在 ~/.m2/repository,时间长了能占几十 G。

3.4 本章知识体系总览

下面这张图把本章的核心内容串起来了。你可以对照着检查自己有没有遗漏。

环境准备知识体系 环境准备知识体系 Linux 基础环境 Docker & Compose JDK & Maven 系统版本检查 基础工具安装 Hosts 配置 卸载旧版本 安装 Docker 镜像加速器 Docker Compose JDK 版本选择 安装 JDK 8 安装 Maven 配置国内镜像 💡 环境验证清单 ✅ docker version → 显示客户端和服务端版本 ✅ docker-compose --version → 显示 v2.x ✅ java -version → 显示 1.8.x 或 11.x

3.5 环境验证

装完别急着往下走。花 5 分钟验证一下,确保所有组件都能正常工作。

# 验证 Docker
docker run hello-world
# 输出 Hello from Docker! 表示成功

# 验证 Docker Compose
mkdir test-compose && cd test-compose
cat > docker-compose.yml << EOF
version: '3'
services:
  test:
    image: alpine
    command: echo "Compose works!"
EOF
docker-compose up
# 输出 Compose works! 表示成功

# 验证 JDK
java -version
# 输出 openjdk version "1.8.0_292"

# 验证 Maven
mvn -version
# 输出 Apache Maven 3.8.6

到这里,你的环境就准备好了。后面我们会用这套环境来部署实时数仓的各个组件。记住:环境稳了,后面才顺。别图快,每一步都验证通过再往下走。