2015-06-17 67 views
5

Chciałbym profilować moje aplikacje iskra scala, aby dowiedzieć się części kodu, które muszę zoptymalizować. Włączyłem opcję -Xprof in --driver-java, ale nie jest to dla mnie zbyt pomocne, ponieważ daje wiele szczegółowych szczegółów. Interesuje mnie tylko to, ile czasu zajmuje mi wywołanie funkcji w mojej aplikacji. Podobnie jak inne pytania stackoverflow, wiele osób zasugerowało YourKit, ale nie jest to niedrogie. Chciałbym więc użyć czegoś, co nie jest kosztowne, w rzeczywistości wolne od kosztów.Profilowanie iskry Scala

Czy istnieją lepsze sposoby rozwiązania tego problemu?

Odpowiedz

8

Polecam użyć bezpośrednio interfejsu użytkownika, który zapewnia iskra. Zapewnia on wiele informacji i danych dotyczących czasu, kroki, wykorzystania sieci, itp ...

Można sprawdzić więcej na ten temat tutaj: https://spark.apache.org/docs/latest/monitoring.html

Ponadto, w nowej wersji Spark (1.4.0) istnieje to miły wizualizator, który rozumie kroki i etapy twoich robót iskrzących.

3

Jak powiedziałeś, profilowanie procesu rozproszonego jest trudniejsze niż profilowanie pojedynczego procesu JVM, ale istnieją sposoby, aby to osiągnąć.

Można użyć próbkowania jako metody profilowania wątków. Dodaj agenta Java do executorów, który będzie przechwytywał ślady stosu, a następnie agreguj te ślady stosów, aby zobaczyć, które metody aplikacja spędza najwięcej czasu.

Można na przykład użyć agenta java Etsy's statsd-jvm-profiler i skonfigurować go w celu wysłania stosu śladów do InfluxDB, a następnie agregować je za pomocą Flame Graphs.

Aby uzyskać więcej informacji, sprawdź mój post na profilowanie aplikacji Spark: https://www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/