Podcast
Questions and Answers
¿Cuál es la principal fortaleza de Spark?
¿Cuál es la principal fortaleza de Spark?
- Las respuestas A y B son correctas.
- Las respuestas A y B son incorrectas.
- Opera en memoria principal, lo que hace que los cálculos sean mucho más rápidos. (correct)
- Nunca da lugar a movimiento de datos entre máquinas (shuffle).
¿Qué tipo de procesos se benefician especialmente de Spark?
¿Qué tipo de procesos se benefician especialmente de Spark?
- Los procesos en modo batch, como, por ejemplo, una consulta SQL.
- Los algoritmos de aprendizaje automático que dan varias pasadas sobre los mismos datos.
- Las respuestas A, B y C son correctas. (correct)
- Los proceso aplicados a datos no demasiado grandes.
¿Cuál es la estructura de datos fundamental en Spark?
¿Cuál es la estructura de datos fundamental en Spark?
- RDD. (correct)
- DataFrame.
- SparkSession.
- SparkContext
En una operación de Spark en la que sea necesario movimiento de datos...
En una operación de Spark en la que sea necesario movimiento de datos...
Elige la respuesta correcta: Cuando se ejecuta una transformación en Spark sobre un RDD...
Elige la respuesta correcta: Cuando se ejecuta una transformación en Spark sobre un RDD...
Elige la respuesta correcta: La acción collect de Spark...
Elige la respuesta correcta: La acción collect de Spark...
Elige la respuesta incorrecta: Un PairRDD...
Elige la respuesta incorrecta: Un PairRDD...
¿Qué es un executor de Spark?
¿Qué es un executor de Spark?
La acción map de Spark...
La acción map de Spark...
Cuando Spark ejecuta una acción...
Cuando Spark ejecuta una acción...
Flashcards
Apache Spark
Apache Spark
Motor unificado de cálculo en memoria y un conjunto de bibliotecas para procesamiento paralelo y distribuido de datos en clústeres de ordenadores.
RDD (Resilient Distributed Datasets)
RDD (Resilient Distributed Datasets)
Estructuras de datos fundamentales de Spark, colecciones distribuidas resistentes.
Spark SQL y API Estructurada
Spark SQL y API Estructurada
API con funciones para manejar tablas de datos distribuidas, estructuradas en columnas con nombre y tipo.
Spark Streaming
Spark Streaming
Signup and view all the flashcards
Spark MLlib
Spark MLlib
Signup and view all the flashcards
Spark GraphX
Spark GraphX
Signup and view all the flashcards
Driver de Spark
Driver de Spark
Signup and view all the flashcards
SparkSession
SparkSession
Signup and view all the flashcards
Executor de Spark
Executor de Spark
Signup and view all the flashcards
Tarea (Task) de Spark
Tarea (Task) de Spark
Signup and view all the flashcards
RDD (Resilient Distributed Dataset)
RDD (Resilient Distributed Dataset)
Signup and view all the flashcards
Transformación en Spark
Transformación en Spark
Signup and view all the flashcards
Acción en Spark
Acción en Spark
Signup and view all the flashcards
DAG (Directed Acyclic Graph)
DAG (Directed Acyclic Graph)
Signup and view all the flashcards
map() en Spark
map() en Spark
Signup and view all the flashcards
flatMap() en Spark
flatMap() en Spark
Signup and view all the flashcards
filter() en Spark
filter() en Spark
Signup and view all the flashcards
sample() en Spark
sample() en Spark
Signup and view all the flashcards
union() en Spark
union() en Spark
Signup and view all the flashcards
intersection() en Spark
intersection() en Spark
Signup and view all the flashcards
distinct() en Spark
distinct() en Spark
Signup and view all the flashcards
groupByKey() en Spark
groupByKey() en Spark
Signup and view all the flashcards
reduceByKey() en Spark
reduceByKey() en Spark
Signup and view all the flashcards
sortByKey() en Spark
sortByKey() en Spark
Signup and view all the flashcards
join() en Spark
join() en Spark
Signup and view all the flashcards
reduce() en Spark
reduce() en Spark
Signup and view all the flashcards
collect() en Spark
collect() en Spark
Signup and view all the flashcards
count() en Spark
count() en Spark
Signup and view all the flashcards
Job (Trabajo) de Spark
Job (Trabajo) de Spark
Signup and view all the flashcards
Stage (Etapa) de Spark
Stage (Etapa) de Spark
Signup and view all the flashcards
Study Notes
Introducción a Spark
- Spark es un framework de programación distribuida diseñado para ser más intuitivo y rápido que MapReduce.
- El objetivo principal es entender cómo Spark supera a MapReduce, conocer sus componentes y su funcionamiento interno, y practicar el procesamiento de datos.
Apache Spark
- Spark se originó en 2009 en Berkeley, EE. UU., como una alternativa a MapReduce, superando eventualmente a Hadoop.
- Es un motor unificado de cálculo en memoria con bibliotecas para procesar datos en paralelo y distribuido en clústeres.
- Es un framework de propósito general que se puede orientar para resolver cualquier tipo de problema y con el que se puede implementar cualquier tipo de algoritmo.
- Spark es independiente del lenguaje utilizado, se puede usar con R, Python, Java y Scala.
- Las optimizaciones de código de Spark benefician a todas las API, aplicaciones de business intelligence y SQL.
- Los cálculos se mantienen en la memoria, solo escribiendo los resultados en el disco cuando es necesario, mejorando el rendimiento en tareas iterativas.
Componentes de Spark
- Spark incluye una API distribuida, más intuitiva que MapReduce, que abstrae la comunicación en red y opera de manera similar a las consultas SQL sobre tablas distribuidas.
- Ofrece API para Java, Scala, Python (PySpark) y R (SparkR), siendo Scala el más utilizado para aplicaciones en producción.
- El módulo principal es Spark Core, que contiene las estructuras de datos fundamentales como los RDD (Resilient Distributed Dataset).
- Spark SQL es una API para manejar datos estructurados en tablas distribuidas llamadas DataFrames, permitiendo ejecutar sentencias SQL.
- Spark Streaming permite operar sobre datos en tiempo real, reemplazado por Spark Structured Streaming desde la versión 2.0. Este módulo simplifica el procesamiento de flujos de datos.
- Spark MLlib contiene algoritmos de Machine Learning distribuidos.
- Spark GraphX se utiliza para procesar grafos representados mediante RDD, actualmente obsoleto y reemplazado por GraphFrames.
- Los módulos inferiores corresponden a tres gestores de recursos, que son necesarios para ejecutarse, asignan máquinas, CPU y memoria a Spark.
Arquitectura de Spark
- Al escribir una aplicación en Spark, se está creando una aplicación secuencial que usa la biblioteca de Spark en Java, Scala, Python o R.
- El código se ejecuta en una máquina específica como un proceso llamado driver, que puede ser interna o externa al clúster.
- Es común crear un objeto sparkSession para indicar la ubicación del clúster de Spark. Algunas aplicaciones como Jupyter Notebook ya lo tienen creado.
- El sparkSession se comunica con el gestor de clúster para enviar tareas a los workers.
- La ejecución es secuencial excepto cuando el flujo del programa llega a funciones de Spark que desencadenan la ejecución distribuida.
- Al crear el objeto sparkSession, se configura el número de nodos, la memoria RAM y los cores físicos en cada nodo, que forman un executor.
- Un executor es un proceso JVM en un nodo que ocupa los recursos indicados.
- El gestor de clúster crea el proceso executor al iniciar y éste muere cuando la aplicación finaliza.
- Cada executor ejecuta tareas de Spark, requiriendo cada tarea un core libre. Los nodos del clúster con ejecutores se llaman workers.
Resilient distributed datasets (RDD)
- Los RDD son la abstracción fundamental de Spark, que es una colección no ordenada de objetos, distribuida en la memoria RAM de los nodos del clúster.
- La colección se divide en particiones, cada una en la memoria RAM de un nodo distinto.
- "Resilient" significa que un RDD se puede reconstruir si una máquina falla gracias al DAG (Directed Acyclic Graph).
- "Distributed" implica que los objetos están divididos en particiones en la memoria principal de los nodos del clúster.
- "Dataset" representa un conjunto de datos procesados en paralelo y distribuido.
- No todos los RDD tienen el mismo número de particiones distribuidas en la memoria RAM de un clúster de cuatro nodos, es distribuido en la memoria RAM de los nodos.
- Si un nodo falla, las particiones se reconstruyen gracias al DAG.
- El contenido de un RDD no se puede modificar; se aplican transformaciones para obtener nuevos RDD.
- Cuando se aplica una transformación, Spark la ejecuta en paralelo sobre las particiones del RDD.
- Ejemplo: para multiplicar un RDD de números reales por dos, Spark serializa el código y lo envía a los nodos para que actúe en cada partición.
Partición
- Es un subconjunto de los objetos de un RDD en un nodo.
- Es la unidad de datos que ejecuta una tarea de transformación independientemente del resto de particiones.
- Lo ideal es que haya tantas particiones como cores físicos disponibles.
- Se recomienda que cada RDD esté dividido en un número de particiones que sea entre el doble y el triple que el número de procesadores del clúster.
- Desde Spark 2.0, se recomiendan los DataFrames y su API en lugar de los RDD, los DataFrames están sujetos a optimizaciones automáticas de código, a diferencia de los RDD.
Transformaciones
- Operación efectuada sobre un Resilient Distributed Dataset que devuelve un nuevo RDD, transformando sus elementos.
- Son "lazy" porque Spark no ejecuta nada hasta que se encuentra una acción, simplemente añade la transformación al grafo de ejecución (DAG), que permite la resiliency.
- El DAG guarda la secuencia de transformaciones para obtener cada RDD.
- Una transformación que no implica shuffle (movimiento de datos entre nodos) se llama narrow, donde cada partición genera otra en el mismo nodo. Shuffle implica escritura en el disco duro local del nodo emisor y receptor.
Acción
- Recibe un RDD y calcula un resultado (como enteros o doubles) que devuelve al driver. El dato devuelto al driver no es un RDD, sino un tipo nativo del lenguaje.
- El resultado de la acción debe caber en la memoria donde se ejecuta el driver.
- La acción desencadena el cálculo de la secuencia de transformaciones intermedias y la materialización de los Resilient Distributed Datasets involucrados.
- Al materializar un RDD, se aplica la transformación según el DAG y el anterior se libera, a menos que se use el método
cache()
, haciendo que el RDD permanezca en la RAM de los nodos. - El punto de inicio del DAG son las operaciones de lectura de datos desde fuentes como HDFS o Amazon S3 o una base de datos. Si no se ha cacheado ningún RDD, Spark reconstruye la secuencia completa de transformaciones, salvo que los RDD intermedios se hayan cacheado.
Operaciones de la API de Spark
- Estas operaciones no son transformaciones ni acciones, como
cache()
, sino que habilitan o deshabilitan comportamientos o consultan la distribución física de un RDD. - Para todas las operaciones que reciben una función, Spark serializa el código de la función y lo envía por la red a los nodos para su ejecución
Transformaciones comunes de RESILIENT DISTRIBUTED DATASET (RDD).
map
: Transforma cada elemento del RDD utilizando una función dada y devuelve un nuevo RDD.flatMap
: Similar a map, pero la función devuelve un vector de valores, que luego se "aplanan" en un RDD del tipo interior.filter
: Filtra los elementos del RDD basándose en una función que devuelvetrue
ofalse
.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 los elementos repetidos del RDD.
Transformaciones de PairRDD
- Son resilient distributed datasets de pares(clave, valor)
groupByKey
: Agrupa los elementos por clave, útil cuando los elementos son tuplas.reduceByKey
: Agrega los elementos para cada clave usando una función conmutativa y asociativa.sortByKey
: Ordena los elementos del RDD por clave.join
: Combina dos resilient distributed datasets juntando elementos con la misma clave.
Acciones comunes
reduce
: Realiza una agregación de datos utilizando una función.collect
: Devuelve todos los elementos del RDD como una lista en el driver, pudiendo causar errores de memoria.count
: Devuelve el número de elementos en el REsilient Distributed Dataset.take
: Devuelve los primeros "n" elementos del RDD, sin garantías de ordenación.first
: Devuelve el primer elemento del RDD.takeSample
: Devuelve "n" elementos aleatorios del RDD.takeOrdered
: Devuelve "n" primeros elementos del RDD ordenados.countByKey
: Cuenta el número de elementos por cada clave diferente.saveAsTextFile
: Guarda el contenido del RDD en un fichero de texto.
Jobs, Stages y Tasks
- Un job es el proceso que ejecuta Spark para llevar acabo una acción del cliente, donde cada job se divide en etapas (stages).
- Cada stage es el proceso que se puede llevar a cabo sin mover datos entre nodos.
- Una task es cada transformación que forma una etapa.
Tareas
- Es la unidad más pequeña de trabajo de Spark
- Una tarea de Spark es el procesamiento aplicado por un core físico (CPU) a una partición de un RDD.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.