Uso de Azure Toolkit for Eclipse para crear aplicaciones de Apache Spark para un clúster de HDInsight

Use las herramientas de HDInsight de Azure Toolkit for Eclipse a fin de desarrollar aplicaciones de Apache Spark escritas en Scala y enviarlas a un clúster de Azure HDInsight Spark directamente desde el IDE de Eclipse. Puede usar el complemento de las herramientas de HDInsight de varias maneras distintas:

  • Para desarrollar y enviar una aplicación Spark en Scala en un clúster de HDInsight Spark.
  • Para acceder a los recursos del clúster de Azure HDInsight Spark.
  • Para desarrollar y ejecutar localmente una aplicación Spark en Scala.

Requisitos previos

Instalación de los complementos requeridos

Instalación del kit de herramientas de Azure para Eclipse

Para obtener instrucciones de instalación, consulte Instalación del Kit de herramientas de Azure para Eclipse.

Instalación del complemento Scala

Al abrir Eclipse, las herramientas de HDInsight detectan automáticamente si se ha instalado el complemento Scala. Seleccione Aceptar para continuar y luego siga las instrucciones para instalar el complemento desde Marketplace de Eclipse. Reinicie el IDE después de que finalice la instalación.

Automatic installation of the Scala plug-in.

Confirmación de complementos

  1. Vaya a Ayuda>Eclipse Marketplace...

  2. Seleccione la pestaña Instalado.

  3. Debería ver al menos:

    • Azure Toolkit for Eclipse <versión>.
    • IDE de Scala <versión>.

Inicie sesión en la suscripción de Azure

  1. Inicie el IDE de Eclipse.

  2. Vaya a Window>Show View>Other...>Sign In... (Ventana > Mostrar vista > Otros > Iniciar sesión...).

  3. En el cuadro de diálogo Show View (Mostrar vista), vaya a Azure>Azure Explorer y, a continuación, seleccione Open (Abrir).

    Apache Spark Eclipse show view.

  4. En Azure Explorer, haga clic con el botón derecho en el nodo Azure y después seleccione Iniciar sesión.

  5. En el cuadro de diálogo Azure Sign In (Inicio de sesión en Azure), elija el método de autenticación, seleccione Sign in (Iniciar sesión) y complete el proceso de inicio de sesión.

    Apache Spark Eclipse Azure Sign.

  6. Cuando haya iniciado sesión, en el cuadro de diálogo Select Subscriptions (Seleccionar suscripciones) se enumeran todas las suscripciones de Azure asociadas a las credenciales. Haga clic en Select (Seleccionar) para cerrar el cuadro de diálogo.

    Select Subscriptions dialog box.

  7. En la pestaña Azure Explorer, vaya a Azure>HDInsight para ver los clústeres de HDInsight Spark de su suscripción.

    HDInsight Spark clusters in Azure Explorer3.

  8. Puede expandir un nodo de nombre de clúster para ver los recursos (por ejemplo, las cuentas de almacenamiento) asociados al clúster.

    Expanding a cluster name to see resources.

Puede vincular un clúster normal mediante el nombre de usuario administrado de Ambari. De forma similar, para un clúster de HDInsight unido a un dominio, puede vincular con el dominio y el nombre de usuario, como user1@contoso.com.

  1. En Azure Explorer, haga clic con el botón derecho en HDInsight y, a continuación, seleccione Link A Cluster (Vincular un clúster).

    Azure Explorer link cluster menu.

  2. Escriba el nombre de clúster, el nombre de usuario y la contraseña y, luego, seleccione Aceptar. De manera opcional, escriba la cuenta de almacenamiento, la clave de almacenamiento y, a continuación, seleccione el contenedor de almacenamiento para que el explorador de almacenamiento funcione en la vista de árbol de la izquierda.

    Link New HDInsight cluster dialog.

    Nota:

    Si el clúster se registró en la suscripción de Azure y se vinculó, se usan la clave de almacenamiento, el nombre de usuario y la contraseña vinculados. Azure Explorer storage accounts.

    Para un usuario solo de teclado, cuando el foco actual está en Clave de almacenamiento, debe usar Ctrl+TAB para centrarse en el siguiente campo del cuadro de diálogo.

  3. Puede ver el clúster vinculado en HDInsight. Ahora puede enviar una aplicación a este clúster vinculado.

    Azure Explorer hdi linked cluster.

  4. También puede desvincular un clúster de Azure Explorer.

    Azure Explorer unlinked cluster.

