一、整体组件选型(轻量化,适合笔记本 / 开发机调试)
组件清单(兼顾离线 + 实时开发调试)
存储:MinIO(替代 HDFS,S3 协议,资源占用更低)
消息队列:Kafka + Zookeeper
实时计算:Flink 1.18
离线数仓:Hive 3.1.2 + Spark 3.3(SparkSQL)
OLAP 查询:ClickHouse
调度工具:Apache DolphinScheduler 3.2
可视化 Web:Hue(SQL 查询、文件浏览)
监控(可选):Prometheus + Grafana
优势:全部容器化,不用本地安装 Hadoop,Windows/WSL2、Mac、Linux 通用;支持断点启停,数据持久化,写完 Spark/Flink 代码本地直接调试。
二、前置环境准备
安装 Docker Desktop(Windows/Mac)或 Docker Engine + Docker Compose(Linux)
硬件最低配置:内存 16G,推荐 32G;分配给 Docker 内存至少 10G
Windows 用户建议开启 WSL2 后端,性能远高于 Hyper-V
三、完整 docker-compose.yml (可直接复制使用)
新建文件夹 bigdata-local,在内部创建 docker-compose.yml
version: "3.8"
services:
# 1. ZK:Kafka、Hive元数据依赖
zookeeper:
image: confluentinc/cp-zookeeper:7.4.0
hostname: zookeeper
ports:
- "2181:2181"
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
volumes:
- zk-data:/var/lib/zookeeper/data
- zk-log:/var/lib/zookeeper/log
# 2. Kafka 消息队列(CDC、实时流调试)
kafka:
image: confluentinc/cp-kafka:7.4.0
hostname: kafka
ports:
- "9092:9092"
depends_on:
- zookeeper
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- kafka-data:/var/lib/kafka/data
# 3. MinIO 对象存储(替代HDFS,数据湖存储)
minio:
image: minio/minio:latest
hostname: minio
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: Minio@123
command: server /data --console-address ":9001"
volumes:
- minio-data:/data
# 4. Hive 元数据存储 MySQL
hive-mysql:
image: mysql:8.0
hostname: hive-mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: Mysql@123
MYSQL_DATABASE: metastore
MYSQL_USER: hive
MYSQL_PASSWORD: Hive@123
volumes:
- mysql-data:/var/lib/mysql
# 5. Hive Metastore + HiveServer2
hive:
image: apache/hive:3.1.2
hostname: hive
ports:
- "10000:10000"
- "9083:9083"
depends_on:
- hive-mysql
- minio
environment:
HIVE_DATABASE_URL: jdbc:mysql://hive-mysql:3306/metastore?createDatabaseIfNotExist=true
HIVE_DATABASE_USER: hive
HIVE_DATABASE_PASSWORD: Hive@123
AWS_ACCESS_KEY_ID: admin
AWS_SECRET_ACCESS_KEY: Minio@123
S3_ENDPOINT: http://minio:9000
volumes:
- hive-warehouse:/opt/hive/data/warehouse
# 6. Spark 3.3(SparkSQL、PySpark调试)
spark:
image: bitnami/spark:3.3.3
hostname: spark
ports:
- "4040:4040" # Spark UI
depends_on:
- hive
- minio
environment:
SPARK_MODE: master
AWS_ACCESS_KEY_ID: admin
AWS_SECRET_ACCESS_KEY: Minio@123
S3_ENDPOINT: http://minio:9000
# 7. Flink 实时计算(JobManager+TaskManager)
flink-jm:
image: flink:1.18-scala_2.12-java11
hostname: flink-jm
ports:
- "8081:8081" # Flink UI
command: jobmanager
environment:
- FLINK_PROPERTIES=jobmanager.rpc.address: flink-jm
volumes:
- ./flink-jobs:/opt/flink/jobs
flink-tm:
image: flink:1.18-scala_2.12-java11
hostname: flink-tm
depends_on:
- flink-jm
command: taskmanager
environment:
- FLINK_PROPERTIES=jobmanager.rpc.address: flink-jm taskmanager.numberOfTaskSlots: 4
# 8. ClickHouse OLAP引擎
clickhouse:
image: clickhouse/clickhouse-server:23.8
hostname: clickhouse
ports:
- "8123:8123"
- "9000:9000"
volumes:
- clickhouse-data:/var/lib/clickhouse
# 9. DolphinScheduler 调度平台
ds-master:
image: apache/dolphinscheduler:3.2.0-alpine
command: master-server
ports:
- "5678:5678"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://hive-mysql:3306/dolphinscheduler
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: Mysql@123
depends_on:
- hive-mysql
ds-worker:
image: apache/dolphinscheduler:3.2.0-alpine
command: worker-server
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://hive-mysql:3306/dolphinscheduler
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: Mysql@123
depends_on:
- ds-master
- hive
- spark
- flink-jm
ds-api:
image: apache/dolphinscheduler:3.2.0-alpine
command: api-server
ports:
- "12345:12345" # 调度后台页面
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://hive-mysql:3306/dolphinscheduler
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: Mysql@123
depends_on:
- ds-master
volumes:
zk-data:
zk-log:
kafka-data:
minio-data:
mysql-data:
hive-warehouse:
clickhouse-data:
四、启动、停止、常用命令
1. 启动集群
# 后台启动所有容器
docker-compose up -d
# 实时查看启动日志,观察组件是否正常初始化
docker-compose logs -f
首次启动会自动拉取镜像,等待 5~10 分钟全部组件就绪。
2. 查看运行状态
docker-compose ps
3. 停止集群(保留数据,下次可直接启动)
docker-compose down
4. 销毁集群(清空所有存储数据,全新初始化)
docker-compose down -v
五、各组件访问地址 & 账号
六、配套本地开发调试工具
1. IDE 插件
IDEA:Big Data Tools,支持连接 Hive、Spark、Flink、Kafka、ClickHouse
2. SQL 客户端
DBeaver / DataGrip:统一连接 Hive、ClickHouse、MySQL
3. MinIO 客户端 mc
本地安装 mc 命令行,操作存储桶、上传测试数据,命令示例:
# 配置本地MinIO连接
mc alias set local-minio http://127.0.0.1:9000 admin Minio@123
# 创建数据湖桶
mc mb local-minio/datalake
七、开发调试流程示例
MinIO 创建存储桶,上传业务测试数据;
IDEA 编写 SparkSQL 代码,连接 Hive 元数据,读取 MinIO 数据调试离线 ETL;
使用 Canal/Flink CDC 监听本地 MySQL,写入 Kafka;
Flink 任务消费 Kafka 流数据,写入 Hudi/ClickHouse;
DolphinScheduler 配置定时 Spark 任务,测试调度依赖、告警;
ClickHouse 执行聚合 SQL,模拟报表、实时大屏查询。
八、轻量化简化版(内存不足 16G 使用)
如果机器内存只有 8G~12G,删减组件,只保留实时核心:
ZooKeeper + Kafka + MinIO + Flink + ClickHouse,删除 Hive、Spark、DolphinScheduler,大幅降低内存占用。