用idea调试Spark独立集群
Posted
技术标签:
【中文标题】用idea调试Spark独立集群【英文标题】:Debugging Spark standalone cluster with idea 【发布时间】:2018-04-25 08:42:31 【问题描述】:我正在尝试使用主节点和工作节点在本地集群上调试 Spark 应用程序。我已经成功地使用带有start-master.sh
的 Spark 独立集群管理器设置了主节点和工作节点,并且它可以工作。但是我想了解 Spark 应用程序在 spark 集群中的工作方式,所以我想以调试模式启动集群。我阅读了start-master.sh
代码,模拟了args 并启动了org.apache.spark.deploy.master.Master
main 方法。不幸的是它得到了一个NoClassDefFoundError,我无法打开webui。我想知道问题出在哪里。
错误是:
Exception in thread "dispatcher-event-loop-1" java.lang.NoClassDefFoundError: org/eclipse/jetty/util/thread/ThreadPool
at org.apache.spark.ui.WebUI.attachPage(WebUI.scala:81)
at org.apache.spark.deploy.master.ui.MasterWebUI.initialize(MasterWebUI.scala:48)
at org.apache.spark.deploy.master.ui.MasterWebUI.<init>(MasterWebUI.scala:43)
at org.apache.spark.deploy.master.Master.onStart(Master.scala:131)
at org.apache.spark.rpc.netty.Inbox$$anonfun$process$1.apply$mcV$sp(Inbox.scala:122)
at org.apache.spark.rpc.netty.Inbox.safelyCall(Inbox.scala:205)
at org.apache.spark.rpc.netty.Inbox.process(Inbox.scala:101)
at org.apache.spark.rpc.netty.Dispatcher$MessageLoop.run(Dispatcher.scala:216)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.thread.ThreadPool
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 11 more
我的调试配置是: enter image description here
谢谢!
【问题讨论】:
【参考方案1】:我建议不要使用 spark 独立集群进行调试。
-
您可以在带有断点的 IDE 中本地运行 spark。
Spark 为您提供了在本地运行并指向本地文件系统作为 HDFS 的选项。
请点击以下链接了解更多关于如何在spark中为本地模式编写测试用例 http://bytepadding.com/big-data/spark/word-count-in-spark/
【讨论】:
我也更喜欢这种方法。另一个优势是,通过在本地模式下运行(有效地运行嵌入式 Spark 引擎),您可以直接在 IDE 中运行和调试集成测试,而无需启动任何服务。以上是关于用idea调试Spark独立集群的主要内容,如果未能解决你的问题,请参考以下文章