Configuración de un proyecto Spark en Scala de un clúster Spark en HDInsight

  1. En el área de trabajo del IDE de Eclipse, seleccione File>New>Project... (Archivo > Nuevo > Proyecto).

  2. En el Asistente para nuevo proyecto, seleccione HDInsight Project>Spark on HDInsight (Scala) (Proyecto de HDInsight > Spark on HDInsight [Scala]). Luego, seleccione Siguiente.

    Selecting the Spark on HDInsight (Scala) project.

  3. En el cuadro de diálogo New HDInsight Scala Project (Nuevo proyecto de Scala para HDInsight), proporcione los valores siguientes y luego seleccione Siguiente:

    • Escriba un nombre para el proyecto.
    • En el área JRE, asegúrese de que el valor de Use an execution environment JRE (Uso de un entorno de ejecución JRE) esté establecido en JavaSE-1.7 o posterior.
    • En el área de Biblioteca de Spark, puede elegir la opción Use Maven to configure Spark SDK (Usar Maven para configurar el SDK de Spark). Nuestra herramienta integra la versión correcta del SDK de Spark y de Scala. También puede elegir la opción Add Spark SDK manually (Agregar SDK de Spark manualmente) y descargar y agregar dicho SDK de forma manual.

    New HDInsight Scala Project dialog box.

  4. En el siguiente cuadro de diálogo, revise los detalles y, a continuación, seleccione Finish (Finalizar).

Creación de una aplicación de Scala para un clúster de HDInsight Spark

  1. En explorador de paquetes, expanda el proyecto que creó anteriormente. Haga clic con el botón derecho en src y seleccione New>Other... (Nuevo > Otros).

  2. En el cuadro de diálogo Select a wizard (Seleccionar un asistente), seleccione Scala Wizards>Scala Object (Asistentes para Scala > Objeto de Scala). Luego, seleccione Siguiente.

    Select a wizard Create a Scala Object.

  3. En el cuadro de diálogo Crear nuevo archivo, escriba un nombre para el objeto y seleccione Finalizar. Se abrirá un editor de texto.

    New File Wizard Create New File.

  4. En el editor de texto, reemplace el contenido actual por el código siguiente:

    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    
    object MyClusterApp{
        def main (arg: Array[String]): Unit = {
        val conf = new SparkConf().setAppName("MyClusterApp")
        val sc = new SparkContext(conf)
    
        val rdd = sc.textFile("wasbs:///HdiSamples/HdiSamples/SensorSampleData/hvac/HVAC.csv")
    
        //find the rows that have only one digit in the seventh column in the CSV
        val rdd1 =  rdd.filter(s => s.split(",")(6).length() == 1)
    
        rdd1.saveAsTextFile("wasbs:///HVACOut")
        }
    }
    
  5. Ejecute la aplicación en un clúster de HDInsight Spark:

    a. En el Explorador de paquetes, haga clic con el botón derecho en el nombre del proyecto y seleccione Submit Spark Application to HDInsight (Enviar aplicación Spark a HDInsight).

    b. En el cuadro de diálogo Spark Submission (Envío de Spark), proporcione los siguientes valores y luego seleccione Enviar:

    • Para Cluster Name(Nombre del clúster), seleccione el clúster Spark en HDInsight en el que quiere ejecutar la aplicación.

    • Seleccione un artefacto del proyecto Eclipse o uno de un disco duro. El valor predeterminado depende del elemento en el que se hace clic con el botón derecho desde el explorador de paquetes.

    • En la lista desplegable Nombre de la clase principal, el asistente para envío muestra todos los nombres de objetos del proyecto. Seleccione o escriba uno que quiera ejecutar. Si ha seleccionado un artefacto de una unidad de disco duro, debe escribir manualmente el nombre de la clase principal.

    • Dado que el código de aplicación de este ejemplo no requiere ningún argumento de línea de comandos ni archivos o JAR de referencia, puede dejar vacíos los demás cuadros de texto.

      Apache Spark Submission dialog box.

  6. La pestaña Spark Submission (Envío de Spark) debería empezar a mostrar el progreso. Puede detener la aplicación si selecciona el botón rojo de la ventana Spark Submission (Envío de Spark). También puede ver los registros de ejecución de esta aplicación concreta si selecciona el icono de globo (que se indica con el cuadro azul en la imagen).

    Apache Spark Submission window.

Acceso y administración de clústeres HDInsight Spark mediante las herramientas de HDInsight del kit de herramientas de Azure para Eclipse

