Depuración de aplicaciones de Apache Spark en un clúster de HDInsight con Azure Toolkit for IntelliJ mediante SSH

En este artículo se ofrecen instrucciones paso a paso para el empleo de las herramientas de HDInsight de Azure Toolkit for IntelliJ para depurar aplicaciones de forma remota en un clúster de HDInsight.

Requisitos previos

Creación de una aplicación de Scala en Spark

  1. Inicie IntelliJ IDEA y seleccione Create New Project (Crear proyecto) para abrir la ventana New Project (Nuevo proyecto).

  2. Seleccione Azure Spark/HDInsight en el panel izquierdo.

  3. Seleccione Spark Project with Samples (Scala) (Proyecto de Spark con ejemplos [Scala]) en la ventana principal.

  4. En la lista desplegable Build tool (Herramienta de compilación), seleccione una de las siguientes:

    • Maven: para agregar compatibilidad con el asistente para la creación de proyectos de Scala.
    • SBT para administrar las dependencias y compilar el proyecto de Scala.

    Intellij Create New Project Spark.

  5. Seleccione Siguiente.

  6. En la siguiente ventana New Project (Nuevo proyecto), proporcione la siguiente información:

    Propiedad Descripción
    Nombre de proyecto Escriba un nombre. Este tutorial usa myApp.
    Ubicación del proyecto Escriba la ubicación deseada para guardar el proyecto.
    Project SDK (SDK del proyecto) Si está en blanco, seleccione New... (Nuevo...) y vaya a su JDK.
    Versión de Spark El asistente de creación integra la versión adecuada de los SDK de Spark y Scala. Si la versión del clúster de Spark es anterior a 2.0, seleccione Spark 1.x. De lo contrario, seleccione Spark 2.x. En este ejemplo se usa Spark 2.3.0 (Scala 2.11.8) .

    Intellij New Project select Spark version.

  7. Seleccione Finalizar. El proyecto puede tardar unos minutos en estar disponible. Fíjese en la esquina inferior derecha para ver el progreso.

  8. Expanda el proyecto y vaya a src>main>scala>sample. Haga doble clic en SparkCore_WasbIOTest.

Realizar una ejecución local

  1. En el script SparkCore_WasbIOTest, haga clic con el botón derecho en el editor de scripts y luego seleccione la opción Run “SparkCore_WasbIOTest” (Ejecutar “SparkCore_WasbIOTest”) para realizar la ejecución local.

  2. Una vez completada la ejecución local, puede ver el archivo de salida guardado en el Explorador de proyectos actual datos>default .

    Intellij Project local run result.

  3. Nuestras herramientas han establecido automáticamente la configuración de la ejecución local predeterminada al realizar la ejecución local y la depuración local. Abra el XXX [Spark en HDInsight] de configuración en la esquina superior derecha; verá que ya se ha creado el XXX [Spark en HDInsight] en Apache Spark on HDInsight (Apache Spark en HDInsight). Cambie a la pestaña Ejecutar localmente.

    Intellij Run debug configurations local run.

    • Variables de entorno: si ya ha establecido la variable de entorno del sistema HADOOP_HOME en C:\WinUtils, detecta automáticamente que no es necesario agregarla manualmente.
    • Ubicación de WinUtils.exe: si no se ha establecido la variable de entorno del sistema, haga clic en el botón correspondiente para encontrar la ubicación.
    • Solo tiene que elegir cualquiera de las dos opciones. No se necesitan en MacOS y Linux.
  4. También puede establecer la configuración manualmente antes de realizar la depuración local y la ejecución local. En la captura de pantalla anterior, seleccione el signo más ( + ). Después, seleccione la opción Apache Spark on HDInsight (Apache Spark en HDInsight). Escriba la información en Name (Nombre), Main class name (Nombre de clase principal) y haga clic en el botón de ejecución local.

Realizar una depuración local

  1. Abra el script SparkCore_wasbloTest y establezca los puntos de interrupción.

  2. Haga clic con el botón derecho en el editor de scripts y seleccione la opción Debug '[Spark Job]XXX' (Depurar "[Trabajo de Spark]XXX") para realizar la depuración local.

