推特声称,apache与apache相比的最大优势之一是debug-ability,这是通过将每个喷口/螺栓任务移动到一个heron实例(一个JVM进程)而不是将多个任务捆绑到一个JMV(以前是如何使用风暴)来实现的。
这种方法确实有助于调试拓扑。但我的问题是,如何尝试调试鹭的核心部分,如调度程序或资源管理部分。除了记录/打印输出之外,还有其他方法吗?因为这是一个耗费时间和精力的过程。有没有一种方法可以使用像IDE这样的工具(例如IntelliJ)来设置检查点,并调试heron中调度任务的整个过程?
提前谢谢。
发布于 2016-12-06 12:10:58
在与这个问题做了很长时间的斗争之后,我终于找到了一个答案,得到了Heron开发人员的帮助(Hat off to他们)。答案是远程调试jvm进程.
已在heron文档中添加了故障排除部分(请参阅调试Java拓扑 at 此页),该文档提供了远程调试此页所需的说明。它很好,但不是我所需要的,因为它只用于调试实例(螺栓/喷口.)。但我需要调试核心部分,如调度器、启动程序等。
要为heron启用完整的execute.py(can远程调试,您应该在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包。编译和安装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可能是很好的候选者。
https://stackoverflow.com/questions/38694622
复制相似问题