Я бы рекомендовал вам напрямую использовать интерфейс, который обеспечивает искру. Он предоставляет много информации и показателей по времени, шагам, использованию сети и т. Д. ...
Вы можете узнать подробнее об этом здесь: https://spark.apache.org/docs/ last / monitoring.html
Кроме того, в новой версии Spark (1.4.0) есть хороший визуализатор, чтобы понять шаги и этапы ваших искровых заданий.
Как вы сказали, профилирование распределенного процесса сложнее, чем профилирование одного процесса JVM, но есть способы его достижения.
Вы можете использовать выборку в качестве метода профилирования потоков. Добавьте агента java к исполнителям, которые будут захватывать трассировки стека, а затем агрегируют по этим трассировкам стека, чтобы узнать, какие методы использует ваше приложение в большинстве случаев.
Например, вы можете использовать statsd- jvm-profiler java agent и настроить его для отправки трассировки стека в InfluxDB , а затем скомпилировать их с помощью пламенных графов .
информацию, проверить мое сообщение о профилировании приложений Spark: https://www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/
Посмотрите на JVM Profiler , выпущенный UBER.
JVM Profiler - это инструмент, разработанный UBER для анализа приложений JVM в распределенной среде. Он может подключать Java-агент к исполнителям приложения Spark / Hadoop распределенным способом и собирать различные показатели во время выполнения. Это позволяет отслеживать произвольные java-методы / аргументы без изменения исходного кода (аналогично Dtrace).
Вот сообщение в блоге .
Недавно я написал статью и скрипт, который обертывает spark-submit
и генерирует график пламени после выполнения приложения Spark.
Вот статья: https: // www .linkedin.com / pulse / profiling-spark-applications-one-click-michael-spector
Вот сценарий: https://raw.githubusercontent.com/spektom/ spark-flamegraph / master / spark-submit-flamegraph
Просто используйте его вместо обычного spark-submit
.