3

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

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

提前致谢。

4

1 回答 1

1

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

Heron 文档中添加了故障排除部分(请参阅此页面上调试 Java 拓扑),提供远程调试 heron 所需的说明。这很好,但不是我需要的,因为它仅用于调试实例(螺栓/喷嘴......)。但我需要调试调度器、启动器等核心部分。

要为 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 中配置的端口。

暂停:y 表示暂停执行,直到客户端(调试器或 IDE)连接到服务器(jvm 进程)。

您可以在此链接中找到在 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 可能是不错的选择。

于 2016-12-06T12:10:58.533 回答