我正在尝试使用主节点和几个工作程序节点在群集上调试Spark应用程序。我已经成功使用Spark独立集群管理器设置了主节点和工作节点。我下载了带有二进制文件的spark文件夹,并使用以下命令设置了工作节点和主节点。这些命令从spark目录执行。
启动主命令
./sbin/start-master.sh
用于启动工作程序节点的命令
./bin/spark-class org.apache.spark.deploy.worker.Worker master-URL
提交申请的命令
./sbin/spark-submit --class Application --master URL ~/app.jar
现在,我想了解在提交我的应用程序时工作节点上通过Spark源代码进行的控制流(我只想使用使用reduce()的给定示例之一)。我假设我应该在Eclipse上安装Spark。 Apache Spark网站上的Eclipse设置link似乎已损坏。对于设置Spark和Eclipse以在工作程序节点上逐步浏览Spark源代码,我将不胜感激。
谢谢!
最佳答案
区分调试驱动程序和调试执行程序之一很重要。他们需要传递给spark-submit
的不同选项
为了调试驱动程序,您可以将以下内容添加到spark-submit
命令中。然后将远程调试器设置为连接到启动了驱动程序的节点。
--driver-java-options -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
在此示例中,指定了端口5005,但是如果该端口上已在运行某些端口,则可能需要自定义端口。
连接到执行程序类似,将以下选项添加到
spark-submit
命令中。--num-executors 1 --executor-cores 1 --conf "spark.executor.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=n,address=wm1b0-8ab.yourcomputer.org:5005,suspend=n"
用本地计算机的地址替换该地址。 (最好测试一下是否可以从Spark集群访问它)。
在这种情况下,请以侦听模式启动调试器,然后启动spark程序并等待执行程序附加到调试器。重要的是将执行程序的数量设置为1,否则多个执行程序都将尝试连接到调试器,这可能会引起问题。
这些示例用于在
sparkMaster
设置为yarn-client
的情况下运行,尽管它们在mesos下运行时也可能起作用。如果您使用yarn-cluster
模式运行,则可能必须将驱动程序设置为连接到调试器,而不是将调试器附加到驱动程序,因为您不必事先知道驱动程序将在哪个节点上执行。