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



使用下面的Q&A,我设法在Apache Storm集群(本地运行)上通过eclipse启用调试。如何在Eclipse中调试Apache Storm ?

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

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

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

但是当我尝试在本地运行它时(在本地模式下),我似乎无法连接(连接拒绝)-通过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

我已经将上述命令的所有输出包含到粘贴bin中。点击这里查看

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

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


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

如果在本地模式下运行,则不涉及工作JVM,即不启动工作进程。因此,您的worker.childopts设置没有任何效果。

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

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

export STORM_JAR_JVM_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=localhost:8000"
在调用storm jar命令用Eclipse远程调试之前。

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

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

最新更新