spark submit 执行完任务后,卡住了,不退出,找了各种日志,没有报错,并且任务执行的结果也是对的。
出现这个问题,感觉有点蒙,网上找找解决办法,全部不适用。下面详细说一下我的分析和解决过程
1,问题
2019-08-26 19:08:43 INFO YarnClientSchedulerBackend:54 - Stopped 2019-08-26 19:08:43 INFO MapOutputTrackerMasterEndpoint:54 - MapOutputTrackerMasterEndpoint stopped! 2019-08-26 19:08:43 INFO MemoryStore:54 - MemoryStore cleared 2019-08-26 19:08:43 INFO BlockManager:54 - BlockManager stopped 2019-08-26 19:08:43 INFO BlockManagerMaster:54 - BlockManagerMaster stopped 2019-08-26 19:08:43 INFO OutputCommitCoordinator$OutputCommitCoordinatorEndpoint:54 - OutputCommitCoordinator stopped! 2019-08-26 19:08:43 INFO SparkContext:54 - Successfully stopped SparkContext //这步出来后,就卡住了 ^C2019-08-26 19:08:43 INFO ShutdownHookManager:54 - Shutdown hook called //这步出不来,Ctrl+C才能出来 2019-08-26 19:08:43 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-0709945c-b48e-4139-93e3-1c89daf92ac2 2019-08-26 19:08:43 INFO ShutdownHookManager:54 - Deleting directory /tmp/spark-9d8de750-7896-4cde-bc15-6fa0eab59ed7
2,罗列一下,网上找到的方法,本人试了没用,希望对你们有用
//方法1,spark2系列加上以下配置, val spark = SparkSession.builder().appName("App_name").getOrCreate() spark.conf.set("mapreduce.fileoutputcommitter.algorithm.version", "2") //方法2,在spark-submit提交任务 选择 spark on yarn cluster模式 # spark-submit --class test --master yarn test .jar --deploy-mode cluster --conf spark.yarn.submit.waitAppCompletion=false //方法2,spark2系列加上以下配置 val spark = SparkSession.builder().appName("App_name").getOrCreate() spark.conf.set("spark.hadoop.mapred.output.committer.class","com.appsflyer.spark.DirectOutputCommitter") spark.conf.set("mapreduce.fileoutputcommitter.marksuccessfuljobs", "false") //方法4 spark.stop()
3,确定问题的所在
开始的时候,采用了debug模式,大范围打断点的方法,确定不到问题位置。
最后采取了,逐步删代码的方法,逐步删代码的方法,逐步删代码的方法,找到原因。
引起不退出的代码如下:
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。
线程池没有关闭,导致spark-submit在等线程池结束。
转载请注明
作者:海底苍鹰
地址:http://blog.51yip.com/hadoop/2172.html