Mejora del rendimiento de las cargas de trabajo de Apache Spark con la memoria caché de E/S de Azure HDInsightImprove performance of Apache Spark workloads using Azure HDInsight IO Cache

La memoria caché de E/S es un servicio de almacenamiento en caché de datos para Azure HDInsight que mejora el rendimiento de trabajos de Apache Spark.IO Cache is a data caching service for Azure HDInsight that improves the performance of Apache Spark jobs. La memoria caché de E/S también funciona con cargas de trabajo de Apache TEZ y Apache Hive, que se pueden ejecutar en clústeres de Apache Spark.IO Cache also works with Apache TEZ and Apache Hive workloads, which can be run on Apache Spark clusters. La memoria caché de E/S usa un componente de almacenamiento en caché de código abierto denominado RubiX.IO Cache uses an open-source caching component called RubiX. RubiX es una caché de disco local para su uso con los motores de análisis de macrodatos que tienen acceso a datos desde sistemas de almacenamiento en la nube.RubiX is a local disk cache for use with big data analytics engines that access data from cloud storage systems. RubiX es único entre los sistemas de almacenamiento en caché, porque utiliza unidades de estado sólido (SSD) en lugar de reservar memoria operativa para el almacenamiento en caché.RubiX is unique among caching systems, because it uses Solid-State Drives (SSDs) rather than reserve operating memory for caching purposes. El servicio de memoria caché de E/S inicia y administra servidores de los metadatos de RubiX en cada nodo de trabajo del clúster.The IO Cache service launches and manages RubiX Metadata Servers on each worker node of the cluster. También configura todos los servicios del clúster para su uso transparente de la memoria caché de RubiX.It also configures all services of the cluster for transparent use of RubiX cache.

La mayoría de discos SSD proporciona más de 1 GB por segundo de ancho de banda.Most SSDs provide more than 1 GByte per second of bandwidth. Este ancho de banda, complementado por la memoria caché de archivos en memoria del sistema operativo, es suficiente para cargar los motores de procesamiento de cálculo de macrodatos, como Apache Spark.This bandwidth, complemented by the operating system in-memory file cache, provides enough bandwidth to load big data compute processing engines, such as Apache Spark. La memoria operativa queda disponible para que Apache Spark procese tareas muy dependientes de la memoria, como órdenes aleatorios.The operating memory is left available for Apache Spark to process heavily memory-dependent tasks, such as shuffles. El hecho de disponer del uso exclusivo de la memoria operativa permite a Apache Spark alcanzar un uso óptimo de los recursos.Having exclusive use of operating memory allows Apache Spark to achieve optimal resource usage.

Nota

La memoria caché de E/S actualmente usa RubiX como un componente de almacenamiento en caché, pero esto podría cambiar en futuras versiones del servicio.IO Cache currently uses RubiX as a caching component, but this may change in future versions of the service. Use las interfaces de la memoria caché de E/S y no tome las dependencias directamente en la implementación de RubiX.Please use IO Cache interfaces and don't take any dependencies directly on the RubiX implementation. Actualmente, la memoria caché de E/S solo es compatible con Azure Blob Storage.IO Cache is only supported with Azure BLOB Storage at this time.

Ventajas de la memoria caché de E/S de Azure HDInsightBenefits of Azure HDInsight IO Cache

El uso de la memoria caché de E/S proporciona un aumento del rendimiento para los trabajos que leen datos desde Azure Blob Storage.Using IO Cache provides a performance increase for jobs that read data from Azure Blob Storage.

No tiene que realizar ningún cambio en los trabajos de Spark para ver un aumento del rendimiento cuando use la memoria caché de E/S.You don't have to make any changes to your Spark jobs to see performance increases when using IO Cache. Cuando se deshabilita la memoria caché de E/S, este código de Spark podría leer datos de forma remota desde Azure Blob Storage: spark.read.load('wasbs:///myfolder/data.parquet').count().When IO Cache is disabled, this Spark code would read data remotely from Azure Blob Storage: spark.read.load('wasbs:///myfolder/data.parquet').count(). Cuando se activa la memoria caché de E/S, la misma línea de código provoca una lectura almacenada en caché a través de la caché de E/S.When IO Cache is activated, the same line of code causes a cached read through IO Cache. En las siguientes lecturas, los datos se leen localmente desde el disco SSD.On following reads, the data is read locally from SSD. Los nodos de trabajo del clúster de HDInsight están equipados con unidades SSD conectadas localmente y dedicadas.Worker nodes on HDInsight cluster are equipped with locally attached, dedicated SSD drives. La memoria caché de E/S de HDInsight usa estos discos SSD locales para almacenar en caché, lo cual proporciona el nivel más bajo de latencia y maximiza el ancho de banda.HDInsight IO Cache uses these local SSDs for caching, which provides lowest level of latency and maximizes bandwidth.

