浅谈spark yarn模式的问题调试

原创 2015年07月07日 16:57:43

    spark运行的时候,有可能发生崩溃,而在spark console里面看到的堆栈,很可能不是发生问题的实际堆栈,这个时候需要看yarn日志来定位问题。

    我在调试spark程序的时候,采用如下命令启动spark驱动程序:

/usr/local/spark-1.3.1-bin-hadoop2.6/bin/spark-submit --supervise --class spark_security.Sockpuppet  --name "testperf"  --executor-memory 4096M --num-executors 8 --driver-memory 8096M --master yarn-client /home/www/spark_Security-1.0-SNAPSHOT.jar

这个时候报如下错误:

15/07/03 14:35:01 INFO scheduler.DAGScheduler: Stopping DAGScheduler
15/07/03 14:35:01 INFO scheduler.DAGScheduler: Job 10 failed: foreachRDD at Sockpuppet.scala:80, took 2.226514 s
15/07/03 14:35:01 INFO scheduler.DAGScheduler: Stage 20 (map at Sockpuppet.scala:57) failed in 2.192 s
15/07/03 14:35:01 INFO cluster.YarnClientSchedulerBackend: Shutting down all executors
15/07/03 14:35:01 INFO cluster.YarnClientSchedulerBackend: Asking each executor to shut down
15/07/03 14:35:01 ERROR scheduler.JobScheduler: Error running job streaming job 1435905299000 ms.0
org.apache.spark.SparkException: Job cancelled because SparkContext was shut down
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$cleanUpAfterSchedulerStop$1.apply(DAGScheduler.scala:699)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$cleanUpAfterSchedulerStop$1.apply(DAGScheduler.scala:698)
        at scala.collection.mutable.HashSet.foreach(HashSet.scala:79)
        at org.apache.spark.scheduler.DAGScheduler.cleanUpAfterSchedulerStop(DAGScheduler.scala:698)
        at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onStop(DAGScheduler.scala:1411)
        at org.apache.spark.util.EventLoop.stop(EventLoop.scala:84)
        at org.apache.spark.scheduler.DAGScheduler.stop(DAGScheduler.scala:1346)
        at org.apache.spark.SparkContext.stop(SparkContext.scala:1380)
        at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend$$anon$1.run(YarnClientSchedulerBackend.scala:143)
Exception in thread "main" org.apache.spark.SparkException: Job cancelled because SparkContext was shut down
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$cleanUpAfterSchedulerStop$1.apply(DAGScheduler.scala:699)
        at org.apache.spark.scheduler.DAGScheduler$$anonfun$cleanUpAfterSchedulerStop$1.apply(DAGScheduler.scala:698)
        at scala.collection.mutable.HashSet.foreach(HashSet.scala:79)
        at org.apache.spark.scheduler.DAGScheduler.cleanUpAfterSchedulerStop(DAGScheduler.scala:698)
        at org.apache.spark.scheduler.DAGSchedulerEventProcessLoop.onStop(DAGScheduler.scala:1411)
        at org.apache.spark.util.EventLoop.stop(EventLoop.scala:84)
        at org.apache.spark.scheduler.DAGScheduler.stop(DAGScheduler.scala:1346)
        at org.apache.spark.SparkContext.stop(SparkContext.scala:1380)
        at org.apache.spark.scheduler.cluster.YarnClientSchedulerBackend$$anon$1.run(YarnClientSchedulerBackend.scala:143)
15/07/03 14:35:01 INFO cluster.YarnClientSchedulerBackend: Stopped
15/07/03 14:35:01 INFO scheduler.OutputCommitCoordinator$OutputCommitCoordinatorActor: OutputCommitCoordinator stopped!
15/07/03 14:35:01 INFO spark.MapOutputTrackerMasterActor: MapOutputTrackerActor stopped!
15/07/03 14:35:01 INFO storage.MemoryStore: MemoryStore cleared
15/07/03 14:35:01 INFO storage.BlockManager: BlockManager stopped

可是在我的驱动程序中,实在是没有出错导致异常的地方。这个时候我采用如下命令

