Está en la página 1de 9

Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

Guía de
[Tópicos de base de datos]

Alumno: [Beatriz Campos Flores]


Semestre: [Séptimo]
Grupo: [6751]

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

Tabla de contenido

Apache SPARK 3
Apache Spark: Su relación con Hadoop 3
Apache Spark: ¿Cómo funciona? 3
Apache Spark: ¿Cuáles son sus funciones? 4
Aspectos clave de Apache Spark 5
Ejemplos de código Apache Spark 5
Spark Streaming 6
Spark SQL 7
Glosario 7
Referencias 9

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

[Tópicos de base de datos]

Apache SPARK
Apache Spark es un framework de programación para procesamiento de datos
distribuidos diseñado para ser rápido y de propósito general. Como su propio
nombre indica, ha sido desarrollada en el marco del proyecto Apache, lo que
garantiza su licencia Open Source.

Además, podremos contar con que su mantenimiento y evolución se llevarán a


cabo por grupos de trabajo de gran prestigio, y existirá una gran flexibilidad e
interconexión con otros módulos de Apache como Hadoop, Hive o Kafka.
Parte de la esencia de Spark es su carácter generalista. Consta de diferentes APIs
y módulos que permiten que sea utilizado por una gran variedad de
profesionales en todas las etapas del ciclo de vida del dato.

Dichas etapas pueden incluir desde soporte para análisis interactivo de datos con
SQL a la creación de complejos pipelines de machine learning y procesamiento en
streaming, todo usando el mismo motor de procesamiento y las mismas APIs.

Apache Spark: Su relación con Hadoop


Una de las grandes preguntas sobre Spark es su relación con Hadoop. ¿Se trata
de otra tecnología competencia del famoso framework? En realidad, Spark es la
evolución natural de Hadoop, cuya funcionalidad es muy rígida y limitada en el
sentido de que no aprovecha al máximo las capacidades del procesamiento
distribuido.
Algunas de las evoluciones que supone Spark frente a su predecesor son el
procesamiento en memoria que disminuye las operaciones de lectura/escritura, la
posibilidad de análisis interactivo con SQL  (similar a Hive en cierto modo) y la
facilidad para interactuar con múltiples sistemas de almacenamiento persistente.

Apache Spark: ¿Cómo funciona?


Apache Spark es un motor de procesamiento distribuido responsable de orquestar,
distribuir y monitorizar aplicaciones que constan de múltiples tareas de
procesamiento de datos sobre varias máquinas de trabajo, que forman un cluster.
Como ya hemos mencionado, es posible leer los datos desde diferentes
soluciones de almacenamiento persistente como Amazon S3 o Google Storage,
sistemas de almacenamiento distribuido como HDFS, sistemas key-value como
Apache Cassandra, o buses de mensajes como Kafka.

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

A pesar de ello, Spark no almacena datos en sí mismo, sino que tiene el foco


puesto en el procesamiento. Este es uno de los puntos que lo diferencian de
Hadoop, que incluye tanto un almacenamiento persistente (HDFS) como un
sistema de procesamiento (MapReduce) de un manera muy integrada.

Es importante hablar de la velocidad de procesamiento: la clave es la posibilidad


que ofrece Spark para realizar el procesamiento en memoria. Esto, y la extensión
del popular MapReduce para permitir de manera eficiente otros tipos de
operaciones: Queries interactivas y Procesamiento en Streaming.

Apache Spark: ¿Cuáles son sus funciones?


Respecto a su propósito general, la virtud de Spark es estar diseñado para cubrir
una amplia gama de cargas de trabajo que previamente requerían sistemas
distribuidos diferentes.

Éstos sistemas incluyen procesamiento batch, algoritmos iterativos, queries


interactivas, procesamiento streaming… a menudo empleados todos ellos en un
pipeline típico de análisis de datos.

Por último, hemos dicho que Spark es flexible en su utilización, y es que ofrece


