监控 Spark 实际工作时间 vs. 通信时间

Monitor Spark actual work time vs. communication time

在 Spark 集群上,如果作业非常小,我认为集群效率会很低,因为大部分时间都花在节点之间的通信上,而不是利用节点上的处理器。

有没有办法监控通过 spark-submit 提交的作业有多少时间浪费在通信上,有多少时间浪费在实际计算上?

然后我可以监控这个比率,以检查我的文件聚合方案或处理算法在分发效率方面的效率。

我查看了 Spark 文档,但找不到任何相关内容,但我确定我遗漏了一些内容。有人有想法吗?

假设您是 运行 Spark 1.4.1 或更高版本,您可以在 Spark UI 中看到此信息(抱歉,我不知道如何为早期版本的 Spark 执行此操作).

这是一张示例图片:

这是 the page 图片的来源。

简要总结:您可以在 Spark UI 中查看 Spark 作业中发生的所有事件的时间线。从那里,您可以放大每个单独的工作和每个单独的任务。每个任务分为shceduler延迟、序列化/反序列化、计算、shuffle等

现在,这显然非常漂亮 UI 但您可能需要更强大的功能,以便您可以通过编程方式检查此信息。看来 here 您可以使用 REST API 导出 JSON 中的日志信息。