5 técnicas de optimización de chispas que todo científico de datos debería conocer
Publicado: 2020-06-12Ya sea una pequeña startup o una gran corporación, los datos están en todas partes. Estos datos se recopilan de una variedad de fuentes, como registros de clientes, facturas de oficina, hojas de costos y bases de datos de empleados. Las empresas recopilan y analizan estos fragmentos de datos para determinar patrones y tendencias. Estos patrones les ayudan a tomar decisiones importantes para la mejora del negocio.
Pero, este análisis de datos y procesamiento de números no es posible solo a través de hojas de Excel. Aquí es donde entran las tecnologías de software de procesamiento de datos. Uno de los marcos de procesamiento de datos más rápidos y ampliamente utilizados es Apache Spark. Las técnicas de optimización de Spark se utilizan para ajustar su rendimiento y aprovecharlo al máximo.
Vamos a aprender acerca de las técnicas en un momento. Analicemos los conceptos básicos de este marco de software.
Tabla de contenido
¿Qué es Apache Spark?
Apache Spark es un marco informático de clúster de código abierto de fama mundial que se utiliza para procesar grandes conjuntos de datos en las empresas. Procesar estos enormes conjuntos de datos y distribuirlos entre múltiples sistemas es fácil con Apache Spark. Ofrece API simples que facilitan la vida de los programadores y desarrolladores.
Spark proporciona enlaces nativos para lenguajes de programación, como Python, R, Scala y Java. Admite aprendizaje automático, procesamiento de gráficos y bases de datos SQL . Debido a estos increíbles beneficios, Spark se usa en bancos, empresas de tecnología, organizaciones financieras, departamentos de telecomunicaciones y agencias gubernamentales. Para obtener más información sobre Apache Spark, consulte nuestros cursos de ciencia de datos de universidades reconocidas.
Arquitectura de Apache Spark
La arquitectura de tiempo de ejecución de Apache Spark consta de los siguientes componentes:
Spark driver o proceso maestro
Esto convierte los programas en tareas y luego los programa para los ejecutores (procesos esclavos). El programador de tareas distribuye estas tareas a los ejecutores.
Cluster Manager
El administrador de clústeres de Spark es responsable de lanzar ejecutores y controladores. Programa y asigna recursos en varias máquinas host para un clúster.
Ejecutores
Los ejecutores, también llamados procesos esclavos, son entidades donde se ejecutan las tareas de un trabajo. Una vez que se inician, se ejecutan hasta que finaliza el ciclo de vida de la aplicación Spark. La ejecución de un trabajo de Spark no se detiene si falla un ejecutor.
Conjuntos de datos distribuidos resistentes (RDD)
Esta es una colección de conjuntos de datos que son inmutables y se distribuyen en los nodos de un clúster de Spark. En particular, un clúster es una colección de sistemas distribuidos donde se puede instalar Spark. Los RDD se dividen en varias particiones. Y se denominan resistentes, ya que pueden solucionar los problemas de datos en caso de falla de datos.
Los tipos de RDD compatibles con Spark son:
- Conjuntos de datos de Hadoop creados a partir de archivos en el sistema de archivos distribuido de Hadoop
- Colecciones paralelas, que pueden basarse en colecciones de Scala
DAG (Gráfico acíclico dirigido)
Spark crea un gráfico tan pronto como se ingresa un código en la consola de Spark. Si se activa alguna acción (una instrucción para ejecutar una operación), este gráfico se envía al DAGScheduler .
Este gráfico puede considerarse como una secuencia de acciones de datos. DAG consta de vértices y aristas. Los vértices representan un RDD y los bordes representan los cálculos que se realizarán en ese RDD específico. Se llama gráfico dirigido ya que no hay bucles ni ciclos dentro del gráfico.
Técnicas de optimización de chispas
Las técnicas de optimización de Spark se utilizan para modificar la configuración y las propiedades de Spark para garantizar que los recursos se utilicen correctamente y que los trabajos se ejecuten rápidamente. En última instancia, todo esto ayuda a procesar los datos de manera eficiente.
Las técnicas de optimización de Spark más populares se enumeran a continuación:
1. Serialización de datos
Aquí, un objeto en memoria se convierte a otro formato que se puede almacenar en un archivo o enviar a través de una red. Esto mejora el rendimiento de las aplicaciones distribuidas. Las dos formas de serializar datos son:
- Java serialización: el marco ObjectOutputStream se utiliza para serializar objetos. Se puede usar java.io.Externalizable para controlar el rendimiento de la serialización. Este proceso ofrece una persistencia ligera.
- Serialización de Kyro: Spark utiliza la biblioteca de serialización de Kryo (v4) para serializar objetos que son más rápidos que la serialización de Java y es un proceso más compacto. Para mejorar el rendimiento, las clases deben registrarse mediante el método registerKryoClasses.
2. Almacenamiento en caché
Esta es una técnica eficiente que se utiliza cuando los datos se requieren con mayor frecuencia. Cache() y persist() son los métodos utilizados en esta técnica. Estos métodos se utilizan para almacenar los cálculos de un RDD, DataSet y DataFrame. Pero cache() lo almacena en la memoria y persist() lo almacena en el nivel de almacenamiento definido por el usuario.