una serie de APIs que permiten a usuarios con diferentes backgrounds poder
utilizarlo. Incluye APIs de Python, Java, Scala, SQL y R, con funciones integradas
y en general una performance razonablemente buena en todas ellas.
Permite trabajar con datos más o menos estructurados (RDDs, dataframes,
datasets) dependiendo de las necesidades y preferencias del usuario.

Además, como hemos ido viendo a lo largo del post, se integra de manera muy
cómoda con otras herramientas Big Data, en especial aquellas procedentes del
proyecto Apache.

En particular, como era de esperar, cabe destacar la integración con Hadoop:


Spark puede ejecutarse en clusters Hadoop y acceder a los datos almacenados en
HDFS y otras fuentes de datos de Hadoop (Cassandra, Hbase, Kafka…).

¿Quieres aprender las técnicas para desarrollar, analizar, gestionar y ejecutar


proyectos de Big Data? Fórmate con el Máster en Big Data Management de
ICEMD. Encuentra toda la información e inscripciones, aquí.

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

Aspectos clave de Apache Spark


Apache Spark es un framework de procesamiento open source distribuido para
Big Data. La característica principal es el uso que hace de las estructuras de datos
en memoria llamadas RDD, con lo que consigue aumentar el rendimiento frente a
herramientas como Hadoop considerablemente.

Spark fue desarrollado originalmente en la universidad de Berkeley y está escrito


en Scala. Debido a la popularidad que ha tenido, se han desarrollado librerías y
extensiones de la propuesta inicial. Estas han convertido a Spark en una
plataforma diversa, que puede manejar casi todas las cargas de trabajo: batch,
streaming, interactivas, grafos, etc.

 Procesamiento en memoria: Apache Spark es 100 veces más rápido en


memoria y 10 veces más rápido en disco que Hadoop MapReduce, para ello
necesita más recursos.
 Soporta múltiples lenguajes: Spark tiene APIs disponibles en los lenguajes
Java, Scala, Pythony R.
 Analítica avanzada: Para ello, soporta consultas SQL y su uso para
Machine Learning con librerías de data science como MLlib y GraphX.
 Abstracción RDD (Resilient Distributed Dataset): consiste en una colección
inmutable de elementos en memoria distribuída.
 Evaluación perezosa: Las transformaciones sobre los datos solo se
resuelven al ejecutar una acción sobre ellos.

Ecosiste
ma y componentes de Apache Spark

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

Ejemplos de código Apache Spark


El siguiente ejemplo está escrito en Scala. Es una aplicación spark básica de
tipo wordcount. Lee un fichero de texto, lo divide por palabras y cuenta las
ocurrencias de cada palabra.

val textFile = sc.textFile("/tables/internet_archive_scifi_v3.txt")

val counts = textFile.flatMap(line => line.split(" "))

.map(word => (word, 1))

.reduceByKey(_ + _)

counts.saveAsTextFile("/tables/wordcountresult")

El ejemplo a continuación realiza el cálculo de la estimación de pi de forma


paralela. Es una aplicación intensiva en cómputo.

var NUM_SAMPLES = 900000000

val count = sc.parallelize(1 to NUM_SAMPLES).filter { _ =>

val x = math.random

val y = math.random

x*x + y*y < 1

}.count()

println(s"Pi is roughly ${4.0 * count / NUM_SAMPLES}")

Spark Streaming
Spark Streaming extiende la funcionalidad de Spark para realizar procesamiento
de datos en streaming o en tiempo real. Funciona como un wrapper sobre Spark
batch, agrupando los datos recibidos en pequeños micro-batches, con lo que

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

consigue unos buenos tiempos de respuesta. Es compatible con Yarn como gestor


