3. Spark I

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson
Download our mobile app to listen on the go
Get App

Questions and Answers

¿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?

  • 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?

  • RDD. (correct)
  • DataFrame.
  • SparkSession.
  • SparkContext

En una operación de Spark en la que sea necesario movimiento de datos...

<p>Siempre debemos escribirlos primero en el disco local del nodo emisor. (D)</p> Signup and view all the answers

Elige la respuesta correcta: Cuando se ejecuta una transformación en Spark sobre un RDD...

<p>Se añade la transformación al DAG, que creará un RDD con el resultado de la transformación cuando se materialice el RDD resultante. (A)</p> Signup and view all the answers

Elige la respuesta correcta: La acción collect de Spark...

<p>Lleva todo el contenido del RDD al driver y podría provocar una excepción. (D)</p> Signup and view all the answers

Elige la respuesta incorrecta: Un PairRDD...

<p>Es un tipo de RDD que contiene una tupla con un número variable de componentes. (B)</p> Signup and view all the answers

¿Qué es un executor de Spark?

<p>Un proceso creado en los nodos del clúster, preparado para recibir trabajos de Spark. (C)</p> Signup and view all the answers

La acción map de Spark...

<p>No existe como acción; es una transformación. (C)</p> Signup and view all the answers

Cuando Spark ejecuta una acción...

<p>Se materializan los RDD intermedios necesarios que no estuviesen ya materializados, se calcula el resultado de la acción y se liberan los no cacheados. (A)</p> Signup and view all the answers

Flashcards

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)

Estructuras de datos fundamentales de Spark, colecciones distribuidas resistentes.

Spark SQL y API Estructurada

API con funciones para manejar tablas de datos distribuidas, estructuradas en columnas con nombre y tipo.

Spark Streaming

Módulo para operar de manera distribuida sobre datos en tiempo real.

Signup and view all the flashcards

Spark MLlib

Contiene implementaciones distribuidas de algoritmos de Machine Learning.

Signup and view all the flashcards

Spark GraphX

Módulo de procesamiento de grafos, para algoritmos de camino mínimo.

Signup and view all the flashcards

Driver de Spark

Aplicación secuencial que utiliza la biblioteca de Spark para procesamiento distribuido.

Signup and view all the flashcards

SparkSession

Objeto necesario para establecer comunicación con el clúster y enviar tareas a los workers.

Signup and view all the flashcards

Executor de Spark

Proceso de la JVM que se ejecuta en un nodo y ocupa los recursos para ejecutar tareas de Spark.

Signup and view all the flashcards

Tarea (Task) de Spark

Unidad mínima de ejecución de trabajos en Spark.

Signup and view all the flashcards

RDD (Resilient Distributed Dataset)

Colección no ordenada de objetos, distribuida en la memoria RAM de los nodos del clúster.

Signup and view all the flashcards

Transformación en Spark

Operación que se ejecuta sobre un RDD y devuelve un nuevo RDD modificado.

Signup and view all the flashcards

Acción en Spark

Operación que recibe un RDD y calcula un resultado que se devuelve al driver.

Signup and view all the flashcards

DAG (Directed Acyclic Graph)

Grafo de ejecución que mantiene la trazabilidad de las transformaciones para la reconstrucción de RDD.

Signup and view all the flashcards

map() en Spark

Función que se aplica a cada elemento de un RDD para transformarlos.

Signup and view all the flashcards

flatMap() en Spark

Similar a map(), pero la función devuelve un vector de valores para cada elemento, que se aplanan.

Signup and view all the flashcards

filter() en Spark

Función que se aplica sobre cada elemento del RDD y devuelve un valor booleano para incluir o no el elemento.

Signup and view all the flashcards

sample() en Spark

Devuelve una muestra aleatoria del RDD del tamaño especificado.

Signup and view all the flashcards

union() en Spark

Devuelve un RDD con la unión de dos RDD pasados como parámetros.

Signup and view all the flashcards

intersection() en Spark

Devuelve la intersección de dos RDDs, es decir, los elementos que están presentes en ambos.

Signup and view all the flashcards

distinct() en Spark

Elimina los elementos repetidos de un RDD.

Signup and view all the flashcards

groupByKey() en Spark

Agrupa los elementos por la clave en un PairRDD.

Signup and view all the flashcards

reduceByKey() en Spark

Agrega los elementos para cada clave empleando la función especificada.

Signup and view all the flashcards

sortByKey() en Spark

Ordena los elementos del RDD por clave.

Signup and view all the flashcards

join() en Spark

Combina dos RDD de tal modo que se junten los elementos que tienen la misma clave.

Signup and view all the flashcards

reduce() en Spark

Ejecuta una agregación de los datos empleando la función especificada.

Signup and view all the flashcards

collect() en Spark

Devuelve todos los elementos contenidos en el RDD como una colección del lenguaje.

Signup and view all the flashcards

count() en Spark

Devuelve el número de elementos contenidos en el RDD.

Signup and view all the flashcards

Job (Trabajo) de Spark

La unidad de procesamiento necesaria para llevar a cabo una acción del usuario en Spark.

Signup and view all the flashcards

Stage (Etapa) de Spark

Serie de transformaciones que pueden llevarse a cabo sin mover datos entre nodos en 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 devuelve true o false.
  • 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.

Quiz Team

Related Documents

More Like This

Use Quizgecko on...
Browser
Browser