Spark 3.5.0 伪分布式 Standalone 集群搭建:单机 2 Worker 节点配置与性能实测

发布时间:2026/10/17 14:51:59

Spark 3.5.0 伪分布式 Standalone 集群搭建:单机 2 Worker 节点配置与性能实测 Spark 3.5.0 伪分布式集群实战单机多Worker配置与性能调优指南伪分布式模式的价值与应用场景对于刚接触Spark的开发者来说在资源有限的情况下搭建完整分布式集群往往存在硬件门槛。伪分布式模式Pseudo-Distributed Mode通过在单台机器上模拟多节点工作方式既保留了分布式系统的核心特性又大幅降低了学习成本。这种模式特别适合以下场景开发测试环境在本地验证Spark应用逻辑时可以提前发现分布式环境下可能出现的序列化、网络通信等问题教学演示学生可以在个人笔记本上理解Spark的Master-Worker架构原理原型验证快速验证计算任务在不同节点配置下的表现差异与真正的分布式集群相比伪分布式模式省去了跨节点部署和网络配置的复杂度但保留了以下关键特性独立的Master和Worker进程基于RPC的进程间通信分布式任务调度机制Web UI监控界面环境准备与基础配置系统要求与软件版本在开始配置前请确保您的系统满足以下要求组件推荐版本备注操作系统Linux/macOSWindows需使用WSL2JavaJDK 8/11必须配置JAVA_HOMESpark3.5.0本文示例版本Python3.8如需PySpark支持初始安装步骤从Apache官网下载Spark预编译包wget https://archive.apache.org/dist/spark/spark-3.5.0/spark-3.5.0-bin-hadoop3.tgz解压并设置软链接tar -xzf spark-3.5.0-bin-hadoop3.tgz -C /opt ln -s /opt/spark-3.5.0-bin-hadoop3 /opt/spark配置环境变量添加到~/.bashrc或~/.zshrcexport SPARK_HOME/opt/spark export PATH$PATH:$SPARK_HOME/bin export PYSPARK_PYTHONpython3关键配置文件说明进入Spark配置目录$SPARK_HOME/conf需要修改两个核心文件spark-env.sh从模板创建cp spark-env.sh.template spark-env.sh添加以下配置# 设置Master主机地址 export SPARK_MASTER_HOSTlocalhost # 设置每个Worker的内存和CPU核数 export SPARK_WORKER_MEMORY2g export SPARK_WORKER_CORES2 # 设置每个Worker实例数关键配置 export SPARK_WORKER_INSTANCES2workers从模板创建cp workers.template workers修改内容为添加两行localhostlocalhost localhost注意伪分布式模式下所有Worker都运行在同一台机器因此需要特别注意内存分配避免OOM。建议Worker总内存不超过物理内存的70%。集群启动与管理进程启动与监控使用Spark自带的脚本启动集群# 启动Master和所有Worker $SPARK_HOME/sbin/start-all.sh # 单独控制命令 $SPARK_HOME/sbin/start-master.sh $SPARK_HOME/sbin/start-worker.sh spark://localhost:7077验证进程是否正常启动jps应看到类似以下输出1234 Master 1356 Worker 1357 WorkerWeb UI访问Spark提供了丰富的Web监控界面服务端口功能Master8080集群资源总览Worker8081单个Worker详情应用4040运行中应用详情访问http://localhost:8080应看到两个Worker已注册性能调优实战资源配置策略在伪分布式环境下合理的资源分配尤为重要。以下是典型配置示例# 在spark-env.sh中调整 export SPARK_WORKER_MEMORY4g export SPARK_WORKER_CORES2 export SPARK_WORKER_INSTANCES2 # 在spark-submit时指定 spark-submit --master spark://localhost:7077 \ --executor-memory 1g \ --total-executor-cores 4 \ your_application.py伪分布式与本地模式性能对比我们使用经典的WordCount示例进行测试测试数据集100MB文本文件测试代码from pyspark.sql import SparkSession spark SparkSession.builder.appName(WordCount).getOrCreate() text spark.read.text(sample.txt).rdd counts text.flatMap(lambda line: line[0].split( )) \ .map(lambda word: (word, 1)) \ .reduceByKey(lambda a, b: a b) print(counts.collect())性能对比结果运行模式执行时间备注local[2]42s单进程多线程pseudo-distributed38s多进程协作local[4]36s完全利用CPU实际测试发现对于计算密集型任务伪分布式模式相比local模式有约10%的性能提升主要得益于避免了Python GIL限制常见问题排查端口冲突错误现象Web UI无法访问或Worker注册失败解决方案检查$SPARK_HOME/conf/spark-env.sh中的端口设置内存不足错误现象Executor频繁崩溃或任务失败解决方案调整spark.executor.memory和spark.memory.fractionPython版本冲突错误现象PySpark任务无法启动解决方案确保所有Worker节点的PYSPARK_PYTHON指向相同版本进阶配置技巧动态资源分配在spark-defaults.conf中添加spark.dynamicAllocation.enabledtrue spark.shuffle.service.enabledtrue spark.dynamicAllocation.minExecutors1 spark.dynamicAllocation.maxExecutors4历史服务配置创建日志目录mkdir -p /tmp/spark-events修改spark-defaults.confspark.eventLog.enabledtrue spark.eventLog.dirfile:///tmp/spark-events spark.history.fs.logDirectoryfile:///tmp/spark-events启动历史服务$SPARK_HOME/sbin/start-history-server.sh应用提交与管理不同提交方式示例Python应用提交spark-submit --master spark://localhost:7077 \ --name PySparkApp \ --py-files dependencies.zip \ main.pyScala应用提交spark-submit --master spark://localhost:7077 \ --class com.example.Main \ --jars lib1.jar,lib2.jar \ app.jar任务监控技巧通过Spark UI可以获取以下关键指标Stage执行时间识别性能瓶颈Shuffle数据量优化数据倾斜问题Executor利用率调整资源分配对于长时间运行的任务建议添加监控# 在应用代码中添加进度汇报 def report_progress(): while True: time.sleep(60) print(fProgress: {sc.statusTracker().getJobIdsForGroup()}) import threading thread threading.Thread(targetreport_progress) thread.daemon True thread.start()伪分布式环境下的特殊考量磁盘IO优化由于所有Worker共享同一块磁盘建议为每个Worker配置独立的临时目录export SPARK_LOCAL_DIRS/tmp/spark-worker1,/tmp/spark-worker2使用内存文件系统加速shufflemount -t tmpfs -o size2g tmpfs /mnt/spark-tmp网络配置优化虽然Worker间通信通过loopback接口但仍可优化# 增加TCP缓冲区大小 sysctl -w net.core.rmem_max2097152 sysctl -w net.core.wmem_max2097152实战经验分享在实际使用伪分布式环境时有几个容易忽视但非常重要的细节日志分离默认情况下所有Worker日志会混在一起建议为每个Worker单独配置$SPARK_HOME/sbin/start-worker.sh \ --webui-port 8082 \ --properties-file worker1.properties \ spark://localhost:7077资源隔离使用cgroups限制每个Worker的资源使用cgcreate -g memory:spark-worker1 echo 2G /sys/fs/cgroup/memory/spark-worker1/memory.limit_in_bytes开发工作流建议的日常开发调试流程graph TD A[本地IDE开发] -- B[单机Local模式测试] B -- C[伪分布式模式验证] C -- D[完整集群部署]
延伸阅读

