Podcast
Questions and Answers
¿Cuál es una característica principal de Apache Spark que lo diferencia de MapReduce?
¿Cuál es una característica principal de Apache Spark que lo diferencia de MapReduce?
- Spark es un motor unificado de cálculo en memoria. (correct)
- MapReduce ofrece bibliotecas para procesamiento paralelo y distribuido.
- Spark solo puede procesar datos de fuentes HDFS.
- MapReduce es más intuitivo para la programación distribuida.
¿Cuál de las siguientes NO es una forma en que el motor de Spark puede ser utilizado?
¿Cuál de las siguientes NO es una forma en que el motor de Spark puede ser utilizado?
- Mediante una instrucción de la API de programación que recibe una consulta SQL como string.
- Directamente a través de especificaciones SQL contra Spark (Hive).
- Exclusivamente mediante el uso de MapReduce sin APIs. (correct)
- A través de la API de DataFrames (R, Python, Java y Scala).
¿Qué ocurre con los cálculos en Spark en relación con la memoria y el disco?
¿Qué ocurre con los cálculos en Spark en relación con la memoria y el disco?
- Todos los cálculos se escriben inmediatamente en disco para asegurar la persistencia de los datos.
- Todos los cálculos se llevan a cabo en memoria y solo se escriben resultados a disco cuando es necesario. (correct)
- La decisión de usar memoria o disco se basa en el tamaño de los datos, independientemente de la operación.
- Los cálculos se realizan únicamente en disco, similar a MapReduce.
¿Cuál es el componente principal de Spark donde residen las estructuras de datos fundamentales, como los RDDs?
¿Cuál es el componente principal de Spark donde residen las estructuras de datos fundamentales, como los RDDs?
¿Cómo se gestionan los recursos para la ejecución de Spark en un clúster?
¿Cómo se gestionan los recursos para la ejecución de Spark en un clúster?
¿Cuál es la función principal de Spark SQL y su API estructurada?
¿Cuál es la función principal de Spark SQL y su API estructurada?
¿Qué módulo de Spark ha sido reemplazado por Spark Structured Streaming?
¿Qué módulo de Spark ha sido reemplazado por Spark Structured Streaming?
¿Qué representa el término 'driver' en la arquitectura de Spark?
¿Qué representa el término 'driver' en la arquitectura de Spark?
¿Cuál es la función del objeto sparkSession
en Spark?
¿Cuál es la función del objeto sparkSession
en Spark?
¿Qué término describe el proceso JVM que se ejecuta en cada nodo y ocupa los recursos asignados?
¿Qué término describe el proceso JVM que se ejecuta en cada nodo y ocupa los recursos asignados?
¿Qué concepto representa la unidad mínima de ejecución de trabajos en Spark?
¿Qué concepto representa la unidad mínima de ejecución de trabajos en Spark?
¿Qué son los RDDs (Resilient Distributed Datasets)?
¿Qué son los RDDs (Resilient Distributed Datasets)?
¿Qué significa que un RDD sea 'inmutable'?
¿Qué significa que un RDD sea 'inmutable'?
¿Cuál es la recomendación de los creadores de Spark respecto al uso de RDDs a partir de la versión 2.0?
¿Cuál es la recomendación de los creadores de Spark respecto al uso de RDDs a partir de la versión 2.0?
¿Qué caracteriza a una transformación 'narrow' en Spark?
¿Qué caracteriza a una transformación 'narrow' en Spark?
¿Cuál es el destino del resultado de una 'acción' en Spark?
¿Cuál es el destino del resultado de una 'acción' en Spark?
¿Qué es un DAG (Directed Acyclic Graph) en el contexto de Spark?
¿Qué es un DAG (Directed Acyclic Graph) en el contexto de Spark?
¿Cuál es el propósito fundamental de la función cache()
en Spark?
¿Cuál es el propósito fundamental de la función cache()
en Spark?
En el contexto de Spark, ¿qué implica la serialización del código de una función?
En el contexto de Spark, ¿qué implica la serialización del código de una función?
¿Qué tipo de RDD se considera un PairRDD en Spark?
¿Qué tipo de RDD se considera un PairRDD en Spark?
¿Cuál es el objetivo principal de las operaciones join
y reduceByKey
en Spark?
¿Cuál es el objetivo principal de las operaciones join
y reduceByKey
en Spark?
¿Qué variable se usaba en versiones anteriores de Spark para efectuar la conexión con el gestor de clúster, y ahora está envuelta por sparkSession
?
¿Qué variable se usaba en versiones anteriores de Spark para efectuar la conexión con el gestor de clúster, y ahora está envuelta por sparkSession
?
¿Qué representa el término 'job' en el contexto de Spark?
¿Qué representa el término 'job' en el contexto de Spark?
¿Qué define un 'stage' en el procesamiento de Spark?
¿Qué define un 'stage' en el procesamiento de Spark?
¿Qué tarea realiza la operación map
sobre un RDD en Spark?
¿Qué tarea realiza la operación map
sobre un RDD en Spark?
¿Cuál de las siguientes opciones describe mejor el propósito de la acción collect
en Spark?
¿Cuál de las siguientes opciones describe mejor el propósito de la acción collect
en Spark?
En términos de diseño de aplicaciones Spark con RDD, ¿qué restricción importante existe para realizar operaciones de agregación y otras operaciones entre RDDs?
En términos de diseño de aplicaciones Spark con RDD, ¿qué restricción importante existe para realizar operaciones de agregación y otras operaciones entre RDDs?
Según el contenido, ¿qué paso es necesario para poder realizar un operación de join entre dos RDDs que tienen datos en formato diferente?
Según el contenido, ¿qué paso es necesario para poder realizar un operación de join entre dos RDDs que tienen datos en formato diferente?
Flashcards
¿Qué es MapReduce?
¿Qué es MapReduce?
Paradigma de programación distribuida que presenta deficiencias.
¿Qué es Apache Spark?
¿Qué es Apache Spark?
Motor unificado de cálculo en memoria para procesamiento paralelo y distribuido.
¿Qué es Spark SQL?
¿Qué es Spark SQL?
API con funciones para manejar tablas de datos distribuidas con nombre y tipo.
¿Qué es Spark Streaming/Structured Streaming?
¿Qué es Spark Streaming/Structured Streaming?
Signup and view all the flashcards
¿Qué es Spark MLlib?
¿Qué es Spark MLlib?
Signup and view all the flashcards
¿Qué es Spark Core?
¿Qué es Spark Core?
Signup and view all the flashcards
¿Gestores de recursos de Spark?
¿Gestores de recursos de Spark?
Signup and view all the flashcards
¿Qué es un RDD?
¿Qué es un RDD?
Signup and view all the flashcards
¿Qué es una transformación en Spark?
¿Qué es una transformación en Spark?
Signup and view all the flashcards
¿Qué es una acción en Spark?
¿Qué es una acción en Spark?
Signup and view all the flashcards
¿Qué es el DAG?
¿Qué es el DAG?
Signup and view all the flashcards
¿Qué es una partición en Spark?
¿Qué es una partición en Spark?
Signup and view all the flashcards
¿Qué es un 'executor' en Spark?
¿Qué es un 'executor' en Spark?
Signup and view all the flashcards
¿Qué es un 'worker' en Spark?
¿Qué es un 'worker' en Spark?
Signup and view all the flashcards
¿Qué es un 'job' en Spark?
¿Qué es un 'job' en Spark?
Signup and view all the flashcards
¿Qué es un 'stage' en Spark?
¿Qué es un 'stage' en Spark?
Signup and view all the flashcards
¿Qué es una 'task' en Spark?
¿Qué es una 'task' en Spark?
Signup and view all the flashcards
¿Qué es la inmutabilidad en RDDs?
¿Qué es la inmutabilidad en RDDs?
Signup and view all the flashcards
Study Notes
Spark I
- Explora Apache Spark, un framework intuitivo para la programación distribuida que mejora MapReduce.
Introducción y objetivos
- El objetivo es comprender la superioridad de Spark sobre MapReduce.
- Identificar los módulos de Spark y sus funciones.
- Comprender la arquitectura y el funcionamiento interno de Apache Spark.
- Aplicar funciones comunes de procesamiento de datos con Apache Spark.
Apache Spark
- Surgió en Berkeley en 2009, para superar las deficiencias de MapReduce.
- Es un motor de cálculo unificado en memoria y un conjunto de bibliotecas para el procesamiento paralelo y distribuido de datos en clústeres.
- Es un framework de propósito general capaz de implementar cualquier algoritmo.
Características unificadas de Spark
- El motor es independiente de la forma en que se use Spark y es compatible con:
- API de DataFrames (R, Python, Java, Scala).
- Herramientas externas de consultas SQL (Hive, Tableau, PowerBI).
- Instrucciones de API de programación que reciben consultas SQL.
- Se traduce cualquier opción en un grafo de tareas, optimizado automáticamente por Spark.
Proceso En Memoria de Spark
- Los cálculos se realizan en memoria, los resultados se escriben en disco solo explícitamente o cuando el usuario los requiera.
- El movimiento de datos (shuffle) se produce solo cuando que es indispensable, a diferencia de MapReduce.
- Se logra un rendimiento superior en tareas iterativas como el machine learning.
Componentes de Spark
- Apache Spark es una API distribuida intuitiva, que abstrae la comunicación en red y opera de manera similar a SQL.
- Existen API para Java, Scala, Python (PySpark) y R (SparkR).
Módulo Spark Core
- Es el principal, contiene las estructuras de datos fundamentales como RDD (Resilient Distributed Dataset).
- Las acciones se traducen a operaciones sobre RDD y se ejecutan por el motor.
Gestores de Recursos
- Los tres módulos inferiores representan los gestores de recursos de un clúster donde se ejecuta Spark.
- Se encargan de asignar máquinas, CPU y memoria principal a Spark.
Spark SQL y API estructurada
- API para tablas de datos distribuidas en columnas con nombre y tipo (DataFrames).
- Incluye una función para ejecutar sentencias SQL en DataFrames.
Spark Streaming
- Opera de forma distribuida en datos en tiempo real (streams de datos).
- Reemplazado por Spark Structured Streaming a partir de Spark 2.0 para simplificar el procesamiento de flujos de datos.
Mllib y Graphx
- Spark MLlib contiene algoritmos distribuidos de Machine Learning.
- Spark GraphX gestiona el procesamiento de grafos a través de RDD y ha sido reemplazado por GraphFrames.
Arquitectura de Spark
- Al escribir una aplicación para "Spark", se escribe una aplicación secuencial utilizando las bibliotecas de Spark para el leguaje Java, Scala, Python o R.
- Al ejecutar el código, se realiza sobre el driver, que puede ser interno o externo al clúster.
- SparkSession es un objeto necesario en la ejecución, en el momento de su creación se debe indicar la dirección IP y en que puerto se encuentra un clúster de Spark configurado.
Ejecución de Programas en Spark
- La ejecución es secuencial, excepto cuando el flujo del programa llega a ciertas funciones específicas de Spark que desencadenan la ejecución distribuida.
- Para la creación del objeto SparkSession, se configura el número de nodos, la memoria RAM y el número de cores físicos que se reservan en cada nodo.
- Un executor es un proceso de la JVM que se ejecuta en el nodo utilizando los recursos indicados (cores, RAM, disco duro).
Proceso Executor
- El gestor de clúster crea el proceso executor y muere cuando la aplicación finaliza.
- La unidad mínima de ejecución de trabajos es una tarea (task), cada una necesita un core libre.
- Cada nodo del clúster donde se crean executors se denomina worker.
Resilient Distributed Datasets (RDD)
- Los RDD son la abstracción fundamental de Spark.
- Un RDD es una colección no ordenada distribuida en la memoria RAM de los nodos del clúster.
- La colección está dividida en particiones, donde cada una está en la memoria RAM de un nodo distinto.
Características RDD
- Resilient ('resistente', 'adaptable'): Se puede reconstruir la información aunque algunas máquinas fallen.
- Distributed ('distribuido'): Los objetos están divididos en la memoria principal de los nodos del clúster.
- Dataset: Es un conjunto de datos procesándose de forma paralela para transformarlos.
- Los RDD se almacenan en la memoria RAM de los nodos sin replicación de datos.
Reconstrucción de Particiones RDD
- Si un nodo falla, las particiones se reconstruyen gracias al DAG.
Inmutabilidad en los RDD
- No se puede modificar el contenido de un RDD una vez creado.
- Las transformaciones se ejecutan en paralelo sobre las particiones del RDD, resultando en un nuevo RDD.
Partición
- Es un subconjunto de los objetos del RDD que están presentes en un mismo nodo.
- Unidad mínima de datos sobre la que se ejecuta una tarea de transformación.
- Idealmente, se debe recomendar que cada RDD esté dividido entre doble o el triple que los procesadores del clúster.
DataFrames
- A partir de Spark 1.6, se introdujeron los DataFrames en Spark.
- Desde Spark 2.0, se recomienda utilizar DataFrames sobre RDD.
- Los DataFrames permiten optimizaciones automáticas de código por Catalyst, el analizador de Spark.
Transformaciones en Spark
- Se ejecutan sobre un RDD y devuelven otro nuevo con cambios.
- Son 'lazy' (perezosas): no se ejecutan hasta encontrar una acción.
- Spark registra la transformación en un grafo de ejecución (DAG).
Resiliencia
- El DAG guarda la secuencia de transformaciones.
- Las transformaciones sin shuffle (movimiento de datos entre nodos) son 'narrow'.
- Las operaciones shuffle implican escritura local en disco del emisor y receptor.
Acciones en Spark
- Reciben un RDD y calculan un resultado, enviado al driver.
- El tipo de dato enviado al driver no es un RDD, sino un tipo nativo del lenguaje (Java/Scala/Python/R).
- El resultado debe caber en la memoria de la máquina donde se ejecuta el proceso driver.
Proceso de Transformación
- Una acción desencadena el cálculo de todas las transformaciones.
- Después de materializar un RDD, se aplica la transformación y se libera el anterior.
- Un RDD en caché permanece en la RAM de los nodos sin necesidad de recalcularlo.
Funcionamiento por Defecto del DAG
- Las operaciones de lectura de datos son el punto de partida.
- Cualquier operación a un RDD exige reconstruir las transformaciones previas, a menos que haya RDD intermedios en caché.
Utilización
- El DAG reconstruye cualquier RDD, si este se debe a una referencia a él o por fallo de algún nodo.
Otras Operaciones
- Ciertas operaciones de la API de Spark no son transformaciones ni acciones, sino que sirven para configurar. como el cache().
Transformaciones RDD Comunes
- Spark serializa el código de la función y lo envía a los nodos.
- map: Transforma cada elemento del RDD y devuelve un nuevo RDD.
- flatMap: Similar a map, pero devuelve un RDD del tipo interior.
- filter: Devuelve un RDD con los elementos que cumplen una condición (true).
- sample: Devuelve una muestra aleatoria del RDD.
- union: Devuelve un RDD con la unión de dos RDD.
- intersection: Devuelve la intersección de dos RDD.
- distinct: Elimina elementos repetidos.
Transformaciones Específicas con PairRDD
- groupByKey: Agrupa por clave para elementos en tuplas.
- reduceByKey: Agrega los elementos para cada clave con una función especificada.
- sortByKey: Ordena los elementos por clave.
- join: Combina dos RDD con elementos que tienen la misma clave.
Acciones en RDD
- Las acciones llevan resultados al driver, con la limitación de espacio en la memoria del proceso driver.
- reduce: Agrega datos con una función específica.
- collect: Devuelve todos elementos del RDD y puede causar errores por memoria.
- count: Devuelve el número de elementos en el RDD.
- take: Devuelve los n primeros elementos del RDD.
- first: Devuelve el primer elemento del RDD.
- takeSample: Devuelve n elementos aleatorios del RDD.
- takeOrdered: Devuelve los n primeros elementos ordenados del RDD.
- countByKey: Cuenta el número de elementos para cada clave en RDD.
- saveAsTextFile: Guarda los contenidos de RDD en un fichero de texto.
Funciones Lambda
- Se crea una función func_multiplicar para aplicar el método
map()
de Spark, que serializa el código y se envía por los nodos. - Para llevar a cabo la transformación map, no es necesario el movimiento de datos, en cambio es una transformación narrow.
Un RDD Duo
- Para Spark es una tupla de 2 elementos que admite operaciones adicionales como reduceByKey.
- Esta función requiere movimiento de datos o transformaciones broad.
Funciones Filter
- Map crea una función anónima lambda, y también aplica un filtro.
Funciones Join
- Aplica una función join, un pairRDD formado por una nueva tupla creada por un RDD original.
Funciones Take
- Es un acción que lleva el resultado al driver y debe de caber en él.
- Desencadena toda la realización de los procedimientos en Python .
Jobs, stages y tasks
- Un job (trabajo) de Spark es el procesamiento necesario para llevar a cabo una acción del usuario.
- Cada Job se divide en una serie de stages (etapas).
- Un stage es todo el procesamiento que puede llevarse a cabo sin mover datos entre nodos.
El Task
- Cada nodo hace un procesamiento aplicado a diferentes particiones de un dataframe.
- Una task es una transformación que forma una etapa.
- Es el procesamiento aplicado por un core físico de la CPU sobre una partición de un RDD.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.