Administración de recursos de un clúster Apache Spark en Azure HDInsight

Aprenda a acceder a interfaces como la interfaz de usuario de Apache Ambari, la de Apache Hadoop YARN y el servidor de historial de Spark asociados al clúster de Apache Spark, y a ajustar la configuración del clúster para optimizar el rendimiento.

Apertura del servidor de historial de Spark

Servidor de historial de Spark es la interfaz de usuario web para aplicaciones de Spark completadas y en ejecución. Es una extensión de la interfaz de usuario web de Spark. Para obtener información completa, consulte Servidor de historial de Spark.

Apertura de la interfaz de usuario de YARN

Puede utilizar la interfaz de usuario de YARN para supervisar las aplicaciones que se encuentran en ejecución en el clúster Spark.

  1. En Azure Portal, abra el clúster de Spark. Para obtener más información, consulte Enumeración y visualización de clústeres.

  2. Desde Paneles de clúster, seleccione Yarn. Cuando se le pida, escriba las credenciales de administrador del clúster Spark.

    Launch YARN UI.

    Sugerencia

    También puede iniciar la interfaz de usuario de YARN desde la de Ambari. En la interfaz de usuario de Ambari, vaya a YARN>Quick Links (Vínculos rápidos) >Active (Activo) >Resource Manager UI (Interfaz de usuario del Administrador de recursos).

Optimice los clústeres para las aplicaciones Spark

Los tres parámetros clave que se pueden utilizar para la configuración de Spark según los requisitos de la aplicación son spark.executor.instances, spark.executor.cores y spark.executor.memory. Un ejecutor es un proceso que se inicia para una aplicación Spark. Se ejecuta en el nodo de trabajo y es responsable de realizar las tareas de la aplicación. El número predeterminado de ejecutores y el tamaño de estos para cada clúster se calcula en función del número de nodos de trabajo y el tamaño de estos. Esta información se almacena en spark-defaults.conf en los nodos principales del clúster.

Los tres parámetros de configuración se pueden configurar en el nivel de clúster (para todas las aplicaciones que se ejecutan en el clúster) o se pueden especificar también para cada aplicación individual.

Cambio de los parámetros mediante la interfaz de usuario de Ambari

  1. Desde la interfaz de usuario de Ambari, vaya a Spark2>Configs (Configuraciones) >Custom spark2-defaults (spark2-defaults personalizado).

    Set parameters using Ambari custom.

  2. Los valores predeterminados son necesarios para hacer que se ejecuten cuatro aplicaciones Spark simultáneamente en el clúster. Puede cambiar estos valores desde la interfaz de usuario, como se muestra en la captura de pantalla siguiente:

    Set parameters using Ambari.

  3. Seleccione Save (Guardar) para guardar los cambios de configuración. En la parte superior de la página se le pide que reinicie todos los servicios afectados. Seleccione Reiniciar.

    Restart services.

Cambio de los parámetros de una aplicación que se ejecuta en Jupyter Notebook

Para aplicaciones que se ejecutan en Jupyter Notebook, puede utilizar la instrucción mágica %%configure para realizar los cambios de configuración. Idealmente, debe realizar estos cambios al comienzo de la aplicación, antes de ejecutar la primera celda de código. Esto garantiza que la configuración se aplique a la sesión de Livy cuando se cree. Si desea cambiar la configuración en una fase posterior de la aplicación, debe utilizar el parámetro -f . Sin embargo, al hacerlo, se perderán todos los progresos en la aplicación.

El siguiente fragmento de código muestra cómo cambiar la configuración de una aplicación que se ejecuta en Jupyter.

%%configure
{"executorMemory": "3072M", "executorCores": 4, "numExecutors":10}

Los parámetros de configuración deben pasarse como una cadena JSON y deben estar en la siguiente línea después de la instrucción mágica, como se muestra en la columna de ejemplo.

Cambio de los parámetros de una aplicación enviada mediante spark-submit

El siguiente comando es un ejemplo de cómo cambiar los parámetros de configuración de una aplicación de lote que se envía mediante spark-submit.

spark-submit --class <the application class to execute> --executor-memory 3072M --executor-cores 4 –-num-executors 10 <location of application jar file> <application parameters>

Cambio de los parámetros de una aplicación enviada mediante cURL

El siguiente comando es un ejemplo de cómo cambiar los parámetros de configuración de una aplicación de lote que se envía mediante cURL.

curl -k -v -H 'Content-Type: application/json' -X POST -d '{"file":"<location of application jar file>", "className":"<the application class to execute>", "args":[<application parameters>], "numExecutors":10, "executorMemory":"2G", "executorCores":5' localhost:8998/batches

Nota

Copie el archivo JAR en la cuenta de almacenamiento del clúster. No copie el archivo JAR directamente en el nodo principal.

