debug-ability
,这是通过将每个spout / bolt任务移动到一个Heron Instance(一个JVM进程)而不是将多个任务捆绑到一起来实现的。一个JMV(风暴过去是怎么做的)。
此方法真正有助于调试拓扑。但我的问题是,如何尝试调试苍鹭的核心部分,如调度程序或资源管理部分。除了记录/打印输出之外,有没有办法做到这一点?因为这是一个真正的时间&能源消耗过程。有没有办法使用像IDE这样的工具(例如IntelliJ)来设置一些检查点并调试苍鹭中调度任务的整个过程?
提前致谢。
答案 0 :(得分:1)
经过长期努力解决这个问题,我终于找到了答案,在Heron开发者的帮助下(帽子给他们)。 答案是远程调试jvm进程。
Heron文档中添加了一个故障排除部分(请参阅this page上的调试Java拓扑),该文档提供了远程调试苍鹭所需的说明。它很好,但不是我需要的,因为它只用于调试实例(螺栓/喷口......)。但我需要调试核心部件,如调度程序,启动程序等。
要为苍鹭启用完整的远程调试,您应该在 execute.py 中添加第二行(可以在 heron / tools / cli / src /中找到python )文件:
java_opts = ['-D' + opt for opt in java_defines]
//add this line here
java_opts.append('-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005')
地址:您在IDE中配置的端口。
suspend:y表示暂停执行,直到客户端(调试器或IDE)连接到服务器(jvm进程)。
您可以在this link中找到在Intellij中设置远程调试的说明。
重要提示:不要忘记重新编译源代码并安装bin软件包。 编译并安装苍鹭
bazel build --config=ubuntu heron/...
bazel run --config=ubuntu -- scripts/packages:heron-client-install.sh --user
bazel run --config=ubuntu -- scripts/packages:heron-api-install.sh --user --maven
现在将检查点放在任何地方,并从终端提交拓扑,然后在IDE中开始调试,它将带您到检查点。只需记住将检查点添加到执行路径,SubmitterMain或SchedulerMain就可以成为好的候选者。