一、准备环境1.1准备虚拟机[rootlocalhost ~]# ip a|grep inetinet 127.0.0.1/8 scope host lo inet6 ::1/128 scope host inet 10.0.0.135/24 brd 10.0.0.255 scope global ens33 inet6 fe80::5c2e:98f8:b0b5:cc6d/64 scope link tentative noprefixroute dadfailed inet6 fe80::e91:11f6:fd7e:bcf6/64 scope link tentative noprefixroute dadfailed inet6 fe80::969e:97c6:b187:3f87/64 scope link tentative noprefixroute dadfailed inet 172.18.76.1/24 scope global docker01.2 准备java环境[rootlocalhost~]# java -versionopenjdk version17.0.192026-04-21OpenJDK Runtime Environment Temurin-17.0.1910(build17.0.1910)OpenJDK64-Bit Server VM Temurin-17.0.1910(build17.0.1910,mixed mode,sharing)1.3 准备服务目录[rootlocalhost spark]# pwd/spark二、下载Spark安装包并解压https://www.apache.org/dyn/closer.lua/spark/spark-3.5.8/spark-3.5.8-bin-hadoop3.tgz使用浏览器下载到本地再上传至服务器解压[rootlocalhost spark]# ll总用量 391972 drwxr-xr-x 13 node_exporter node_exporter 211 1月 12 12:31 spark-3.5.8-bin-hadoop3-rw-r--r--1 root root 401378872 6月 29 20:13 spark-3.5.8-bin-hadoop3.tgz[rootlocalhost spark]#三、设置Spark环境变量export SPARK_HOME/spark/spark-3.5.8-bin-hadoop3 export PATH$JAVA_HOME/bin:$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbinsource /etc/profile四、测试提交作业对于正式的应用更常用的是spark-submit命令。例如你可以用它来运行Spark自带的计算π的示例程序bashbin/spark-submit \--classorg.apache.spark.examples.SparkPi \--master local[4]\ examples/jars/spark-examples_2.12-3.5.8.jar \ 1000这条命令会以本地4线程的模式运行计算π的程序帮助你验证环境是否正确。五、启动Spark./bin/spark-shell--master local[*]26/06/29 20:28:30 WARN Utils: Your hostname,localhost.localdomain resolves to a loopback address: 127.0.0.1;using10.0.0.135 instead(on interface ens33)26/06/29 20:28:30 WARN Utils:SetSPARK_LOCAL_IPifyou need to bind to another address Setting default log level toWARN.To adjust logging level usesc.setLogLevel(newLevel).ForSparkR,use setLogLevel(newLevel).26/06/29 20:28:57 WARN NativeCodeLoader: Unable to load native-hadoop libraryforyour platform...usingbuiltin-java classes where applicable Spark context Web UI available at http://10.0.0.135:4040 Spark context available assc(master local[*],app id local-1782736144523).Spark session available asspark.Welcome to ____ __/__/__ ___ _____//__ _\ \/_ \/_ /__/ _//___/.__/\_,_/_//_/\_\ version 3.5.8/_/UsingScala version 2.12.18(OpenJDK 64-Bit Server VM,Java 17.0.19)Typein expressions to have them evaluated.Type:helpformore information.scalasc.parallelize(1 to 10).count()res0: Long 10 scala六、http://10.0.0.135:4040/在Spark运行时访问 http://你的Spark驱动节点IP:4040你可以看到一个功能强大的 Spark Web UI。这是Spark内置的监控界面主要用于查看作业Job、阶段Stage、任务Task和Executor的详细执行情况。目前由于你的Spark已启动这个端口应该是可用的。这个界面上的核心信息我整理成了下面这个表格方便你快速对照查阅。核心Tab页 你能看到什么 何时使用/有何用Jobs (作业) 所有提交的Spark作业列表、作业ID、描述、提交时间、运行状态Running/Succeeded/Failed。 查看作业整体进度定位哪个作业失败了以及它的失败原因点击作业可看详情。Stages (阶段) 每个作业被拆分成的多个Stage包括Shuffle Read/Write大小、数据倾斜程度、执行耗时。 性能调优核心可发现数据倾斜某Task数据量巨大或计算缓慢的Stage。Tasks (任务) 每个Stage下所有Task的详细列表包括状态、运行时间、GC时间、Shuffle读写量、所在Executor。 排查“长尾任务”极少数Task运行特别慢定位是数据倾斜还是资源不足。Executors (执行器) 当前应用所有Executor包括Driver的列表以及每个Executor的内存使用量堆内/堆外、Shuffle和存储使用量、GC时间。 评估资源是否充足发现Executor异常退出如OOM查看数据缓存Storage Memory情况。Storage (存储) 显示通过rdd.persist()或df.cache()缓存的RDD或DataFrame并展示其缓存级别和占用内存。 确认数据是否成功缓存检查是否因内存不足导致缓存数据被驱逐Evicted。Environment (环境) Spark配置参数如spark.sql.shuffle.partitions、JVM参数和系统环境变量。 确认运行时配置是否按预期生效方便故障排查。SQL (如果使用Spark SQL) 显示SQL查询的执行计划和性能指标类似关系数据库的执行计划。 专门用于优化SQL查询如查看扫描的数据量、是否用了谓词下推、Join策略等。几个快速定位问题的技巧查看失败原因页面顶部通常会有醒目的红色失败提示。直接点击失败的 Job 或 Stage即可进入详情页查看具体的错误堆栈Exception这是定位问题的第一步。发现数据倾斜这是性能问题的常见原因。进入 Stages 页面点击一个Stage查看它的 Tasks 列表。现象如果看到绝大多数 Task 很快完成但有个别 Task 运行时间极长且处理的数据量Shuffle Write/Read远大于其他Task就说明发生了数据倾斜。解决思路通常需要对倾斜的Key进行加盐或单独处理。排查内存溢出OOM进入 Executors 页面。现象如果某个Executor的状态显示为 Dead 或 Failed通常是发生了内存溢出OOM。解决思路检查该Executor的GC Time是否过高并考虑增大spark.executor.memory或优化数据分区减少每个Task处理的数据量。确认缓存是否生效如果你在代码中执行了 df.cache()可以到 Storage 页面查看。现象如果该表存在但 Size in Memory 为0或很小说明数据因为内存不足没有被完整缓存执行效率会受影响。