yarn logs -applicationId application_1436175803684_0004 >execption

看了一下yarn日志。

yarn中出错信息有2个,第一个是如下堆栈信息:

 at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
        at org.apache.hadoop.util.Shell.run(Shell.java:455)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
        at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

第二个是如下错误:

15/07/06 10:49:54 ERROR executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL 15: SIGTERM

我最先根据

 ERROR executor.CoarseGrainedExecutorBackend: RECEIVED SIGNAL 15: SIGTERM

这条出错信息查找解决方案,尝试了各种解决方案,花费了很长的时间,问题还是没有解决。

然后根据yarn里面的这条堆栈信息:

at org.apache.hadoop.util.Shell.runCommand(Shell.java:538)
        at org.apache.hadoop.util.Shell.run(Shell.java:455)
        at org.apache.hadoop.util.Shell$ShellCommandExecutor.execute(Shell.java:715)
        at org.apache.hadoop.yarn.server.nodemanager.DefaultContainerExecutor.launchContainer(DefaultContainerExecutor.java:211)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:302)
        at org.apache.hadoop.yarn.server.nodemanager.containermanager.launcher.ContainerLaunch.call(ContainerLaunch.java:82)
        at java.util.concurrent.FutureTask.run(FutureTask.java:262)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
        at java.lang.Thread.run(Thread.java:745)

    找到了解决方案,问题的原因是hdp版本不对,在spark-defaults.conf文件里面加上如下两行:

spark.driver.extraJavaOptions -Dhdp.version=2.2.0.0–2041
spark.yarn.am.extraJavaOptions -Dhdp.version=2.2.0.0–2041

问题解决


总结一下:

1. 当spark console打印的堆栈很可能只是表面现象,导致问题出现的堆栈信息很可能在yarn的日志里面

2. yarn日志里面的堆栈错误,要优先排查解决














相关文章推荐

spark on yarn 的那些坑

在公司6个节点的测试集群运行得好好的,结果也很正常,然后放上60个节点的预生产环境,我勒个擦,搞了我两天,主要是生产环境的那些家伙不配合,一个问题搞得拖啊拖 ,首先是安全认证问题,截取一两个有意义的吧...

spark 例子运行- spark pi

了解spark的基本运行,在window下面的应用。了解本地运行一个spark程序的过程。...
  • proware
  • proware
  • 2015年11月07日 13:33
  • 11343

spark 启动报错 -- 主机别名

spark 启动报错 -- 主机别名
  • hzdxw
  • hzdxw
  • 2016年07月03日 18:25
  • 2343

spark 自带的例子在eclipse下运行的方法

spark 自带java例子在eclipse下运行。
  • cancumt
  • cancumt
  • 2016年05月11日 21:44
  • 4051

Spark Streamning 程序调试

Spark Streamning 程序调试

spark-shell启动报错:./spark-shell: line 44: 5271 已杀死

最近接触Spark的,在已经配置好的集群master上启动spark-shell时,出现此错误。除此之外,命令行再无其他提示信息,上下滚动,就连ERROR提示都没发现,很是疑惑。 解决步骤如下: 1....

spark error

Using Spark's default log4j profile: org/apache/spark/log4j-defaults.properties 16/07/28 05:42:58 IN...
  • xugen12
  • xugen12
  • 2016年07月28日 20:59
  • 958

Spark问题8之worker lost

更多代码请见:https://github.com/xubo245/SparkLearningSpark生态之Alluxio学习 版本:alluxio(tachyon) 0.7.1,spark-1.5...

ERROR org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: RECEIVED SIGNAL 15: SIGTERM

重新搭建Hadoop集群,一切配置就绪后,启动集群后,在Master和所有的Slave节点上通过JPS命令都可以看到集群应该启动的进程都已经启动了。通过50070端口也可以查看到所有DataNode处...

datanode节点失联故障处理

故障现象是hadoop集群中某个datanode无故失联,调阅log记录中发现                                                             ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:浅谈spark yarn模式的问题调试
举报原因:
原因补充:

(最多只允许输入30个字)