Estos métodos pueden ayudar a reducir costos y ahorrar tiempo a medida que se utilizan cálculos repetidos.
Leer: Marco de datos en Apache PySpark: tutorial completo
3. Ajuste de la estructura de datos
Podemos reducir el consumo de memoria mientras usamos Spark ajustando ciertas características de Java que pueden agregar sobrecarga. Esto es posible de las siguientes maneras:
- Use objetos enumerados o ID numéricos en lugar de cadenas para las claves.
- Evite usar muchos objetos y estructuras anidadas complicadas.
- Establezca el indicador JVM en xx:+UseCompressedOops si el tamaño de la memoria es inferior a 32 GB.
4. Optimización de la recolección de basura
Para optimizar los recolectores de basura, G1 y GC deben usarse para ejecutar aplicaciones Spark. El colector G1 gestiona montones en crecimiento. El ajuste de GC es esencial de acuerdo con los registros generados, para controlar el comportamiento inesperado de las aplicaciones. Pero antes es necesario modificar y optimizar la lógica y el código del programa.
G1GC ayuda a disminuir el tiempo de ejecución de los trabajos al optimizar los tiempos de pausa entre los procesos.
5. Gestión de memoria
La memoria que se utiliza para almacenar cálculos, como combinaciones, mezclas, clasificaciones y agregaciones, se denomina memoria de ejecución. La memoria de almacenamiento se utiliza para almacenar en caché y manejar datos almacenados en clústeres. Ambas memorias usan una región unificada M.
Cuando la memoria de ejecución no está en uso, la memoria de almacenamiento puede usar el espacio. De manera similar, cuando la memoria de almacenamiento está inactiva, la memoria de ejecución puede utilizar el espacio. Esta es una de las técnicas de optimización de Spark más eficientes .
Lea también: 6 características que cambian el juego de Apache Spark
Conclusión
A partir de las diversas técnicas de optimización de Spark , podemos comprender cómo ayudan a reducir el tiempo de procesamiento y procesar los datos más rápido. Los desarrolladores y profesionales aplican estas técnicas según las aplicaciones y la cantidad de datos en cuestión.
Si tiene curiosidad por aprender sobre optimización de chispas , ciencia de datos, consulte el programa Executive PG en ciencia de datos de IIIT-B y upGrad, creado para profesionales que trabajan y ofrece más de 10 estudios de casos y proyectos, talleres prácticos prácticos, tutoría con la industria. expertos, 1 a 1 con mentores de la industria, más de 400 horas de aprendizaje y asistencia laboral con las mejores empresas.
¿Qué son las técnicas de optimización de chispas?
Apache Spark facilita que las empresas procesen datos rápidamente y resuelvan problemas de datos complejos con facilidad. Es obvio que durante el desarrollo de cualquier programa es muy importante cuidar su desempeño. Las técnicas de optimización de Spark ayudan con los cálculos de datos en memoria. Lo único que puede dificultar estos cálculos es la memoria, la CPU o cualquier otro recurso.
Cada técnica de optimización de chispa se utiliza para un propósito diferente y realiza ciertas acciones específicas. Algunas de las técnicas de optimización de chispas más utilizadas son:
1. Serialización
2. Selección de API
3. Variable de avance
4. Almacenar en caché y persistir
5. Operación por llave
6. Selección de formato de archivo
7. Ajuste de recolección de basura
8. Nivel de paralelismo
¿Cuándo no debería considerar usar Spark?
Apache Spark tiene muchos casos de uso, pero existen ciertas necesidades especializadas en las que necesita otros motores de big data para cumplir el propósito. En tales casos, se recomienda utilizar otra tecnología en lugar de utilizar Spark. A continuación se muestran los casos de uso en los que no debería considerar usar Spark:
1. Capacidad informática baja: el procesamiento predeterminado en Apache Spark se lleva a cabo en la memoria del clúster. Si sus máquinas virtuales o clúster tienen poca capacidad de cómputo, debe buscar otras alternativas como Apache Hadoop.
2. Ingestión de datos en un modelo de publicación-suscripción: en este caso, existen múltiples fuentes y múltiples destinos a los que se mueven millones de datos en poco tiempo. Aquí, no debe usar Spark, y en su lugar, use Apache Kafka.
¿Es Pandas más rápido que Apache Spark?
Cuando compare la velocidad computacional de Pandas DataFrame y Spark DataFrame, notará que el rendimiento de Pandas DataFrame es marginalmente mejor para conjuntos de datos pequeños. Por otro lado, si el tamaño de los datos aumenta, entonces se encuentra que Spark DataFrame es lo suficientemente capaz como para superar a Pandas DataFrame. Por lo tanto, dependerá mucho de la cantidad de datos.