debugging - descargar - ¿Cómo puedo depurar la aplicación de chispa localmente?
descargar aplicacion chispa (6)
Enciende la carcasa Spark. Esto es directamente de la documentación de Spark :
./bin/spark-shell --master local[2]
También verá el shell Spark denominado REPL
. Es, de lejos, la mejor forma de aprender Spark. Paso el 80% de mi tiempo en el shell Spark y el otro 20% traduciendo el código en mi aplicación.
Soy muy nuevo en la chispa y solo me gustaría aprender paso a paso cómo depurar una aplicación de chispa localmente. ¿Alguien podría detallar los pasos necesarios para hacer esto?
Puedo ejecutar localmente la aplicación Simple en el sitio web de chispa desde la línea de comandos, pero solo necesito pasar por el código y ver cómo funciona. Cualquier ayuda es muy apreciada. Gracias.
La respuesta de Jason Evans no funcionó para mí. Pero
--conf spark.driver.extraJavaOptions=-Xrunjdwp:transport=dt_socket,server=y,address=8086,suspend=n
trabajó
Puedes probar esto en spark-env.sh
:
SPARK_SUBMIT_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8888
Simplemente pase las opciones de java para abrir el puerto de depuración. Aquí hay un buen artículo que aborda su pregunta - http://danosipov.com/?p=779 Lo estoy usando como
$ SPARK_JAVA_OPTS=-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 spark-shell
(Sí, SPARK_JAVA_OPTS está en desuso, pero funciona bien)
solo se necesita un pequeño cambio para la respuesta de @Jason Evan. Necesita un ''-'' before the String "agentlib ...."
--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
también puede usar la opción "--driver-java-options" para lograr el mismo propósito
--driver-java-options -agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
Como David Griffin mencionó, usar spark-shell
puede ser muy útil. Sin embargo, considero que hacer una depuración local real, establecer puntos de corte, inspeccionar variables, etc. es indispensable. Así es como lo hago usando IntelliJ.
Primero, asegúrese de que puede ejecutar su aplicación de chispa localmente usando spark-submit
, por ejemplo, algo así como:
spark-submit --name MyApp --class MyMainClass --master local[2] myapplication.jar
Luego, pídele a tu conductor de chispa local que pause y espere la conexión de un depurador cuando se inicie, agregando una opción como la siguiente:
--conf spark.driver.extraJavaOptions=-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
donde agentlib:jdwp
es la opción de Java Debug Wire Protocol, seguida de una lista de subopciones separadas por comas:
-
transport
define el protocolo de conexión utilizado entre el depurador y el depurador, ya sea socket o "memoria compartida", casi siempre quiere socket (dt_socket
) excepto que creo que en algunos casos en Microsoft Windows -
server
si este proceso debe ser el servidor cuando se habla con el depurador (o, por el contrario, el cliente) - siempre necesita un servidor y un cliente. En este caso, vamos a ser el servidor y esperar una conexión del depurador -
suspend
si pausar la ejecución hasta que un depurador se haya conectado correctamente. Encendemos esto para que el controlador no se inicie hasta que el depurador se conecte -
address
aquí, este es el puerto para escuchar (para solicitudes de conexión del depurador entrante). Puede configurarlo en cualquier puerto disponible (solo debe asegurarse de que el depurador esté configurado para conectarse a este mismo puerto)
Así que ahora, su línea de comando de spark-submit
debería verse algo así como:
spark-submit --name MyApp --class MyMainClass --master local[2] --conf spark.driver.extraJavaOptions=agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=5005
Ahora si ejecuta lo anterior, debería ver algo como
Listening for transport dt_socket at address: 5005
y su aplicación de chispa está esperando que se adjunte el depurador.
A continuación, abra el proyecto IntelliJ que contiene su aplicación Spark, y luego abra "Ejecutar -> Editar configuraciones ..." Luego haga clic en "+" para agregar una nueva configuración de ejecución / depuración y seleccione "Remoto". Dale un nombre, por ejemplo "SparkLocal", y selecciona "Socket" para Transport, "Attach" para el modo Debugger, y escribe "localhost" para Host y el puerto que usaste arriba para Port, en este caso, "5005". Haga clic en "Aceptar" para guardar.
En mi versión de IntelliJ, le da sugerencias para usar la línea de comandos de depuración para el proceso depurado, y usa "suspender = n" - ignoramos eso y usamos "suspender = y" (como se indicó anteriormente) porque queremos la aplicación para esperar hasta que nos conectamos para comenzar.
Ahora deberías estar listo para depurar. Simplemente inicie la chispa con el comando anterior, luego seleccione la configuración de ejecución de IntelliJ que acaba de crear y haga clic en Depurar. IntelliJ debería conectarse a su aplicación Spark, que ahora debería comenzar a funcionar. Puede establecer puntos de interrupción, inspeccionar variables, etc.