IntroducciónGetting started

La memoria caché de E/S de Azure HDInsight está desactivada de forma predeterminada en la versión preliminar.Azure HDInsight IO Cache is deactivated by default in preview. La memoria caché de E/S está disponible en los clústeres de Spark de Azure HDInsight 3.6 +, que ejecutan Apache Spark 2.3.IO Cache is available on Azure HDInsight 3.6+ Spark clusters, which run Apache Spark 2.3. Para activar la caché de E/S en HDInsight 4.0, realice los pasos siguientes:To activate IO Cache on HDInsight 4.0, do the following steps:

  1. En un explorador web, vaya a https://CLUSTERNAME.azurehdinsight.net, donde CLUSTERNAME es el nombre del clúster.From a web browser, navigate to https://CLUSTERNAME.azurehdinsight.net, where CLUSTERNAME is the name of your cluster.

  2. Seleccione el servicio Memoria caché de E/S a la izquierda.Select the IO Cache service on the left.

  3. Seleccione Acciones (Acciones de servicio en HDI 3.6) y Activar.Select Actions (Service Actions in HDI 3.6) and Activate.

    Habilitación del servicio de la memoria caché de E/S en Ambari

  4. Confirme el reinicio de todos los servicios afectados en el clúster.Confirm restart of all the affected services on the cluster.

Nota

Aunque la barra de progreso la muestre activada, la memoria caché de E/S no está habilitada realmente hasta que reinicie los otros servicios afectados.Even though the progress bar shows activated, IO Cache isn't actually enabled until you restart the other affected services.

Solución de problemasTroubleshooting

Es posible que aparezcan errores de espacio en disco al ejecutar trabajos de Spark después de habilitar la memoria caché de E/S.You may get disk space errors running Spark jobs after enabling IO Cache. Estos errores se producen porque Spark también usa el almacenamiento en disco local para almacenar datos durante el orden aleatorio de las operaciones.These errors occur because Spark also uses local disk storage for storing data during shuffling operations. Spark puede quedarse sin espacio en el disco SSD una vez que la memoria caché de E/S esté habilitada y se reduzca el espacio de almacenamiento de Spark.Spark may run out of SSD space once IO Cache is enabled and the space for Spark storage is reduced. La cantidad de espacio utilizado por la memoria caché de E/S se establece de manera predeterminada en la mitad del espacio total de SSD.The amount of space used by IO Cache defaults to half of the total SSD space. El uso de espacio en disco para la memoria caché de E/S es configurable en Ambari.The disk space usage for IO Cache is configurable in Ambari. Si recibe errores de espacio en disco, reduzca la cantidad de espacio de SSD usado para la memoria caché de E/S y reinicie el servicio.If you get disk space errors, reduce the amount of SSD space used for IO Cache and restart the service. Para cambiar el espacio configurado para la memoria caché de E/S, realice los pasos siguientes:To change the space set for IO Cache, do the following steps:

  1. En Apache Ambari, seleccione el servicio HDFS a la izquierda.In Apache Ambari, select the HDFS service on the left.

  2. Seleccione las pestañas Configs (Configuraciones) y Advanced (Opciones avanzadas).Select the Configs and Advanced tabs.

    Edición de la configuración avanzada de HDFS

  3. Desplácese hacia abajo y expanda el área Custom core-site (Personalizar sitio principal).Scroll down and expand the Custom core-site area.

  4. Busque la propiedad hadoop.cache.data.fullness.percentage.Locate the property hadoop.cache.data.fullness.percentage.

  5. Cambie el valor en el cuadro.Change the value in the box.

    Edición del porcentaje de completado de la memoria caché de E/S

  6. Seleccione Save (Guardar) en la esquina superior derecha.Select Save on the upper right.

  7. Seleccione Restart (Reiniciar) > Restart All Affected (Reiniciar todos los servicios afectados).Select Restart > Restart All Affected.

    Se reinician todos los elementos afectados en Apache Ambari

  8. Seleccione Confirm Restart All (Confirmar reinicio de todo).Select Confirm Restart All.

Si esto no funciona, deshabilite la memoria caché de E/S.If that doesn't work, disable IO Cache.

Pasos siguientesNext Steps

Obtenga más información acerca de la memoria caché de E/S, incluidas las pruebas comparativas de rendimiento en esta entrada de blog: Apache Spark jobs gain up to 9x speed up with HDInsight IO Cache (Los trabajos de Apache Spark consiguen una velocidad hasta 9 veces superior con la memoria caché de E/S de HDInsight).Read more about IO Cache, including performance benchmarks in this blog post: Apache Spark jobs gain up to 9x speed up with HDInsight IO Cache