Spark异常:A master URL must be set in your configuration处理记录
问题描述:
项目中一位同事提交了一部分代码,代码分为一个抽象类,里面含有sparkcontent,sparkSession对象;然后又三个子类实例化上述抽象类,这三个子类处理三个任务,最后在同一个Main类,里面调用这个子类的处理任务的方法,进行计算;在本地(local)运行,一切正常,部署到测试服务器,会报如下异常:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | 18 / 07 / 03 14 : 11 : 58 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0 , emr-worker- 1 .cluster- 65494 , executor 1 ): java.lang.ExceptionInInitializerError at task.api_monitor.HttpStatusTask$$anonfun$ 2 .apply(HttpStatusTask.scala: 91 ) at task.api_monitor.HttpStatusTask$$anonfun$ 2 .apply(HttpStatusTask.scala: 85 ) at scala.collection.Iterator$$anon$ 11 .next(Iterator.scala: 409 ) at org.apache.spark.util.collection.ExternalSorter.insertAll(ExternalSorter.scala: 193 ) at org.apache.spark.shuffle.sort.SortShuffleWriter.write(SortShuffleWriter.scala: 63 ) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala: 96 ) at org.apache.spark.scheduler.ShuffleMapTask.runTask(ShuffleMapTask.scala: 53 ) at org.apache.spark.scheduler.Task.run(Task.scala: 108 ) at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala: 338 ) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java: 1149 ) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java: 624 ) at java.lang.Thread.run(Thread.java: 748 ) Caused by: org.apache.spark.SparkException: A master URL must be set in your configuration at org.apache.spark.SparkContext.(SparkContext.scala: 376 ) at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala: 2516 ) at org.apache.spark.sql.SparkSession$Builder$$anonfun$ 6 .apply(SparkSession.scala: 918 ) at org.apache.spark.sql.SparkSession$Builder$$anonfun$ 6 .apply(SparkSession.scala: 910 ) at scala.Option.getOrElse(Option.scala: 121 ) at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala: 910 ) at task.AbstractApiMonitorTask.(AbstractApiMonitorTask.scala: 22 ) at task.api_monitor.HttpStatusTask$.(HttpStatusTask.scala: 18 ) at task.api_monitor.HttpStatusTask$.(HttpStatusTask.scala) ... 12 more |
分析异常发现是由于没有指定Master的URL导致子类不能正常初始化。
解决:查找网上资源,结合自身代码结构发现,在spark运行日志中(运行模式是yarn)会有三个yarn.client出现,说明每个子类任务都会有一个相对应的driver,这个说明每个子类的任务开始都会实例化自身的sparkSession,但是一个spark 应用对应了一个main函数,放在一个driver里,driver里有一个对应的实例(spark context).driver 负责向各个节点分发资源以及数据。那么如果你把创建实例放在了main函数的外面,driver就没法分发了。所以如果这样写在local模式下是可以成功的,在分布式就会报错。(参考来源:https://blog.csdn.net/sinat_33761963/article/details/51723175)因此,改变代码结构把抽象类中的公有的资源,在main函数中创建,顺利解决问题。
总结:出现上述问题,主要是对spark的分布式运行理解的不是很透彻,仍需努力提升!
分类:
spark
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· 【.NET】调用本地 Deepseek 模型
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 上周热点回顾(2.17-2.23)