Cambiar estos parámetros en un servidor Thrift de Spark

El servidor Thrift de Spark proporciona acceso JDBC/ODBC a un clúster de Spark y se utiliza para enviar consultas de Spark SQL. Herramientas como Power BI, Tableau, etc. usan el protocolo ODBC para comunicarse con el servidor Thrift de Spark y ejecutar consultas de Spark SQL como una aplicación Spark. Cuando se crea un clúster de Spark, se inician dos instancias del servidor Thrift de Spark, una en cada nodo principal. Cada servidor Thrift de Spark está visible como una aplicación Spark en la interfaz de usuario de YARN.

El servidor Thrift de Spark utiliza la asignación dinámica de ejecutores de Spark y, por tanto, las instancias de spark.executor.instances no se utilizan. En su lugar, el servidor Thrift de Spark usa spark.dynamicAllocation.maxExecutors y spark.dynamicAllocation.minExecutors para especificar el recuento de ejecutores. Los parámetros de configuración spark.executor.cores y spark.executor.memory se usan para modificar el tamaño del ejecutor. Puede cambiar estos parámetros como se muestra en los siguientes pasos:

  • Expanda la categoría Advanced spark2-thrift-sparkconf (spark2-thrift-sparkconf avanzado) para actualizar los parámetros spark.dynamicAllocation.maxExecutors y spark.dynamicAllocation.minExecutors.

    Configure Spark thrift server.

  • Expanda la categoría Custom spark2-thrift-sparkconf (spark2-thrift-sparkconf personalizado) para actualizar los parámetros spark.executor.cores y spark.executor.memory

    Configure Spark thrift server parameter.

Cambiar la memoria del controlador del servidor Thrift de Spark

La memoria del controlador del servidor Thrift de Spark se ha configurado al 25 % del tamaño de la RAM del nodo principal, suponiendo que el tamaño total de la RAM del nodo principal sea superior a 14 GB. Puede utilizar la interfaz de usuario de Ambari para cambiar la configuración de memoria del controlador, como se muestra en la captura de pantalla siguiente:

Desde la interfaz de usuario de Ambari, vaya a Spark2>Configs (Configuraciones) >Advanced spark2-env (spark2-env avanzado). A continuación, proporcione el valor de spark_thrift_cmd_opts.

Reclamar recursos de clúster de Spark

Debido a la asignación dinámica de Spark, los únicos recursos consumidos por el servidor Thrift son los recursos de los dos maestros de aplicación. Para recuperar estos recursos debe detener los servicios del servidor Thrift que se estén ejecutando en el clúster.

  1. En la interfaz de usuario de Ambari, en el panel izquierdo, seleccione Spark2.

  2. En la siguiente página, seleccione Spark2 Thrift Servers(Servidores Thrift de Spark2).

    Restart thrift server1.

  3. Aparecerán los dos nodos principales en los que se ejecuta el servidor Thrift de Spark2. Seleccione uno.

    Restart thrift server2.

  4. La siguiente página muestra todos los servicios que se ejecutan en ese nodo principal. En la lista, seleccione el botón desplegable situado junto al servidor Thrift de Spark2 y, a continuación, seleccione Stop(Detener).

    Restart thrift server3.

  5. Repita también estos pasos en el otro nodo principal.

Reiniciar el servicio de Jupyter

Inicie la interfaz de usuario web de Ambari tal como se muestra al principio del artículo. En el panel de navegación izquierdo, seleccione Jupyter, Service Actions (Acciones de servicio) y Restart All (Reiniciar todo). Esta acción iniciará el servicio de Jupyter en todos los nodos principales.

Restart Jupyter.

Supervisión de recursos

Inicie la interfaz de usuario web de Yarn tal como se muestra al principio del artículo. En la tabla de métricas del clúster, compruebe los valores de Memory Used (Memoria usada) y Memory Total (Memoria total). Si los dos valores son similares, puede que no haya recursos suficientes para iniciar la siguiente aplicación. Lo mismo se aplica a las columnas VCores Used (Núcleos virtuales usados) y VCores Total (Núcleos virtuales totales). Además, si en la vista principal hay una aplicación con el estado ACCEPTED (ACEPTADO) y no pasa al estado RUNNING (EN EJECUCIÓN) o FAILED (ERROR), podría ser una señal de que no hay suficientes recursos para comenzar.

Resource Limit.

Terminar las aplicaciones en ejecución

  1. En la interfaz de usuario de Yarn, en el panel izquierdo, seleccione Running (En ejecución). En la lista de aplicaciones en ejecución, determine la aplicación que se eliminará y seleccione el ID (Identificador).

    Kill App1.

  2. Seleccione Kill Application (Eliminar aplicación) en la esquina superior derecha y luego OK (Aceptar).

    Kill App2.

Consulte también

Para analistas de datos

Para los desarrolladores de Apache Spark