Realizar la ejecución remota

  1. Seleccione Ejecutar>Editar configuraciones... . Desde este menú, puede crear o modificar las configuraciones para la depuración remota.

  2. En el cuadro de diálogo Run/Debug Configurations (Ejecutar/depurar configuraciones), seleccione el signo más ( + ). Después, seleccione la opción Apache Spark on HDInsight (Apache Spark en HDInsight).

    Intellij Add new configuration.

  3. Cambie a la pestaña Remotely Run in Cluster (Ejecutar de forma remota en clúster). Escriba la información en los campos Name (Nombre), Spark cluster (Clúster de Spark) y Main class name (Nombre de clase principal). A continuación, haga clic en Advanced configuration (Remote Debugging) (Configuración avanzada [depuración remota]). Nuestras herramientas admiten la depuración con ejecutores. Elv alor predeterminado de numExectors es 5. Es mejor no establecer más de 3.

    Intellij Run debug configurations.

  4. En la parte Advanced Configuration (Remote Debugging) (Configuración avanzada [depuración remota]), seleccione Enable Spark remote debug (Habilitar la depuración remota de Spark). Escriba el nombre de usuario SSH y luego especifique una contraseña o use un archivo de clave privada. Si desea realizar la depuración remota, debe establecerla. No es necesario establecerla si solo desea usar la ejecución remota.

    Intellij Advanced Configuration enable spark remote debug.

  5. La configuración se guarda ahora con el nombre especificado. Para ver los detalles de configuración, seleccione el nombre de configuración. Para realizar cambios, seleccione Edit Configurations (Editar configuraciones).

  6. Después de completar la configuración, puede ejecutar el proyecto en el clúster remoto o realizar la depuración remota.

    Intellij Debug Remote Spark Job Remote run button.

  7. Haga clic en el botón Desconectar si los registros de envío no aparecen en el panel izquierdo. Sin embargo, continúa en ejecución en el back-end.

    Intellij Debug Remote Spark Job Remote run result.

Realizar una depuración remota

  1. Configure los puntos de interrupción y luego seleccione el icono Remote debug (Depuración remota). La diferencia con el envío remoto es que hay que configurar el nombre de usuario y la contraseña de SSH.

    Intellij Debug Remote Spark Job debug icon.

  2. Cuando la ejecución del programa alcanza el punto de interrupción, aparecen una pestaña Controlador y dos pestañas Ejecutor en el panel Depurador. Seleccione el icono Resume Program (Continuar programa) para seguir ejecutando el código, que luego alcanza el siguiente punto de interrupción. Debe cambiar a la pestaña Executor (Ejecutor) correcta para buscar el ejecutor de destino que se va a depurar. Puede ver los registros de ejecución en la pestaña Console (Consola) correspondiente.

    Intellij Debug Remote Spark Job Debugging tab.

Realizar la depuración remota y la corrección de errores

  1. Configure dos puntos de interrupción y luego seleccione el icono Depurar para iniciar el proceso de depuración remota.

  2. El código se detiene en el primer punto de interrupción y se muestra la información de parámetros y variables en el panel Variables.

  3. Seleccione el icono Resume Program (Continuar programa) para continuar. El código se detiene en el segundo punto. La excepción se detecta según lo previsto.

    Intellij Debug Remote Spark Job throw error.

  4. Vuelva a seleccionar el icono Resume Program (Continuar programa). La ventana HDInsight Spark Subsmission (Envío de HDInsight Spark) muestra un error de ejecución de trabajo.

    Intellij Debug Remote Spark Job Error submission.

  5. Para actualizar de forma dinámica el valor de variable mediante la funcionalidad de depuración de IntelliJ, vuelva a seleccionar Depurar. El panel Variables aparece de nuevo.

  6. Haga clic con el botón derecho en el destino en el pestaña Depurar y, a continuación, seleccione Establecer valor. Luego escriba un nuevo valor para la variable. A continuación, seleccione Entrar para guardar el valor.

    Intellij Debug Remote Spark Job set value.

  7. Seleccione el icono Resume Program (Continuar programa) para seguir ejecutando el programa. Esta vez no se detecta ninguna excepción. Puede ver que el proyecto se ejecuta correctamente sin ninguna excepción.

    Intellij Debug Remote Spark Job without exception.

Pasos siguientes

Escenarios

Creación y ejecución de aplicaciones

Herramientas y extensiones

Administrar recursos