为了账号安全,请及时绑定邮箱和手机立即绑定

spark-submit报错:

标签:
Spark

原文标题:

spark-submit报错:Application application_1529650293575_0148 finished with failed status

我的原创地址:https://dongkelun.com/2018/07/06/sparkSubmitException1/

前言

记录spark-submit提交Spark程序出现的一个异常,以供第一次出现这种异常且不知道原因,该怎么解决的的同学参考。

1、异常信息

Exception in thread "main" org.apache.spark.SparkException: Application application_1529650293575_0148 finished with failed status
    at org.apache.spark.deploy.yarn.Client.run(Client.scala:1187)
    at org.apache.spark.deploy.yarn.Client$.main(Client.scala:1233)
    at org.apache.spark.deploy.yarn.Client.main(Client.scala)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:782)
    at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:180)
    at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:205)
    at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:119)
    at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)

2、异常原因

出现该异常场景是spark-submit提交master为yarn cluster,yarn client没有这种问题,原因是因为,在代码里指定了master为local(本地测试用),在spark-submit提交程序时忘记删除了

  • 注:上面说的是我碰到的一种情况,其实只要有错误,yarn cluster模式都会报这种异常,具体可以看目录7

3、异常再现

代码

package com.dkl.leanring.spark.exceptionimport org.apache.spark.sql.SparkSessionobject YarnClusterDemo {  def main(args: Array[String]): Unit = {    val spark = SparkSession.builder().appName("YarnClusterDemo").master("local").getOrCreate()    val sc = spark.sparkContext    val rdd = sc.parallelize(Seq(1, 2, 3))
    println(rdd.count)

    spark.stop()
  }
}

这段代码在本地是没有问题,输出结果为3,把它打包,然后放在集群上,用spark-submit提交测试一下

4、yarn client

--master yarn 默认的就是client模式,所以用下面的命令

spark-submit --master yarn --class com.dkl.leanring.spark.exception.YarnClusterDemo spark-scala_2.11-1.0.jar

等价于

spark-submit --master yarn --deploy-mode client --class com.dkl.leanring.spark.exception.YarnClusterDemo spark-scala_2.11-1.0.jar

结果也会正常打印出来,因为在代码里指定了master为local所以实际上应该还是用的local,但是没有研究client模式不报错,可能是用的client模式用提交代码的那台机器为Driver,然后再用local模式吧

5、yarn cluster

用下面的命令,即可再现异常

spark-submit --master yarn --deploy-mode cluster --class com.dkl.leanring.spark.exception.YarnClusterDemo spark-scala_2.11-1.0.jar

所以实际用spark-submit提交程序的时候,将master在代码里删掉,然后用命令行--master指定即可

val spark = SparkSession.builder().appName("YarnClusterDemo").getOrCreate()

6、附图

webp

image


webp

image

7、更新:其他情况

在我后面用yarn cluster模式的时候,又碰到了一样的异常信息,检查了一下master没有在代码里指定为local,经过一步步的测试,最后发现,是由于有一行代码读取的本地文件,在yarn client模式的时候,提交程序的那台机器即为Driver,会从Driver的机器上对应的目录找本地文件,所以在yarn client的时候不会报错(Driver有该文件)在yarn cluster会随机选择集群上一个节点作为Driver,那么Driver没有该文件,就会产生异常,而yarn cluster模式返回的异常不很明确,只是返回

Exception in thread "main" org.apache.spark.SparkException: Application application_*** finished with failed status

这样的异常,所以不知道是哪里出错了,可以在代码里加上捕获异常的代码,这样就可以在yarn的日志里看到具体的异常信息了,具体的代码我就不贴了,贴一下捕获异常的

try {      //此处为你的可能产生异常的代码
   } catch {     case e: Exception => println(e)
   }

在加了捕获异常代码后,yarn日志


webp

image



作者:董可伦
链接:https://www.jianshu.com/p/663f7adcb41e


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消