de trabajos en el clúster.
Proporciona dos tipos de operadores. El primer tipo son operadores que
transforman DStream en un DStream diferente, incluyen operadores con y sin
estado. El segundo tipo son operadores que se encargan de escribir los datos en
sistemas externos.
Para mantener una tolerancia a fallos, Spark Streaming usa checkpointing. De
esta manera, almacena el estado del sistema en instantes de tiempo para poder
recuperar la información en el caso de que ocurra algún error en el driver.
Los trabajos Spark Streaming añaden una pestaña a la interfaz web de Spark que
muestra las estadísticas y métricas de los registros procesados. Muestra gráficas
que indican el retraso de planificación, el tiempo de procesamiento, las colas, etc.
Spark SQL
Apache Spark está diseñado para soportar procesamiento de datos distribuidos
con un gran rendimiento, en múltiples casos de uso. Spark SQL, es un módulo de
Spark para procesar datos estructurados. Es compatible con muchas fuentes de
datos como Apache Hive, JDBC y formatos como Avro, Parquet, ORC y JSON.
También es muy eficiente para procesar datos semi-estructurados y está integrado
con Hive Metastore y bases de datos NoSQL como HBase. Spark SQL resulta
muy útil para incorporar consultas SQL en cargas de trabajo Spark. El caso de uso
más común es en Ingeniería de datos, en cargas de trabajo con consultas SQL
muy pesadas, que tardan en ejecutar pero no es necesaria una alta concurrencia.
Spark SQL está cobrando una importancia alta en el desarrollo de Spark y es que
es de las funcionalidades más demandadas, siendo SQL el lenguaje preferido en
tratamiento de datos. Las nuevas versiones de Spark como Spark 3.0 se acercan
cada vez más a la compatibilidad completa con el estándar ANSI SQL.

Glosario
 Avro: Es un proyecto de Apache que provee servicios de serialización. Cuando se
guardan datos en un archivo, el esquema que define ese archivo es guardado
dentro del mismo; de este modo, es más sencillo para cualquier aplicación leerlo
posteriormente, puesto que el esquema está definido dentro del archivo.
 Cassandra: Es una base de datos no relacional distribuida y basada en un modelo
de almacenamiento de, desarrollada en Java. Permite grandes volúmenes de
datos en forma distribuida. Twitter es una de las empresas que utiliza Cassandra
dentro de su plataforma.
 Chukwa: Diseñado para la colección y análisis a gran escala de "logs". Incluye un
toolkit (herramientas) para desplegar los resultados del análisis y monitoreo.
 Flume: Su tarea principal es dirigir los datos de una fuente hacia alguna otra
localidad; en este caso, hacia el ambiente de Hadoop. Existen tres entidades
principales: sources, decorators y sinks. Un source es básicamente cualquier
fuente de datos, sink es el destino de una operación en específico y un decorator
es una operación dentro del flujo de datos que transforma esa información de
alguna manera, como, por ejemplo, comprimir o descomprimir los datos o alguna
otra operación en particular sobre los mismos.
 HBase: Es una base de datos columnar (column-oriented database) que se
ejecuta en HDFS (Hadoop Distributed File System). HBase no soporta SQL, de
hecho, HBase no es una base de datos relacional. Cada tabla contiene filas y

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

columnas como una base de datos relacional. HBase permite que muchos
atributos sean agrupados llamándolos familias de columnas, de tal manera que los
elementos de una familia de columnas son almacenados en un solo conjunto. Eso
es distinto a las bases de datos relacionales orientadas a filas, donde todas las
columnas de una fila dada son almacenadas en conjunto. Facebook utiliza HBase
en su plataforma desde noviembre del 2010.
 Hive: Es una infraestructura de data warehouse que facilita administrar grandes
conjuntos de datos que se encuentran almacenados en un ambiente distribuido.
Hive tiene definido un lenguaje similar a SQL llamado Hive Query Language
(HQL), estas sentencias HQL son separadas por un servicio de Hive y son
enviadas a procesos MapReduce ejecutados en el clúster de Hadoop.
 Jaql: Fue donado por IBM a la comunidad de software libre. Query Language for
