使用以下Q& A我设法在Apache Storm集群(本地运行)上通过eclipse启用调试。 How to debug Apache Storm in Eclipse?
我的conf/storm.yaml
具有以下行以在工作节点上启用调试:
worker.childopts: "-agentlib:jdwp=transport=dt_socket,address=8000,server=y,suspend=y"
当我提交一个拓扑到风暴运行(在一个集群中)时,我可以在我的编辑器中设置断点和查看变量。
但是当我尝试在本地运行它时(在Local Mode中),我似乎无法连接(连接被拒绝) - 通过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
I have included all the output from the above command to a pastebin. Click here to view it
More information on how storm crawler launches the LocalCluster.
我希望能够在本地模式下进行调试,这样我就可以在命令行中查看输出(当我通过我设置的断点时),并快速进行更改并重新运行,基本上可以加快我的开发速度流动。
答案 0 :(得分:3)
如果以本地模式运行,则不涉及工作者JVM,即没有工作进程被盯着。因此,您的worker.childopts
设置无效。
在Eclipse中调试的最简单方法是在Eclipse中提交/启动拓扑而不是命令行。您的类CrawlTopology
有一个main
方法,因此您可以直接在Eclipse中执行它(当然是在调试模式下)。您不需要指定jar文件名。只需在Eclipse运行配置中指定选项-conf crawler-conf.yaml -local
即可。
答案 1 :(得分:1)
在本地模式下,您可以使用例如
export STORM_JAR_JVM_OPTS =" -agentlib:jdwp = transport = dt_socket,server = y,suspend = y,address = localhost:8000"
在调用storm jar命令之前用Eclipse远程调试。
答案 2 :(得分:0)
我们可以像Eclipse中的任何其他Java代码一样调试Storm Topology。我使用LocalCluster模式在Eclipse中启动我的拓扑。我能够调试ShellBolts,Trident螺栓等。
此外,我还在我的Eclipse中添加了storm-core作为项目(而不是maven依赖项),这使我能够调试和理解暴风雨中发生的事情。有助于更好地跟踪元组确认,发出处理程序,锚点,超时,异常等。