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.
En Azure Portal, abra el clúster de Spark. Para obtener más información, consulte Enumeración y visualización de clústeres.
Desde Paneles de clúster, seleccione Yarn. Cuando se le pida, escriba las credenciales de administrador del clúster Spark.
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
Desde la interfaz de usuario de Ambari, vaya a Spark2>Configs (Configuraciones) >Custom spark2-defaults (spark2-defaults personalizado).
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:
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.
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
yspark.dynamicAllocation.minExecutors
.Expanda la categoría Custom spark2-thrift-sparkconf (spark2-thrift-sparkconf personalizado) para actualizar los parámetros
spark.executor.cores
yspark.executor.memory
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.
En la interfaz de usuario de Ambari, en el panel izquierdo, seleccione Spark2.
En la página siguiente, seleccione Servidores Thrift de Spark 2.
Aparecerán los dos nodos principales en el que se ejecuta el servidor Thrift de Spark 2. Seleccione uno.
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 Spark 2 y, a continuación, seleccione Detener.
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.
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.
Terminar las aplicaciones en ejecución
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).
Seleccione Kill Application (Eliminar aplicación) en la esquina superior derecha y luego OK (Aceptar).
Consulte también
Para analistas de datos
- Apache Spark con Machine Learning: Uso de Spark en HDInsight para analizar la temperatura de un edificio mediante datos de HVAC
- Apache Spark con Machine Learning: uso de Spark en HDInsight para predecir los resultados de la inspección de alimentos
- Análisis de registros de un sitio web mediante Apache Spark en HDInsight
- Análisis de datos de telemetría de Application Insights con Apache Spark en HDInsight
Para los desarrolladores de Apache Spark
- Crear una aplicación independiente con Scala
- Ejecución de trabajos de forma remota en un clúster de Apache Spark mediante Apache Livy
- Uso del complemento de herramientas de HDInsight para IntelliJ IDEA para crear y enviar aplicaciones de Spark Scala
- Use HDInsight Tools Plugin for IntelliJ IDEA to debug Apache Spark applications remotely (Uso del complemento de herramientas de HDInsight para IntelliJ IDEA para depurar aplicaciones de Apache Spark de forma remota)
- Uso de cuadernos de Apache Zeppelin con un clúster de Apache Spark en HDInsight
- Kernels disponible para Jupyter Notebook en clústeres Apache Spark para HDInsight
- Uso de paquetes externos con cuadernos de Jupyter Notebook
- Instalación de un cuaderno de Jupyter Notebook en el equipo y conexión al clúster de Apache Spark en HDInsight de Azure