更多相关文章

2026/10/16 16:20:30

计算机保研个人陈述 2024版:量化竞赛与科研经历,提升入营率 30%

计算机保研个人陈述 2024版:量化竞赛与科研经历,提升入营率 30%在计算机保研的激烈竞争中,个人陈述是展示你专业能力和科研潜力的关键材料。与泛泛而谈的简历不同,个人陈述需要突出你的技术深度和量化成果,让导师一眼就…

2026/10/18 14:43:18

基于YOLOv8的商场客流统计系统实战:数据集、跟踪与部署全解析

商场做客流统计这件事,听起来简单,真做起来坑不少。早几年用红外对射或者WiFi探针的方案,精度和抗干扰能力都一言难尽。现在基于深度学习的目标检测技术成熟了,用YOLO系列去做视觉客流统计成了主流方案,精度高、部署灵…

2026/10/18 14:43:18

计算机导论C语言题库实操指南:从Word题干到可运行代码

简介:本资源是四川大学《计算机导论》课程期末复习核心资料,面向该校本科生及同类高校初学者,聚焦基础概念辨析与典型考题训练,助力系统梳理计算机组成原理、操作系统、数据结构、网络与安全等关键模块。文档为单个Word文件&#…

2026/10/18 14:43:18

OpenClaw 实战:用 Node.js 与 PowerShell 让 AI 直接操控 Windows 电脑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 14:43:18

着急投产建冷库,交付速度为什么要看是不是自有工厂?

不少客户有工期要求,希望冷库尽快完工投入使用。如果找贸易商,货源依赖外部工厂,订单容易被插队,交货时间很难把控。月宫冷冻拥有自有工厂,可以自主安排生产排产。订单确认后工厂直接安排生产,不受第三方工…

2026/10/18 14:32:54

Python+yt-dlp+ffmpeg:B站视频批量下载与弹幕获取完整指南

简介:面向B站视频批量下载与处理的Python自动化工具,依托yt-dlp与ffmpeg实现高清画质解析、弹幕提取及多格式转换,支持AV号、BV号和完整链接三种输入方式,可满足视频学习、研究分析、素材整理及弹幕趋势观察等场景需求。压缩包共7…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/18 0:01:50

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