Puede realizar varias operaciones mediante herramientas de HDInsight, incluido el acceso a la salida del trabajo.

Acceso a la vista de trabajo

  1. En Azure Explorer, expanda HDInsight y el nombre del clúster de Spark. Después, seleccione Trabajos.

    Azure Explorer Eclipse job view node.

  2. Seleccione el nodo Trabajos. Si la versión de Java es anterior a la 1.8, las Herramientas de HDInsight le recordarán automáticamente que instale el conector E(fx)clipse. Seleccione Aceptar para continuar y luego siga las instrucciones del asistente para instalarlo desde el Marketplace de Eclipse y reiniciar Eclipse.

    Install missing plugin E(fx)clipse.

  3. Abra la vista de trabajo desde el nodo Trabajos. En el panel derecho, la pestaña Spark Job View (Vista de trabajos de Spark) muestra todas las aplicaciones que se ejecutaron en el clúster. Seleccione el nombre de la aplicación para la que desea ver más detalles.

    Apache Eclipse view job logs details.

    Luego puede realizar cualquiera de estas acciones:

    • Mantener el puntero sobre el gráfico del trabajo. Muestra información básica sobre el trabajo en ejecución. Seleccione el gráfico del trabajo para ver las fases y la información que genera cada trabajo.

      Apache Spark job graph stage info.

    • Para ver registros usados con frecuencia, como Driver Stderr, Driver Stdout y Directory Info, seleccione la pestaña Registro.

      Apache Spark Eclipse job log info.

    • Abra la interfaz de usuario del historial de Spark y la interfaz de usuario de Apache Hadoop YARN (en el nivel de aplicación) mediante la selección de los hipervínculos de la parte superior de la ventana.

Acceso al contenedor de almacenamiento para el clúster

  1. En Azure Explorer, expanda el nodo raíz HDInsight para ver una lista de los clústeres HDInsight Spark disponibles.

  2. Expanda el nombre del clúster para ver la cuenta de almacenamiento y el contenedor de almacenamiento predeterminado para el clúster.

    Storage account and default storage container.

  3. Seleccione el nombre del contenedor de almacenamiento asociado al clúster. En el panel derecho, haga doble clic en la carpeta HVACOut. Abra uno de los archivos part- para ver la salida de la aplicación.

Acceso al servidor de historial de Spark

  1. En Azure Explorer, haga clic con el botón derecho en el nombre del clúster Spark y seleccione Open Spark History UI (Abrir IU de historial de Spark). Cuando se le pida, escriba las credenciales de administrador para el clúster. Las ha especificado al aprovisionar el clúster.

  2. En el panel del servidor de historial de Spark, use el nombre de aplicación para buscar la aplicación que acaba de terminar de ejecutar. En el código anterior, se establece el nombre de la aplicación mediante val conf = new SparkConf().setAppName("MyClusterApp"). Por lo tanto, el nombre de la aplicación Spark era MyClusterApp.

Inicio del portal de Apache Ambari

  1. En Azure Explorer, haga clic con el botón derecho en el nombre del clúster de Spark y seleccione Open Cluster Management Portal (Ambari) (Abrir portal de administración de clústeres [Ambari]).

  2. Cuando se le pida, escriba las credenciales de administrador para el clúster. Las ha especificado al aprovisionar el clúster.

Administración de suscripciones de Azure

De forma predeterminada, las herramientas de HDInsight en el kit de herramientas de Azure para Eclipse enumeran los clústeres de Spark de todas las suscripciones de Azure. Si es necesario, puede especificar las suscripciones que desea que tengan acceso al clúster.

  1. En Azure Explorer, haga clic con el botón derecho en el nodo raíz de Azure y seleccione Manage Subscriptions (Administrar suscripciones).

  2. En el cuadro de diálogo, desactive las casillas de la suscripción a la que no quiere acceder y luego seleccione Cerrar. También puede seleccionar Sign Out (Cerrar sesión) si desea cerrar sesión en su suscripción de Azure.

Ejecución local de una aplicación Spark en Scala

Puede utilizar las herramientas de HDInsight del kit de herramientas de Azure para Eclipse si quiere ejecutar aplicaciones Spark en Scala localmente en su estación de trabajo. Normalmente estas aplicaciones no necesitan tener acceso a los recursos de clúster, como el contenedor de almacenamiento, y se pueden ejecutar y probar de forma local.

Requisito previo

Mientras se ejecuta la aplicación Spark en Scala local en un equipo Windows, puede producirse una excepción, como se explica en SPARK-2356. Esta excepción se produce porque falta WinUtils.exe en Windows.

