¿Qué es Apache Spark? La plataforma de big data que aplastó Hadoop

Apache Spark definido

Apache Spark es un marco de procesamiento de datos que puede realizar rápidamente tareas de procesamiento en conjuntos de datos muy grandes, y también puede distribuir tareas de procesamiento de datos a través de varios equipos, ya sea por sí mismo o en conjunto con otras herramientas de computación distribuida. Estas dos cualidades son clave para los mundos del big data y el aprendizaje automático, que requieren la ordenación de la potencia informática masiva para crujir a través de grandes almacenes de datos., Spark también elimina algunas de las cargas de programación de estas tareas de los desarrolladores con una API fácil de usar que abstrae gran parte del trabajo pesado de la computación distribuida y el procesamiento de big data.

desde sus humildes comienzos en el AMPLab de U. C. Berkeley en 2009, Apache Spark se ha convertido en uno de los marcos de procesamiento distribuido de big data clave en el mundo. Spark se puede implementar de varias maneras, proporciona enlaces nativos para los lenguajes de programación Java, Scala, Python y R, y admite SQL, transmisión de datos, Aprendizaje automático y procesamiento de gráficos., Lo encontrarás utilizado por bancos, compañías de telecomunicaciones, compañías de juegos, gobiernos y todos los grandes gigantes tecnológicos como Apple, Facebook, IBM y Microsoft.

arquitectura Apache Spark

a un nivel fundamental, una aplicación Apache Spark consta de dos componentes principales: un controlador, que convierte el código del usuario en múltiples tareas que se pueden distribuir entre nodos de trabajo, y ejecutores, que se ejecutan en esos nodos y ejecutan las tareas asignadas a ellos. Es necesario algún tipo de administrador de clúster para mediar entre los dos.,

Fuera de la caja, Spark puede ejecutarse en un modo de clúster independiente que simplemente requiere el framework Apache Spark y una JVM en cada máquina del clúster. Sin embargo, es más probable que desee aprovechar un sistema de gestión de recursos o clústeres más robusto para encargarse de la asignación de trabajadores a demanda para usted. En la empresa, esto normalmente significa que se ejecuta en Hadoop YARN (así es como las distribuciones Cloudera y Hortonworks ejecutan trabajos de Spark), pero Apache Spark también puede ejecutarse en Apache Mesos, Kubernetes y Docker Swarm.,

Si busca una solución administrada, puede encontrar Apache Spark como parte de Amazon EMR, Google Cloud Dataproc y Microsoft Azure HDInsight. Databricks, la compañía que emplea a los fundadores de Apache Spark, también ofrece la plataforma de análisis Unificado de Databricks, que es un servicio gestionado integral que ofrece clústeres de Apache Spark, soporte de transmisión, desarrollo de notebook basado en web integrado y rendimiento de E/s en la nube optimizado sobre una distribución estándar de Apache Spark.

Apache Spark construye los comandos de procesamiento de datos del usuario en un gráfico acíclico dirigido, o Dag., El DAG es la capa de programación de Apache Spark; determina qué tareas se ejecutan en qué nodos y en qué secuencia.

Spark vs Hadoop: ¿por Qué usar Apache Spark?

vale la pena señalar que Apache Spark vs. Apache Hadoop es un poco inapropiado. Encontrará Spark incluido en la mayoría de las distribuciones de Hadoop en estos días. Pero debido a dos grandes ventajas, Spark se ha convertido en el marco de referencia para el procesamiento de big data, superando el viejo paradigma de MapReduce que llevó a Hadoop a la prominencia.

La primera ventaja es la velocidad., El motor de datos en memoria de Spark significa que puede realizar tareas hasta cien veces más rápido que MapReduce en ciertas situaciones, particularmente cuando se compara con trabajos de varias etapas que requieren la escritura del estado en el disco entre etapas. En esencia, MapReduce crea un gráfico de ejecución de dos etapas que consiste en mapeo y reducción de datos, mientras que el DAG de Apache Spark tiene múltiples etapas que se pueden distribuir de manera más eficiente. Incluso los trabajos de Apache Spark en los que los datos no pueden estar completamente contenidos en la memoria tienden a ser alrededor de 10 veces más rápidos que su contraparte MapReduce.,

la segunda ventaja es la API Spark fácil de usar para desarrolladores. Por importante que sea la aceleración de Spark, se podría argumentar que la amabilidad de la API de Spark es aún más importante.

Spark Core

en comparación con MapReduce y otros componentes de Apache Hadoop, la API de Apache Spark es muy amigable para los desarrolladores, ocultando gran parte de la complejidad de un motor de procesamiento distribuido detrás de simples llamadas a métodos., El ejemplo canónico de esto es cómo casi 50 líneas de código MapReduce para contar palabras en un documento se pueden reducir a solo unas pocas líneas de Apache Spark (aquí se muestra en Scala):

al proporcionar enlaces a lenguajes populares para el análisis de datos como Python y R, así como los Java y Scala más amigables para las empresas, Apache Spark permite a todos, desde desarrolladores de aplicaciones hasta científicos de datos, aprovechar su escalabilidad y velocidad de una manera accesible.,

