我正在尝试使用主节点和几个工作程序节点在群集上调试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模式运行,则可能必须将驱动程序设置为连接到调试器,而不是将调试器附加到驱动程序,因为您不必事先知道驱动程序将在哪个节点上执行。

10-05 21:11
查看更多