简介:本文详细介绍如何通过Docker在单机环境下快速部署Apache Spark,涵盖环境准备、镜像选择、配置优化及常见问题解决,适合开发者和数据分析师快速上手。
Apache Spark作为分布式计算框架,传统部署需配置Hadoop集群或手动安装依赖,过程复杂且耗时。而Docker通过容器化技术将Spark及其依赖(如Java、Scala)封装为独立环境,实现”开箱即用”的单机体验。其核心优势包括:
curl/wget(下载镜像)、docker命令行bitnami/spark(由Bitnami维护,提供稳定版Spark+OpenJDK)
docker pull bitnami/spark:3.5.0
apache/spark(Apache官方维护,更新较慢但版本纯粹)推荐:初学者使用
docker pull apache/spark:3.5.0
bitnami/spark,因其预置了常用配置(如SPARK_MASTER_HOST环境变量)。3.5.0:Spark版本号,建议选择最新稳定版(如3.5.x)。-hadoop3:附带特定Hadoop版本的镜像(如需HDFS支持)。-jre11:指定Java运行时版本(Spark 3.0+推荐JRE 11)。
docker run -d --name spark-master \-p 8080:8080 -p 7077:7077 \-e SPARK_MODE=master \bitnami/spark:3.5.0
8080:Spark Web UI(查看任务状态)7077:集群通信端口(Worker连接用)SPARK_MODE=master指定节点角色。
docker run -d --name spark-worker \--link spark-master:spark-master \-e SPARK_MODE=worker \-e SPARK_MASTER_URL=spark://spark-master:7077 \bitnami/spark:3.5.0
--link:建立容器间网络连接(旧版Docker用法,新版推荐自定义网络)。
# 创建网络docker network create spark-net# 启动Masterdocker run -d --name spark-master --network spark-net -p 8080:8080 -p 7077:7077 -e SPARK_MODE=master bitnami/spark:3.5.0# 启动Workerdocker run -d --name spark-worker --network spark-net -e SPARK_MODE=worker -e SPARK_MASTER_URL=spark://spark-master:7077 bitnami/spark:3.5.0
http://localhost:8080,应看到1个Worker已注册。输出应包含
docker exec -it spark-master bash# 在容器内执行spark-submit --class org.apache.spark.examples.SparkPi \--master spark://spark-master:7077 \/opt/bitnami/spark/examples/jars/spark-examples_*.jar 10
Pi is roughly 3.14...的计算结果。通过-c(CPU份额)和--memory限制容器资源:
docker run -d --name spark-worker \--network spark-net \-e SPARK_MODE=worker \-e SPARK_MASTER_URL=spark://spark-master:7077 \-c 2.0 --memory="4g" \bitnami/spark:3.5.0
将本地数据或代码映射到容器:
docker run -d --name spark-worker \--network spark-net \-v /path/to/local/data:/data \-v /path/to/your/code:/code \-e SPARK_MODE=worker \bitnami/spark:3.5.0
若需Python支持,需额外安装:
docker run -d --name spark-py \--network spark-net \-e SPARK_MODE=worker \-e SPARK_MASTER_URL=spark://spark-master:7077 \-p 4040:4040 \bitnami/spark:3.5.0# 进入容器安装PySpark依赖docker exec -it spark-py bashpip install pandas numpy
SPARK_MASTER_URL错误。spark-net)。docker logs spark-master。OutOfMemoryError。--memory参数)。spark-defaults.conf中设置):
spark.driver.memory 2gspark.executor.memory 2g
Bind for 0.0.0.0:8080 failed。-p 8081:8080)。docker-compose.yml中固定镜像版本,避免自动升级导致兼容性问题。docker logs -f spark-master实时查看任务进度。spark-defaults.conf和log4j.properties保存到宿主机,通过数据卷挂载复用。spark.task.cpus)。通过Docker部署Spark单机环境,开发者可快速验证算法、调试代码,无需搭建复杂集群。后续可扩展至:
bitnami/spark:3.5.0-hadoop3),访问HDFS数据。掌握Spark Docker单机部署是迈向大数据处理的第一步,其轻量级特性尤其适合教学、原型开发及资源受限场景。