Spark RDD

en el corazón de Apache Spark está el concepto de conjunto de datos distribuido resiliente (RDD), una abstracción de programación que representa una colección inmutable de objetos que se pueden dividir en un clúster de computación. Las operaciones en los RDD también se pueden dividir en el clúster y ejecutarse en un proceso por lotes paralelo, lo que conduce a un procesamiento en paralelo rápido y escalable.

Los RDD se pueden crear a partir de archivos de texto simples, bases de datos SQL, almacenes NoSQL (como Cassandra y MongoDB), depósitos de Amazon S3 y mucho más., Gran parte de la API de Spark Core se basa en este concepto RDD, lo que permite la funcionalidad tradicional de map y reduce, pero también proporciona soporte integrado para unir conjuntos de datos, filtrar, muestrear y agregar.

Spark se ejecuta de forma distribuida mediante la combinación de un proceso del núcleo del controlador que divide una aplicación Spark en tareas y las distribuye entre muchos procesos ejecutores que hacen el trabajo. Estos ejecutores se pueden escalar hacia arriba y hacia abajo según sea necesario para las necesidades de la aplicación.,

Spark SQL

originalmente conocido como Shark, Spark SQL se ha vuelto cada vez más importante para el proyecto Apache Spark. Es probablemente la interfaz más utilizada por los desarrolladores de hoy en día al crear aplicaciones. Spark SQL se centra en el procesamiento de datos estructurados, utilizando un enfoque de dataframe prestado de R y Python (en Pandas). Pero como su nombre indica, Spark SQL también proporciona una interfaz compatible con SQL2003 para consultar datos, lo que lleva la potencia de Apache Spark a analistas y desarrolladores.,

junto con el soporte estándar de SQL, Spark SQL proporciona una interfaz estándar para leer y escribir en otros almacenes de datos, incluidos JSON, HDFS, Apache Hive, JDBC, Apache ORC y Apache Parquet, todos los cuales son compatibles desde el primer momento. Otras tiendas populares—Apache Cassandra, MongoDB, Apache HBase, y muchas otras—se pueden usar extrayendo conectores separados del ecosistema de paquetes de Spark.,

seleccionar algunas columnas de un dataframe es tan simple como esta línea:

citiesDF.select("name”, "pop”)

Usando la interfaz SQL, registramos el dataframe como una tabla temporal, después de lo cual podemos emitir consultas SQL contra él:

