2015-06-17 15 views
5

Vorrei profilare le mie applicazioni spark scala per capire le parti del codice che devo ottimizzare. Ho abilitato -Xprof in --driver-java-options ma questo non mi è di grande aiuto in quanto fornisce molti dettagli granulari. Sono solo interessato a sapere quanto tempo impiegano ogni funzione nella mia applicazione. Come altre domande di stackoverflow, molte persone hanno suggerito YourKit ma non è economico. Quindi mi piacerebbe usare qualcosa che non sia costoso in effetti gratuito.Creazione di un profilo scala scintilla

Esistono modi migliori per risolvere questo problema?

risposta

8

Si consiglia di utilizzare direttamente l'interfaccia utente fornita dalla scintilla. Esso fornisce un sacco di informazioni e metriche per quanto riguarda il tempo, passi, l'utilizzo della rete, ecc ...

È possibile controllare più qui: https://spark.apache.org/docs/latest/monitoring.html

Inoltre, nella nuova versione Spark (1.4.0) ci è un bel visualizzatore per capire i passaggi e le fasi dei tuoi lavori scintilla.

3

Come hai detto, la profilatura di un processo distribuito è più complicata della profilazione di un singolo processo JVM, ma ci sono modi per raggiungere questo obiettivo.

È possibile utilizzare il campionamento come metodo di profilatura del filo. Aggiungi un agente java agli executor che catturerà le tracce dello stack, quindi aggrega queste tracce dello stack per vedere quali metodi trascorrono la maggior parte del tempo.

Ad esempio, è possibile utilizzare l'agente java Etsy's statsd-jvm-profiler e configurarlo per inviare il impilare le tracce su InfluxDB e quindi aggregarle utilizzando Flame Graphs.

Per maggiori informazioni, date un'occhiata al mio post su profiling di applicazioni Spark: https://www.paypal-engineering.com/2016/09/08/spark-in-flames-profiling-spark-applications-using-flame-graphs/

Problemi correlati