易君召
易君召
发布于 2026-07-28 / 1 阅读
0
0

大数据本地测试环境 Docker 一键部署方案

一、整体组件选型(轻量化,适合笔记本 / 开发机调试)

组件清单(兼顾离线 + 实时开发调试)

  1. 存储:MinIO(替代 HDFS,S3 协议,资源占用更低)

  2. 消息队列:Kafka + Zookeeper

  3. 实时计算:Flink 1.18

  4. 离线数仓:Hive 3.1.2 + Spark 3.3(SparkSQL)

  5. OLAP 查询:ClickHouse

  6. 调度工具:Apache DolphinScheduler 3.2

  7. 可视化 Web:Hue(SQL 查询、文件浏览)

  8. 监控(可选):Prometheus + Grafana

优势:全部容器化,不用本地安装 Hadoop,Windows/WSL2、Mac、Linux 通用;支持断点启停,数据持久化,写完 Spark/Flink 代码本地直接调试。

二、前置环境准备

  1. 安装 Docker Desktop(Windows/Mac)或 Docker Engine + Docker Compose(Linux)

  2. 硬件最低配置:内存 16G,推荐 32G;分配给 Docker 内存至少 10G

  3. 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

五、各组件访问地址 & 账号

组件

访问地址

账号密码

MinIO 对象存储控制台

http://127.0.0.1:9001

admin / Minio@123

Spark UI

http://127.0.0.1:4040

无密码

Flink UI

http://127.0.0.1:8081

无密码

DolphinScheduler 调度后台

http://127.0.0.1:12345

admin / dolphinscheduler123

ClickHouse HTTP 接口

http://127.0.0.1:8123

默认无密码

Kafka 本地连接地址

localhost:9092

无认证

HiveServer2 JDBC 连接

jdbc:hive2://localhost:10000

hive / Hive@123

六、配套本地开发调试工具

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

七、开发调试流程示例

  1. MinIO 创建存储桶,上传业务测试数据;

  2. IDEA 编写 SparkSQL 代码,连接 Hive 元数据,读取 MinIO 数据调试离线 ETL;

  3. 使用 Canal/Flink CDC 监听本地 MySQL,写入 Kafka;

  4. Flink 任务消费 Kafka 流数据,写入 Hudi/ClickHouse;

  5. DolphinScheduler 配置定时 Spark 任务,测试调度依赖、告警;

  6. ClickHouse 执行聚合 SQL,模拟报表、实时大屏查询。

八、轻量化简化版(内存不足 16G 使用)

如果机器内存只有 8G~12G,删减组件,只保留实时核心:

ZooKeeper + Kafka + MinIO + Flink + ClickHouse,删除 Hive、Spark、DolphinScheduler,大幅降低内存占用。


评论