citiesDF.createOrReplaceTempView("cities”)
spark.sql("SELECT name, pop FROM cities”)

entre bastidores, Apache Spark utiliza un optimizador de consultas llamado catalizador que examina datos y consultas con el fin de producir un plan de consulta eficiente para la localidad de datos y el cálculo que realizará los cálculos necesarios en todo el clúster. En el Apache Spark 2.,x era, la interfaz SQL de Spark de dataframes y datasets (esencialmente un dataframe escrito que se puede comprobar en tiempo de compilación para ver si es correcto y aprovechar más memoria y optimizaciones de cómputo en tiempo de ejecución) es el enfoque recomendado para el desarrollo. La interfaz RDD todavía está disponible, pero solo se recomienda si sus necesidades no se pueden abordar dentro del paradigma SQL de Spark.

Spark 2.4 introdujo un conjunto de funciones integradas de orden superior para manipular matrices y otros tipos de datos de orden superior directamente.,

Spark MLlib

Apache Spark también incluye bibliotecas para aplicar técnicas de aprendizaje automático y análisis de gráficos a datos a escala. Spark MLlib incluye un marco para crear canalizaciones de aprendizaje automático, lo que permite una fácil implementación de extracción de características, selecciones y transformaciones en cualquier conjunto de datos estructurado. MLlib viene con implementaciones distribuidas de Algoritmos de clustering y clasificación, como clustering de K-means y bosques aleatorios que se pueden intercambiar dentro y fuera de canalizaciones personalizadas con facilidad., Los modelos pueden ser entrenados por científicos de datos en Apache Spark usando R o Python, guardados usando MLlib, y luego importados a una canalización basada en Java o Scala para su uso en producción.

tenga en cuenta que, si bien Spark MLlib cubre el aprendizaje automático básico, incluida la clasificación, la regresión, la agrupación en clústeres y el filtrado, no incluye instalaciones para modelar y entrenar redes neuronales profundas (para obtener más información, consulte la revisión de Spark MLlib de InfoWorld). Sin embargo, las canalizaciones de aprendizaje profundo están en proceso.,

Spark GraphX

Spark GraphX viene con una selección de Algoritmos distribuidos para procesar estructuras de gráficos, incluida una implementación del PageRank de Google. Estos algoritmos utilizan el enfoque RDD de Spark Core para modelar datos; el paquete GraphFrames le permite realizar operaciones de gráficos en dataframes, incluido el aprovechamiento del optimizador Catalyst para consultas de gráficos.

Spark Streaming

Spark Streaming fue una adición temprana a Apache Spark que le ayudó a ganar tracción en entornos que requerían procesamiento en tiempo real o casi en tiempo real., Anteriormente, el procesamiento por lotes y por secuencias en el mundo de Apache Hadoop eran cosas separadas. Escribiría código MapReduce para sus necesidades de procesamiento por lotes y usaría algo como Apache Storm para sus requisitos de transmisión en tiempo real. Esto obviamente conduce a bases de código dispares que deben mantenerse sincronizadas para el dominio de la aplicación a pesar de estar basadas en marcos completamente diferentes, requerir diferentes recursos e involucrar diferentes preocupaciones operativas para ejecutarlas.,

Spark Streaming extendió el concepto de Apache Spark de procesamiento por lotes en streaming dividiendo el flujo en una serie continua de microbatches, que luego podrían ser manipulados usando la API de Apache Spark. De esta manera, el código en las operaciones por lotes y de streaming puede compartir (en su mayoría) el mismo código, ejecutándose en el mismo marco, reduciendo así la sobrecarga tanto del desarrollador como del operador. Todos ganan.,

una crítica del enfoque de streaming de Spark es que el microbatching, en escenarios donde se requiere una respuesta de baja latencia a los datos entrantes, puede no ser capaz de igualar el rendimiento de otros marcos compatibles con streaming como Apache Storm, Apache Flink y Apache Apex, todos los cuales utilizan un método de streaming puro en lugar de microbatches.

Streaming estructurado

Streaming estructurado (añadido en Spark 2.x) es Spark Streaming lo que Spark SQL fue para las API de Spark Core: una API de nivel superior y una abstracción más fácil para escribir aplicaciones., En el caso de la transmisión de estructuras, la API de nivel superior esencialmente permite a los desarrolladores crear marcos de datos y conjuntos de datos de transmisión infinitos. También resuelve algunos puntos débiles muy reales con los que los usuarios han luchado en el marco anterior, especialmente en relación con las agregaciones en tiempo de Evento y la entrega tardía de mensajes. Todas las consultas en flujos estructurados pasan por el optimizador de consultas Catalyst, e incluso se pueden ejecutar de manera interactiva, lo que permite a los usuarios realizar consultas SQL contra datos de transmisión en vivo.,

La transmisión estructurada originalmente se basó en el esquema microbatching de Spark Streaming para manejar los datos de transmisión. Pero en Spark 2.3, El equipo de Apache Spark agregó un modo de procesamiento continuo de baja latencia a la transmisión estructurada, lo que le permite manejar respuestas con latencias tan bajas como 1 ms, lo cual es muy impresionante. A partir de Spark 2.4, El procesamiento continuo todavía se considera experimental. Si bien la transmisión estructurada se basa en el motor SQL de Spark, la transmisión continua solo admite un conjunto restringido de consultas.,

La transmisión estructurada es el futuro de las aplicaciones de transmisión con la plataforma, por lo que si está creando una nueva aplicación de transmisión, debe usar la transmisión estructurada. Las API de streaming de Spark heredadas seguirán siendo compatibles, pero el proyecto recomienda transferir a Streaming estructurado, ya que el nuevo método hace que la escritura y el mantenimiento del código de streaming sea mucho más llevadero.

Deep Learning Pipelines

Apache Spark admite deep learning a través de Deep Learning Pipelines., Con la estructura de canalización existente de MLlib, puede llamar a bibliotecas de aprendizaje profundo de nivel inferior y construir clasificadores en solo unas pocas líneas de código, así como aplicar gráficos de TensorFlow personalizados o modelos de Keras a los datos entrantes. Estos gráficos y modelos incluso se pueden registrar como Spark SQL UDFs (funciones definidas por el usuario) personalizadas para que los modelos de aprendizaje profundo se puedan aplicar a los datos como parte de instrucciones SQL.

tutoriales de Apache Spark

¿listo para sumergirse y aprender Apache Spark?, Recomendamos encarecidamente la Guía de Evan Heitman a Neanderthal’s Guide to Apache Spark en Python, que no solo establece los conceptos básicos de cómo funciona Apache Spark en términos relativamente simples, sino que también lo guía a través del proceso de escribir una aplicación Python simple que haga uso del framework. El artículo está escrito desde la perspectiva de un científico de datos, lo que tiene sentido ya que la ciencia de datos es un mundo en el que el big data y el aprendizaje automático son cada vez más críticos.,

si estás buscando algunos ejemplos de Apache Spark para darte una idea de lo que la plataforma puede hacer y cómo lo hace, echa un vistazo a Spark de {Examples}. Hay un montón de código de ejemplo aquí para una serie de tareas básicas que conforman los bloques de construcción de la programación de Spark, por lo que puede ver los componentes que conforman las tareas más grandes para las que está hecho Apache Spark.

¿necesitas ir más profundo? DZone tiene lo que modestamente se refiere como la colección completa de Apache Spark, que consiste en una gran cantidad de tutoriales útiles sobre muchos temas de Apache Spark. Feliz aprendizaje!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Ir a la barra de herramientas