调试apache heron sccheduler

时间:2016-08-01 08:52:46

标签: java intellij-idea scheduling stream-processing heron

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

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

提前致谢。

1 个答案:

答案 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就可以成为好的候选者。