如何通过eclipse在本地群集/模式下调试Apache Storm

使用以下问答环节,我设法通过Apache Storm集群(在本地运行)上的eclipse启用调试。 如何在Eclipse中调试Apache Storm?

我的conf/storm.yaml有以下行来启用工作节点上的调试:

 worker.childopts: "-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y" 

当我提交一个拓扑到风暴运行(在一个集群中)时,我可以在我的编辑器中设置断点和查看变量。

但是当我尝试在本地运行它时(在本地模式下 ),我似乎无法连接(连接拒绝) – 通过eclipse。

 # I'm using storm crawler, I submit a topology like so: storm jar target/storm-crawler-core-10.6-SNAPSHOT-jar-with-dependencies.jar \ com.digitalpebble.storm.crawler.CrawlTopology \ -conf crawler-conf.yaml \ -local # ^ The `-local` runs it in a `LocalCluster` # If I submit it to my actual cluster (without -local), I can debug it through eclipse. # View the pastebin for all the output : http://pastebin.com/PEdA7fH0 

我已将上述命令的所有输出都包含在pastebin中。 点这里观看

有关storm crawler如何启动LocalCluster的更多信息。

我希望能够在本地模式下进行调试,这样我就可以在命令行中查看输出(当我通过我设置的断点时),并快速进行更改并重新运行,这主要是为了加快我的开发流程。


在LocalCluster (本地模式)下运行Apache Storm时,如何通过eclipse调试器调试我的代码?

如果以本地模式运行,则不涉及工作者JVM,即没有工作进程被盯着。 因此,您的worker.childopts设置没有任何效果。

在Eclipse中调试的最简单方法是在Eclipse中提交/启动拓扑而不是命令行。 你的CrawlTopology类有一个main方法,因此你可以直接在Eclipse中执行它(当然是在调试模式下)。 您不需要指定jar文件名。 只需在Eclipse运行配置中指定选项-conf crawler-conf.yaml -local

我们可以像Eclipse中的任何其他Java代码一样调试Storm Topology。 我使用LocalCluster模式在Eclipse中启动我的拓扑。 我可以调试ShellBolts,Trident螺栓等。

另外我还在我的Eclipse中添加了storm-core作为项目(而不是maven依赖项),这使我能够调试和理解暴风雨中发生的事情。 有助于更好地跟踪元组确认,发出处理程序,锚点,超时,exception等。

在本地模式下,您可以使用例如

export STORM_JAR_JVM_OPTS =“ – agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = localhost:8000”

在调用storm jar命令以使用Eclipse远程调试之前。