Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 929|回复: 0

Spark异常:A master URL must be set in your configuration处理记录

[复制链接]
  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 803 天

    [LV.10]以坛为家III

    2053

    主题

    2111

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    726482
    发表于 2021-4-28 16:36:57 | 显示全部楼层 |阅读模式

    问题描述:

        项目中一位同事提交了一部分代码,代码分为一个抽象类,里面含有sparkcontent,sparkSession对象;然后又三个子类实例化上述抽象类,这三个子类处理三个任务,最后在同一个Main类,里面调用这个子类的处理任务的方法,进行计算;在本地(local)运行,一切正常,部署到测试服务器,会报如下异常:

    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的分布式运行理解的不是很透彻,仍需努力提升!

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-11-22 03:44 , Processed in 0.061643 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表