Para solucionar este error, necesita Winutils.exe en una ubicación como C:\WinUtils\bin y, después, agregue la variable de entorno HADOOP_HOME y establezca el valor de la variable en C\WinUtils.

Ejecución de una aplicación Spark en Scala local

  1. Inicie Eclipse y cree un proyecto. En el cuadro de diálogo Nuevo proyecto, realice las siguientes selecciones y después seleccione Siguiente.

  2. En el Asistente para nuevo proyecto, seleccione HDInsight Project>Spark on HDInsight Local Run Sample (Scala) (Proyecto de HDInsight > Ejemplo de ejecución local de HDInsight [Scala]). Luego, seleccione Siguiente.

    New project selects a wizard dialog.

  3. Para proporcionar los detalles del proyecto, siga los pasos del 3 a 6 de la sección anterior Configuración de un proyecto Spark en Scala de un clúster Spark en HDInsight.

  4. La plantilla agrega un código de ejemplo (LogQuery) en la carpeta src que puede ejecutar localmente en el equipo.

    Location of LogQuery local scala application.

  5. Haga clic con el botón derecho en LogQuery. Scala y seleccione Run As>1 Scala Application (Ejecutar como > 1 aplicación Scala). Aparece una salida como esta en la pestaña Consola:

    Spark application local run result.

Rol de solo lectura

Cuando los usuarios envían trabajos a un clúster con el permiso de rol de solo lectura, se requieren credenciales de Ambari.

  1. Inicie sesión con la cuenta del rol de solo lectura.

  2. En Azure Explorer, expanda HDInsight para ver los clústeres de HDInsight de su suscripción. Los clústeres marcados como "Role:Reader" tienen únicamente permiso de solo lectura.

    HDInsight Spark clusters in Azure Explorer role reader.

  3. Haga clic derecho en el clúster con el permiso de rol de solo lectura. Seleccione Link this cluster (Vincular este clúster) en el menú contextual para vincular el clúster. Escriba el nombre de usuario y la contraseña de Ambari.

    HDInsight Spark clusters in Azure Explorer link.

  4. Si el clúster se vinculó correctamente, se actualizará HDInsight. La fase del clúster quedará vinculada.

    HDInsight Spark clusters in Azure Explorer linked.

  1. Haga clic en el nodo Trabajos y aparecerá la ventana emergente Cluster Job Access Denied (Se denegó el acceso al trabajo del clúster).

  2. Haga clic en Link this cluster (Vincular este clúster) para vincular el clúster.

    HDInsight Spark clusters in Azure Explorer9.

  1. Cree un proyecto de HDInsight.

  2. Haga clic con el botón derecho en el paquete. A continuación, seleccione Submit Spark Application to HDInsight (Enviar aplicación Spark a HDInsight).

    HDInsight Spark clusters in Azure Explorer submit.

  3. En Cluster Name (Nombre del clúster), seleccione un clúster que tenga permiso de rol de solo lectura. Aparece un mensaje de advertencia. Puede hacer clic en Link this cluster (Vincular este clúster) para vincular el clúster.

    HDInsight Spark clusters in Azure Explorer link this.

Visualización de cuentas de almacenamiento

  • Para los clústeres con permiso de rol de solo lectura, haga clic en el nodo Cuentas de almacenamiento y aparecerá la ventana emergente Storage Access Denied (Se denegó el acceso al almacenamiento).

    HDInsight Spark clusters in Azure Explorer storage.

    HDInsight Spark clusters in Azure Explorer denied.

  • Para los clústeres vinculados, haga clic en el nodo Cuentas de almacenamiento y aparecerá la ventana emergente Storage Access Denied (Se denegó el acceso al almacenamiento).

    HDInsight Spark clusters in Azure Explorer denied2.

Problemas conocidos

Al utilizar Link A Cluster (Vincular un clúster), es aconsejable especificar las credenciales de almacenamiento.

link cluster with storage credential eclipses.

Hay dos formas de enviar los trabajos. Si se proporcionan credenciales de almacenamiento, se utilizará el modo por lotes para enviar el trabajo. De lo contrario, se utilizará el modo interactivo. Si el clúster está ocupado, puede aparecer el siguiente error.

eclipse get error when cluster busy.

eclipse get error when cluster busy yarn.

Consulte también

Escenarios

Creación y ejecución de aplicaciones

Herramientas y extensiones

Administración de recursos