调试与Apache火花UI

本指南向您介绍不同的调试选项可以偷看您的Apache引发的内部应用程序。三个重要的地方有:

  • 火花UI

  • 司机日志

  • 遗嘱执行人的日志

火花UI

一旦你开始工作,火花UI显示发生了什么在您的应用程序的信息。火花UI,单击连接集群:

选择火花UI

流选项卡

一旦引发UI,您将看到一个流标签如果流的工作是运行在该集群。如果没有流工作运行在该集群,这个选项卡将不可见。你可以跳过司机日志学习如何检查的异常可能发生而开始流工作。

寻找在这个页面的第一件事就是检查如果你流从源应用程序接收任何输入事件。在这种情况下,您可以看到工作接收1000个事件/秒。

如果你有一个应用程序,该应用程序接收多个输入流,你可以点击输入速度链接将显示的#每个接收机接收到的事件。

输入速度

处理时间

当你向下滚动,找到的图处理时间。这是一个关键的图表了解流媒体工作的性能。一般的经验法则,这是好如果你能过程中每一批你的批处理时间的80%。

对于这个应用程序,批间隔2秒。平均处理时间是450 ms批间隔。如果平均处理时间更接近或大于你的批间隔,那么你将有一个流媒体应用程序很快就会开始排队导致积压,最终可以降低流媒体的工作。

处理时间

完成的批次

页面的结尾,您将会看到一个列表的所有批次完成。过去1000批次,页面显示详细信息完成。从表中,可以得到每一批的#的事件处理和处理时间。如果你想知道更多关于发生在一个批次,你可以点击批处理链接到批处理细节页面。

完成的批次

批处理详细信息页面

这个页面有你想知道的所有细节一批。两个关键的事情是:

  • 输入:输入批处理的细节。在这种情况下,它详细描述了Apache卡夫卡的话题,分区和偏移量阅读火花结构化流批处理。TextFileStream,你看到一个文件名列表,读了这批处理。这是最好的方式开始调试流应用程序读取文本文件。

  • 处理:你可以点击链接ID的工作中所有的细节处理了这批处理。

批处理细节

工作详细信息页面

页面显示一个DAG可视化的工作细节。这是一个非常有用的理解操作的顺序和每批的依赖性。在这种情况下,您可以看到从卡夫卡直接批量读取输入流,后跟一个平坦的地图操作,然后地图操作。由此产生的流被用来更新使用updateStateByKey全局状态。(灰色的框表示跳过阶段。火花是足够聪明跳过某些阶段,如果他们不需要重新计算。如果数据是检查点或缓存,然后火花会跳过这些阶段验算。在这种情况下,这些阶段对应于前批次的依赖updateStateBykey。因为火花结构化流内部检查点的流和它读取检查点,而不是取决于前面的批次,它们显示为灰色的阶段。)

在页面的底部,您还将找到的工作,对这批被处决。你可以点击的链接描述进一步钻取任务级别执行。

工作细节
完成阶段

任务详细信息页面

这是最细粒度级别的调试可以进入引发火花应用程序的UI。这个页面的所有任务,这批被处决。如果你正在调查您的流媒体应用程序性能问题,那么这个页面提供信息,如任务的数量被处决,他们执行(执行器)和混乱的信息

提示

确保在多个执行任务的执行者(节点)在您的集群有足够的并行处理。如果你有一个接收器,有时只有一个执行者可能会做所有的工作虽然你在集群中有一个以上的遗嘱执行人。

任务详细信息

线程转储

线程转储显示了JVM的线程状态的快照。

线程转储是有用的在调试一个特定的悬挂或缓慢运行任务。查看一个特定任务的线程转储火花界面:

  1. 单击工作选项卡。

  2. 工作表,找到对应的目标工作线程转储你想看到,并单击链接描述列。

  3. 在工作的阶段表,找到目标阶段,对应的线程转储你想看到,并单击链接描述列。

  4. 在舞台的任务列表,找到对应的目标任务线程转储你想看到,并注意它任务ID遗嘱执行人ID值。

  5. 单击执行人选项卡。

  6. 执行人表,找到包含的行遗嘱执行人ID对应的值遗嘱执行人ID你前面提到的价值。在这一行,单击链接线程转储列。

  7. 线程转储为遗嘱执行人表,点击的行线程的名字(TID紧随其后的是任务ID你前面提到的价值。(如果任务运行结束之后,你不会找到一个匹配的线程)。任务的线程转储。

线程转储也有用的调试问题,司机似乎挂起(例如,无火花进度条显示)或没有进展查询(例如,火花进度条是停留在100%)。查看驱动程序的线程转储火花界面:

  1. 单击执行人选项卡。

  2. 执行人表,司机行,点击链接线程转储列。司机的线程转储。

司机日志

司机日志有助于2目的:

  • 例外:有时候,你可能不会看到流选项卡中引发的UI。这是因为流工作还没有开始,因为一些例外。你可以钻到司机日志查看异常的堆栈跟踪。在某些情况下,流正常工作可能已经开始。但你会看到所有的批次永远不会完成的批次部分。他们可能是在处理或失败的国家。在这种情况下,司机日志可以方便了解底层的本质问题。

  • 打印:打印语句作为DAG的一部分出现在日志。

遗嘱执行人的日志

遗嘱执行人日志有时有帮助如果你看到某些任务行为不端和希望看到日志为特定的任务。从上面所示的任务详细信息页面,您可以执行程序运行的任务。一旦你有了,你可以去群UI页面,点击#节点,然后大师。主页列出所有的工人。你可以选择可疑的工人的任务运行,然后到log4j的输出。

选择主
火花的主人
引发工人