java Spark worker在调试模式下不执行任何工作

sqserrrh  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(146)

我在Spark上开发应用程序时遇到了一个意想不到的问题。
我已经启动了一个主进程和一个工作进程(./sbin/start-master.sh和./sbin/start-slave.sh)的spark独立集群。
我在Java代码中从SparkLauncher启动我的应用程序,所以它看起来像这样:

new SparkLauncher()
       .setSparkHome("...")
       .setAppName("...")
       .setMaster("spark://admin:7077")
       .setConf("spark.executor.extraJavaOptions", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")
       .startApplication(new SparkAppStateHandler());

我注意到没有一项工作真正开始。我的日志里满是这样的信息:

WARN  TaskSchedulerImpl:66 - Initial job has not accepted any resources; check your cluster UI to ensure that workers are registered and have sufficient resources

我开始通过调优spark配置(更改分配给执行器的RAM大小、内核数量等)来探索这个问题,但没有真正改变。
然后我删除了这个作业配置中的一行代码:

.setConf("spark.executor.extraJavaOptions", "-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005")

执行人立即开始执行他们的工作。
需要指出的是,我没有启动任何调试进程,所以我没有挂起任何Spark线程。
所以你能理解我为什么指示需要调试的行不允许Spark运行作业吗?(只要没有外部进程连接,仅启用调试端口的AFAIK应该不会对运行时进程产生影响)。
先谢谢你了。

fnvucqvd

fnvucqvd1#

这可能是因为你使用了“suspend=y”。它将导致JVM在main()的开始处暂停,直到调试器连接到它。

相关问题