Javascript Object Notation (JSON) es un lenguaje funcional y declarativo que
permite la explotación de datos en formato JSON diseñado para procesar grandes
volúmenes de información. Para explotar el paralelismo, Jaql reescribe los queries
de alto nivel (cuando es necesario) en queries de "bajo nivel" para distribuirlos
como procesos MapReduce. Internamente, el motor de Jaql transforma el query en
procesos map para reducir el tiempo de desarrollo asociado en analizar los datos
en Hadoop. Jaql posee de una infraestructura flexible para administrar y analizar
datos semiestructurados como XML, archivos CSV, archivos planos, datos
relacionales, etc.
 Lucene: Es un proyecto de Apache bastante popular para realizar búsquedas
sobre textos. Lucene provee de librerías para indexación y búsqueda de texto. Ha
sido principalmente utilizado en la implementación de motores de búsqueda
(aunque hay que considerar que no tiene funciones de "crawling" ni análisis de
documentos HTML ya incorporadas). El concepto a nivel de arquitectura de
Lucene es simple, básicamente los documentos (document) son divididos en
campos de texto (fields), generándose un índice sobre estos campos de texto. La
indexación es el componente clave de Lucene, lo que le permite realizar
búsquedas rápidamente, independientemente del formato del archivo, ya sean
PDFs, documentos HTML, etc.
 Oozie: Existen varios procesos que son ejecutados en distintos momentos, los
cuales necesitan ser orquestados para satisfacer las necesidades de tan complejo
análisis de información. Además, es un proyecto de código abierto que simplifica
los flujos de trabajo y la coordinación entre cada uno de los procesos. Permite que
el usuario pueda definir acciones y las dependencias entre dichas acciones. Un
flujo de trabajo en Oozie es definido mediante un grafo acíclico llamado Directed
Acyclical Graph (DAG), y es acíclico puesto que no permite ciclos en el grafo; es
decir, solo hay un punto de entrada y de salida y todas las tareas y dependencias
parten del punto inicial al punto final sin puntos de retorno. Un ejemplo de un flujo
de trabajo en Oozie se representa de la siguiente manera:

Profesor Raúl Romero Castro


Tecnológico de Estudios Superiores de Chalco Ingeniería Informática

Figura 4. Flujo de trabajo en Oozie

 Pig: Inicialmente desarrollado por Yahoo para permitir a los usuarios de Hadoop
enfocarse más en analizar todos los conjuntos de datos y dedicar menos tiempo
en construir los programas MapReduce. Tal como su nombre lo indica, al igual que
cualquier cerdo que come cualquier cosa, el lenguaje PigLatinfue está diseñado
para manejar cualquier tipo de dato y Pig es el ambiente de ejecución donde estos
programas son ejecutados, de manera muy similar a la relación entre la máquina
virtual de Java (JVM) y una aplicación Java.
 ZooKeeper: Es otro proyecto de código abierto de Apache que provee de una
infraestructura centralizada y de servicios que pueden ser utilizados por
aplicaciones para asegurarse de que los procesos a través de un clúster sean
serializados o sincronizados. Internamente, en ZooKeeper una aplicación puede
crear un archivo que persiste en memoria en los servidores ZooKeeper llamado
znode. Este archivo znode puede ser actualizado por cualquier nodo en el clúster,
y cualquier nodo puede registrar que sea informado de los cambios ocurridos en
ese znode; es decir, un servidor puede ser configurado para "vigilar" un znode en
particular. De este modo, las aplicaciones pueden sincronizar sus procesos a
través de un clúster distribuido actualizando su estatus en cada znode, el cual
informará al resto del clúster sobre el estatus correspondiente de algún nodo en
específico.

Como podrá observar, más allá de Hadoop, una plataforma de Big Data consiste
de todo un ecosistema de proyectos que en conjunto permiten simplificar,
administrar, coordinar y analizar grandes volúmenes de información.

Referencias
1. https://spark.apache.org/

Profesor Raúl Romero Castro

También podría gustarte