使用Databricks上的Apache Spark UI进行调试

使用Apache Spark UI进行调试| Databricks在AWS上 [2022年7月19日更新]

這本書是擷取翻譯,並不保證內容的準確性。請參考原文以獲取正確的內容。

在本指南中,我们将介绍一些可用于检查您的Apache Spark应用程序内部运行情况的调试选项。

    • Spark UI

 

    • ドライバーログ

 

    エグゼキューターログ

火花用户界面

流媒体选项卡

当你导航至Spark UI时,你可以查看Streaming选项卡以了解在该集群上执行的流处理作业。如果该集群上没有正在运行的流处理作业,则该选项卡将不可见。为了学习如何检查启动流处理作业时是否发生异常,你也可以跳转到Driver日志。

您在此页面上首先要关注的是您的流媒体应用程序是否接收到数据源的输入事件。在这种情况下,作业每秒接收到1000个事件。

处理时间

向下滚动可以查看Processing Time图表。它是理解您的流式作业性能的重要图表之一。一般规则是,如果在批处理时间的80%内能够处理每个批处理,则可以认为表现良好。

完成了批处理

批处理详细页面

这个页面包含了关于批处理的所有详细信息,这是你可能想要了解的。其中两个关键点是:

Input: バッチへの入力に関する詳細が含まれます。この場合、このバッチにおいてSpark構造化ストリーミングによって読み込まれたApache Kafkaのトピック、パーティション、オフセットの詳細が含まれています。TextFileStreamの場合、このバッチで読み込まれたファイル名の一覧を参照することになります。これは、テキストファイルを読み込むストリーミングアプリケーションをデバッグする際のベストなスタート地点となります。

Processing: このバッチの間に処理されたすべての詳細を含むジョブIDのリンクをクリックすることができます。

職位詳細頁

職位詳細页面上将显示DAG的可视化。这对于理解所有批次中操作的顺序和依赖关系非常有用。在这种情况下,批次从Kafka流直接读取输入,执行flat map操作,然后执行map操作。然后,通过使用updateStateByKey,可以使用得到的流来更新全局状态。(灰色的框表示跳过的阶段。Spark很聪明,如果不需要重新计算,它会跳过一些阶段。当数据检查点被创建或被缓存时,Spark会跳过这些阶段的重新计算。在这种情况下,由于updateStateBykey,这些阶段与先前批次的依赖关系对应。)

任务详细页面

在Spark应用程序中,这是可以通过Spark UI查看的最细致级别的调试信息。此页面包含有关在批处理中执行的所有任务的信息。如果正在调查流式应用程序的性能问题,此页面将提供关于已执行任务的数量,以及在何处(在哪个执行器中)执行以及有关洗牌的信息。

请确保在处理过程中有足够的并行度,即在集群的多个执行者(节点)上执行任务。如果只使用一个接收者,则即使集群中有一个以上的执行者,也可能由一个执行者处理所有工作。

线程转储

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

当我们调试特定的挂起或处理缓慢的任务时,线程转储非常有用。要在Spark UI中查看特定任务的线程转储,请:

    1. 点击Jobs选项卡。

在Jobs表中,查找与所参考的线程转储对应的目标作业,并单击Description列中的链接。
在作业的Stages表中,查找与所参考的线程转储对应的目标阶段,并单击Description列中的链接。
在阶段的Tasks列表中,查找与所参考的线程转储对应的目标任务,并记录下Task ID和Executor ID的值。

点击Executors选项卡。

在Executors表中,查找包含已记录的Executor ID的行。在该行中,单击Thread Dump列中的链接。

在Thread dump for executor表中,点击包含已记录的Task ID后面的TID的Thread Name列的行。(当任务完成处理后,将无法再参考匹配的线程)。将显示任务的转储信息。

此外,在调试问题时,线程转储还可以帮助查看驱动程序是否挂起(例如,Spark进度条未显示)或查询是否没有进展(例如,Spark进度条停留在100%)。要在Spark UI中查看驱动程序的线程转储,请:

    1. 点击Executors选项卡。

 

    在Executors表的driver行上,点击Thread Dump列的链接。将显示驱动程序的线程转储。

驾驶员日志

驾驶员日志在两个方面都非常有用:

    • 例外: 時にはSpark UIにストリーミングタブが表示されないことがあります。これは、何かしらの例外によってストリーミングジョブが起動しないためです。例外のスタックトレースを参照するためにドライバーログにドリルダウンすることができます。いくつかの場合では、ストリーミングジョブが適切に起動している場合があります。しかし、すべてのバッチが決して完了バッチのセクションに到達しないこともあり得ます。これらは全てが処理中の状態、あるいは失敗状態かもしれません。このような場合においても、ドライバーログは背後にある問題の特性を理解する役に立ちます。

 

    print: DAGの一部のprint文はログにも表示されます。

执行者日志

Databricks 免费试用

Databricks提供免费试用。

广告
将在 10 秒后关闭
bannerAds