调试 apache heron 调度程序

debugging apache heron sccheduler

Twitter 声称与 apache storm 相比,apache heron 的最大优势之一是 debug-ability,这是通过将每个 spout/bolt 任务移动到一个 Heron 实例(一个 JVM 进程)而不是将多个任务捆绑到一个 JMV(storm 过去是怎么做的)。

这种方法确实有助于调试拓扑。但我的问题是,如何尝试调试 heron 的核心部分,如调度程序或资源管理部分。除了 logging/printing 输出之外,还有其他方法可以做到这一点吗?因为这是一个真正耗时耗力的过程。有没有办法使用像IDE(例如IntelliJ)这样的工具来设置一些检查点并调试heron中调度任务的整个过程?

提前致谢。

在与这个问题斗争了很长时间之后,在 Heron 开发人员的帮助下,我终于找到了答案(向他们致敬)。 答案是远程调试jvm进程。

故障排除部分(请参阅 调试 Java 拓扑 at this page)已添加到 Heron 文档中,其中提供了远程调试 Heron 所需的说明。这很好但不是我需要的,因为它仅用于调试实例(bolts/spouts...)。但我需要调试核心部分,如调度器、启动器等。

要为 heron 启用完整的远程调试,您应该将第二行添加到 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 包。 编译安装heron

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 可能是不错的选择。