HADOOP Y SPARK
Cerezo Jamil, Olaya Fabricio
Instituto de Informática, Universidad Técnica Estatal de Quevedo
Quevedo, Ecuador
[email protected] [email protected]Abstract El presente documento tiene como objetivo dar una pauta sobre Hadoop y apache Spark los framework para la
computación paralela, mencionar su estructura de manera general, sus componentes y además realizar una revisión
bibliográfica de la comparación de sus principales características.
I. APLICACIONES DISTRIBUIDAS.
En la era de la tecnología, donde la cantidad de datos que se generan a diario sigue creciendo, se
vuelve un verdadero reto poder procesar, analizar y obtener información de la inmensa cantidad de los
mismos (big data[1]), para ello surgieron arquitecturas y herramientas dedicadas al manejo de grande
volúmenes de datos, lo que buscan las nuevas tecnología es distribuir la carga de procesamiento y
almacenamiento en un sistema distribuidos con topología CLUSTER1.
El uso de sistemas distribuidos en la actualidad tiende a ser explotado por la cantidad de datos que
las grandes empresas y organizaciones maneja, como por ejemplo FACEBOOK, AMAZON y entre otras,
almacenan datos en el orden de los petabyte2, debido a que los datos procesados producen información que
luego ayuda a la toma de decisiones, esto genera la discusión de las herramientas idóneas para el
procesamiento de grandes cantidades de datos.[2].Las herramientas propietarias se consideran más robustas
y mejores que las de código abierto, pero estas son costosas, por ello las empresas optan por las de libre
distribución[3], entre las más utilizadas por considerarse la mejor opción tenemos Apache Spark[2]. y Apache
Hadoop[4], que presentan características idóneas para el almacenamiento y procesamiento de grandes
cantidades de datos de forma distribuida y paralela.
En el siguiente documento en el capítulo II se presentara la arquitectura de Hadoop, los componentes core
como el sistema de archivo HDFS (Hadoop Distributed File System), el YARN (Yet Another Resource
Negotiato) “otro negociador de recursos”, el algoritmos MapReduce3 y se mostrara la instalación y
configuración de un nodo del sistema cluster en un Ubuntu distribución 18.4 usando Apache HADOOP.
En el capítulo III se presentara la arquitectura del sistema distribuido Apache Spark, sus componentes cores
como: “Nodo trabajador”, “Gestor de cluster” y los driver Spark, se presentara su instalación y configuración
en Windows 8.1 y se presentara la ejecución del algoritmo map reducer. En el capítulo IV se presentara una
comparación entre las dos tecnologías y en el capítulo V se presentaran las conclusiones del trabajo realizado.
II. HADOOP
Hadoop es un framework que permite almacenar, procesar y analizar grandes volúmenes de datos a través
de un clúster de servidores llamados nodos, es de código abierto multiplataforma bajo la licencia GPL[5]. El
núcleo de su arquitectura está compuesto por tres elementos principales: el almacenamiento que está
implementado en el sistema de archivos HDFS, el sistema de administración de cluster denominado YARN
1 Conjunto de ordenadores que están interconectado para la compartición de recurso tanto hardware
como software.
2
Unidad de medida de almacenamiento, 1 petabyte = 1.000.000.000.000.000 bytes.
3
Algoritmo usado para la búsqueda de datos masivos ubicados de forma distribuida y replicados.
y el sistema de procesamiento que usa el algoritmo MapReduce constituyendo el core4 de Hadoop
garantizando su funcionamiento como se indica en la ilustración 1.[4]
En cuanto al “ecosistema”, para Hadoop existen aplicaciones al nivel de usuario que permiten utilizar
el core de manera más amigable como: Hive, Pig, Spark, Cascadin, R, y entre otros, permitiendo consumir
la tecnología HDFS y MapReduce en un entorno más amigable para los analistas de datos[4] como se
identifica en la Ilustración 1.
Entre las principales características a mencionar de Hadoop se encuentra la escalabilidad, flexibilidad
y la tolerancia a fallos, dado el sistema de ficheros distribuidos que pose, el cuál es capaz de distribuir la
información entre varios servidores y ejecutar procesos en paralelo disminuyendo la carga entre servidores
dividiendo el tiempo de ejecución, la relación directa del tiempo de ejecución con se disminuye con una
cantidad mayor de servidores y aumenta con la complejidad de cálculos de los proceso.[4].
Ilustración 1 Arquitectura HADOOP
2.1 HDFS
HDFS es un sistema de archivos, aunque no es compatible con POSIX5, significa que no muestra las
mismas características que la de un sistema de archivos normal[4], el funcionamiento del sistema de archivo
cuenta con diferentes características y su funcionamiento consiste en replicar la información entre los
diferentes Datanodes6 con el fin de garantizar el correcto funcionamiento del sistema en caso que un nodo
falle, para garantizar la integridad de los datos dada la continua redundancia de datos que existe el sistema
HDFS utiliza un sistema de almacenamiento de metadatos en los que se conservara el identificador del
archivo almacenado y su fichero de destino en una estructura denominada Namenode como se muestra en
Ilustración 2.
Las características HDFS son las siguientes [4]:
Almacena los archivos en bloques que normalmente tienen al menos 64 MB y un máximo de 128 MB
de tamaño, cantidad mayor que los 4-32 KB en los sistemas de archivos comunes[4].
Está optimizado para el rendimiento sobre la latencia; Es muy eficiente en lecturas en tiempo real pero
no es el más rápido- Ágil en la búsqueda de archivos grandes pero lentos cuando se buscan muchos
pequeños[4].
HDFS está optimizado para ejecutar trabajos de lectura (se escriben una vez y se leen muchos)[4].
4 Núcleo.
5
Sistema de archivos usado en el SO Unix.
6
Directorios en el sistema de archivo HDFS
Sistema de replicación de archivo, al detectar un nodo que no funciona no invierte recursos en repararlo
si no replica la información a los nodos adyacentes permitiendo que el servicio nunca se colapse.[4].
Ilustración 2 Arquitectura HDFS
2.2 MapReduce
MapReduce es una algoritmo, un motor de ejecución y un paradigma de procesamiento que proporciona
una serie de transformaciones a un conjunto de datos en el que se analizan los datos en su totalidad
mapeándolos7 y se obtiene un extracto del mapeo que permite describir la totalidad de los datos.[2].
MapReduce funciona mejor en datos semiestructurados o no estructurados, no adaptándose a los vínculos de
relaciones del modelo relacional porque bloquean el mapeo de los datos por las dependencias entre
registros.[6]. Funciona como una serie de pares clave-valor. La salida de la función de mapa es un conjunto
de otros pares clave-valor, y la función de reducción realiza la agregación para recopilar el conjunto final de
resultados[4], como se identifica en la Ilustración 3.
Ilustración 3 Funcionamiento MapReduce
2.3 YARN
YARN se introdujo en Hadoop 2 para mejorar la implementación de MapReduce, es lo suficientemente
general para soportar otros paradigmas de computación distribuida[4]. El principio básico del YARN es
dividir las funcionalidades del administrador de recursos con y la programación creando deamon8 que
7
Se identifican los identificadores únicos de los registro y se almacenan en una variable o tabla temporal.
8
Demonio, un pequeño programa que se ejecuta en segundo plano
trabajan de forma separadas. ÝARM implementa el RM9 (Resource Manager) y AM (Application Master),
que son los encargados de controlar los cálculos y los recursos que dispone[4]. El funcionamiento del YARN
se indica en la Ilustración 4, en el que se muestra el intercambio de recursos en los diferentes nodos
distribuidos del sistema HADOOP.
Ilustración 4 Arquitectura del YARN
2.4 RHadoop
Otra tecnología implementada en el análisis de datos es Rstatistic, que posee una vasta cantidad de
librerías dedicadas a la estadística y al big Data, entre ellas existe RHADOOP que permite acoplar la
herramienta de análisis R con el sistema de archivos HDFS y el algoritmo Map reduce.
Ilustración 5 core de RHADOOP
Rhadoop es una colección de cinco paquetes de R que permiten a los usuarios administrar y analizar
conjuntos de datos con la tecnología de Hadoop[7], como se indica en Ilustración 5.
Rhdfs.- Conexión básica al sistema de archivos dis tribuidos de Hadooop. Se debe instalar el paquete
solo en el nodo que ejecutará el cliente de R. [7]
Plyrmr.- Manipulación de datos. Se instala en todos los nodos del cluster. [7]
Rmr2.- Ejecuta funcionalidades del MapReducer de Hadoop. Se debe instalar en cada nodo del
cluster. [7]
Ravro.- Permite leer y escribir archivos avro desde el sistema de archivos local y HDFS, además
agrega un formato de entrada avro para rmr2. Instalar este paquete solo en e nodo que ejecutará el
cliente R.[7]
9
se encarga de administrar los recursos del sistema.
Rhbase.- Proporciona conectividad básica a la base de datos distribuida HBASE, utilizando el
servidor Thrift, permite explorar, leer, escribir y modificar las tablas almacenadas en HBASE desde
R. Instala el paquete solo en el nodo que ejecutará el cliente de R.[7].
2.5 Instalación y configuración de un nodo con Apache hadoop en Ubuntu 18.0.4
La instalación y configuración de un nodo para el sistema distribuido Apache Hadoop se realizó en Ubuntu
18.0.4 en una partición de 80 Gb en un disco duro de 640Gb, también puede ser instalado como SO virtual
usando herramientas como Virtual box. Hadoop trabaja con Java por lo tanto se procede a verificar si se tiene
instalado el JDK y el JDE en la terminal con el comando
Java –versión
En caso no estén instalado se procede a ejecutar los siguientes comandos:
sudo apt-get install default-JRE
sudo apt-get install default-JDK
Después que se tiene instalado correctamente el JDK y el JRE se procede a crear un usuario para apacha
hadoop que denominaremos “hadoopusr” y un grupo de usuario denominado “hadoop” con el que se podrá
acceder al sistema de archivos HDFS y al algoritmo MapReduce. Se deben ejecutar las siguientes líneas de
comando:
sudo addgroup hadoop
sudo addusr --ingroup hadoop hadoopusr
sudo adduser hadoopusr sudo
Una vez creado el usuario y el grupo se procede a intalar OpenSSH que permite la comunicación entre
nodos de hadoop con el siguiente comando:
sudo apt-get install openssh-server
Después de la instalación del servidor openSSH procedemos a loguearnos con el usuario que se creó
anteriormente con la línea de comando:
su -hadoopusr
Se procede a generar una clave pública para el usuario “hadoopusr” con la siguiente línea de comando:
ssh-keygen -t RSA -P ""
Una vez generada la clave se procede a incluirla en la lista de llaves autorizadas “autorized_key” con la
siguiente línea de comando:
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/autorized_keysssh
Se utiliza el siguiente comando para verificar que la configuración se ejecutó con éxito como se presenta en
Ilustración 6:
ssh localhost
Ilustración 6
En caso que la configuración no se ejecutó con éxito no se mostrará la cantidad de packages y se mostrara
un herror de conexión.
Cuando se tenga configurado el usuario y el SSH con java instalado procedemos a la instalación de Apache
Hadoop y configuración de un nodo, se procede a descargar el archivo comprimido de Apache Hadoop con
la siguiente línea de comando:
sudo wget -P /home/robot-master/Desktop http://mirrors.sonic.net/apache/hadoop/common/hadoop-
2.9.1/hadoop-2.9.1.tar.gz
Se descomprime el archivo con el comando:
sudo tar xvzf hadoop-2.9.1.tar.gz
Una vez extraído la carpeta del archivo compreso se procede a mover la carpeta extraída en la dirección
usr/local/hadoop con el siguiente comando:
sudo mv hadoop-2.9.1/usr/local/hadoop
Se procede a darle todo los permisos del directorio al usuario “hadoopusr” con la siguiente línea de
comando:
sudo chown -R hadoopusr /usr/local
Una vez descomprimido y ubicado las carpetas de Apache Hadoop se procede hacer las configuraciones de
las variables locales colocando los PATH necesarios para su correcto funcionamiento por lo tanto se
procede a configurar el archivo bashrc con la siguiente línea de código:
gedit ~/.bashrc
Y procedemos a exportar los siguientes PATH y variables de sistema como indica en la Ilustración 7.
Ilustración 7
Agregando las siguientes líneas:
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_INTALL/lib/native
export HADOOP_OPTS=""
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
Una vez configurado el archivo bashrc se procede a configurar el archivo env-sh ubicándonos en el directorio
que lo contiene con las siguientes líneas de comando:
cd /usr/local/hadoop/etc/hadoop/
gedit hadoop-env.sh
Se procede a indicarle con que versión del JDK estamos trabajando agregándole el PATH que contiene la
ruta en donde se encuentra instalado el JDK agregándole la línea como muestra en la Ilustración 8:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
(Notar bien la versión del jdk que se tiene instalar y modificar a conveniencia, en nuestro caso se tiene
instalada la versión 11)
Ilustración 8
Luego de agregar el PATH del JDK se procede a configurando el archivo XML core-site.xml con la línea
de comando:
sudo gedit core-site.xml
Agregándole las siguientes líneas como indica la Ilustración 9:
Ilustración 9
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
Se configura el archivo xml del sistema de archivos HDFS con la siguiente línea de comando:
sudo gedit hdfs-site.xml
Abierto el archivo se procede agregar las siguientes líneas de configuración como muestra la Ilustración
10:
Ilustración 10
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop_tmp/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop_tmp/hdfs/datanode</value>
</property>
</configuration>
En las que se les especifica las rutas del datanode y namenode en el que se van almacenar los archivos en
el formato hdfs, luedo de establecer las rutas se procede en configurar el YARN que se encarga de
controlar los recursos y distribuir los procesos, para su configuración se ejecuta la siguiente línea de
comando:
sudo gedit yarn-site.xml
Como se muestra en la Ilustración 11 agregando las etiquetas con sus respectivas propiedades:
Ilustración 11
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
Luego de configurar el YARN procedemos a cambiar el nombre del archivo que contiene las
configuraciones del último elemento core del sistema HADOOP el MapReduce, se efectúa el cambio de
nombre de mapred-site.xml.template a mapred-site.xml con la siguiente línea de comando:
sudo cp /usr/local/hadoop/etc/hadoop/mapred-site.xml.template
/usr/local/hadoop/etc/hadoop/mapred-site.xml
Luego se procede a modificar el archivo mapred-site.xml con la siguiente línea de comando:
sudo gedit mapred-site.xml
Y se agrega las etiquetas y propiedades como muestra la Ilustración 12 .
Ilustración 12
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>
</property>
</configuration>
Una vez configurado el core (HDFS,YARN y MapReduce) se procede en crear los directorio NameNode y
Data node con las siguientes líneas de comando:
sudo mkdir -p /usr/local/hadoop_space/hdfs/namenode
sudo mkdir -p /usr/local/hadoop_space/hdfs/datanode
Servirán como referencia para el almacenamiento en el sistema de archivo HDFS, se procede en darleel
control del directorio hadoop_space al usuario hadoopusr con la línea de comando:
sudo chown -R hadoopusr /usr/local/hadoop_space
Se procede a formatear el Namenode de tal forma que permita los archivos en HDFS con el comando:
hdfs namenode –format
Una vez formateado el Namenode se procede a ejecutar los servicios con las siguientes líneas de
comando:
start-dfs.sh
start-yarn.sh
Para verificar si el nodo fue creado con éxito y está funcionando correctamente se procede en abrir un
navegador y se escribe la siguiente dirección:
localhost:8088/cluster
El que nos abrirá la ventana con las propiedades del nodo configurado tales con su identificador, la
capacidad de almacenamiento y el cluster como indican las Ilustración 13 e Ilustración 14.
Ilustración 13 About the Cluster
Ilustración 14 Node of the cluster
III. Spark
Es un framework de código abierto para el procesamiento de grandes volúmenes de datos con el pensamiento
de tener como características principales como son: velocidad, facilidad de uso y capacidad avanzada de
análisis de datos, Spark puede trabajar conjuntamente con Hadoop pero esto no es indispensable. Estos dos
tienen funcionalidades similares como son interactivos y el procesamiento de datos en tiempo real. Las
aplicaciones para Spark se ejecutan como procesos independientes coordinados a través del objeto
SparkContext. Más específicamente, SparkContext10 se conecta a los gestores del clúster para asignar los
recursos del sistema necesarios para su ejecución. Conectados los nodos Spark se encargan de crear los
ejecutores (executors) en cada uno de ellos para ir realizando las operaciones de cómputo en el clúster.[2]
10
Es contexto básico en donde se instancias las variables.
Ilustración 15 Spark core
A continuación se explica brevemente los elementos del SparkCore que se muestra en Ilustración 15.
SparkContext: Se trata del contexto básico de Spark, desde donde se crean el resto de variables que
maneja el framework. Solo un SparkConext puede estar activo en todo el clúster[2]. Gestor de Clúster: Se
encarga de asignar recursos en el sistema, spark soporta tres tipos de clúster: Standalone (viene incluido en
spark, es un gestor muy sencillo), Apache Mesos (gestor más avanzado, que puede ejecutar Hadoop,
MapReduce y aplicaciones de servicio) y Hadoop YARN (gestor de recursos en Hadoop).
El eco sistema de Spark está compuesto por los siguientes elementos como se indica en la Ilustración 16.
Ejecutor11
RDD12
Spark Core13
Entre sus principales características se encuentra la tolerancia a fallos con bajo coste, se mantiene un estado
anterior a la pérdida de información[6].
11
son los encargados de ejecutar tareas (Task) en los nodos del clúster.
12
Por sus siglas en inglés Resilient Distributed Datasets (Conjuntos distribuidos y flexibles de datos). Representan una
colección inmutable y particionada, cuyos elementos se los puede operar paralelamente[6].
13
Posee todas las características básicas de Spark como las tareas de programación, gestión de memoria, tolerancia a
fallos, interacción con sistemas de almacenamiento y también contiene el API que define los RDD (principal
abstracción de la programación de Spark)[6].
Ilustración 16 Ecosistema de Apache Spark
A continuación se describirán a breves rasgos algunos de los elementos de Apache Spark como se
muestra en la Ilustración 16. Spark Streaming: Se utiliza para el procesamiento de datos en tiempo real con
alta escalabilidad, tolerancia a fallos y un rendimiento eficiente. Los datos pueden ser tomados de diversas
fuentes como sockets TCP, y ser procesados usando algoritmos complejos[8].
MLlib14
Spark SQL15
Graphx16
SparkR17
Clúster Manager: Spark está diseñado para ser fácilmente escalable para que pueda pasar desde unos
cuantos nodos a miles de nodos, los clúster managers maximizan la flexibilidad con la que se agregan o
quitan los nodos según sea el caso.[6]
Instalación.
Descargar e Instalar JDK (Java Development Kit) desde la página oficial de ORACLE como se
muestra en la Ilustración 17 (https://www.oracle.com/technetwork/java/javase/downloads/jdk8-
downloads-2133151.html). Como se indica en la Ilustración 17.
14
Es una biblioteca de funciones de machine learning de Spark diseñada para funcionar en paralelo, posee una gran
cantidad de algoritmos de aprendizaje y es accesible desde todos los lenguajes de programación que soporta Spark[9].
15
Es la interfaz que proporciona Spark para trabajar con tipos de datos que están estructurados como bases de datos[9].
16
: Es una biblioteca de Spark que sirve para la computación de grafos en paralelo[6].
17
Es un paquete de R que proporciona una interfaz ligera para usar Apache Spark de R.[9].
Ilustración 17 Página de descarga de jdk
En este caso se utilizó el JDK para Windows 10 de bits
Descargar e instalar win.utils (https://es.osdn.net/projects/win-hadoop/downloads/62852/hadoop-
winutils-2.6.0.zip).
Descargar e instalar Apache Spark desde su página oficial así como se muestra en la Ilustración 18,
de preferencia la versión compatible con Hadoop, pre-built
(https://spark.apache.org/downloads.html).
Ilustración 18 Página de descarga de Apache Spark
Declarar en la variable PATH, variables de entorno para el JDK, win.utils, Apache Spark, en la
Ilustración 19 se puede observar encerradas en un recuadro rojo las variables de entorno creadas. .
Ilustración 19 Ventana de variables de entorno
Para la instanciación de Spark, debe de hacerse mediante un lenguaje de programación, entre los más
comunes se encuentra Scala, Python y Java.
Video tutorial que se utilizó para la descarga, instalación y preparación del entorno de Apache Spark, para la
realización de los ejemplos en este documento.
https://www.youtube.com/watch?v=WlE7RNdtfwE&t=635s
Uso de Spark en Scala.
Para la instalación de Scala se puede utilizar el video tutorial mencionado en la instalación de Apache Spark
en el apartado anterior, ahí se menciona al final, la descarga, instalación y primer uso de Spark en Scala,
Los ejemplos realizados en Scala con el core de Spark son los siguientes:
Scala es un lenguaje de programación para el tratamiento de archivos, para realizar cualquier operación,
primero se debe cargar un archivo a la memoria:
Cargar archivo en escala mediante ruta.
---------------------------------------
val textFile = spark.sparkContext.textFile("ruta/del/fichero.txt")
Contar ocurrencias de cada palabra en un txt (Ilustración 20).
---------------------------------------------
val counts = textFile.flatMap(line => line.split(" ")).map(word => (word,
1)).reduceByKey(_ + _)
counts.collect.foreach(println _)
Ilustración 20 Spark Shell: código para contar ocurrencias de cada palabra en el documento.
Encontrar palabras con mayor ocurrencia en un txt como indica la Ilustración 20.
--------------------------------------------------
val counts = textFile.flatMap(line => line.split(" ")).map(word => (word,
1)).reduceByKey(_ + _).map(item => item.swap).sortByKey(false).take(10)
counts.foreach(println _)
Ilustración 21 Spark Shell: código para seleccionar las primeras 10 palabras con más ocurrencias
Crear Datasets como se indica en la Ilustración 22
--------------------------------------------------
import spark.implicits._
case class Persona(nombre: String, apellido: String, edad: Integer, salario:
Integer)
val persona1 = Persona("Jamil","Cerezo",23,24000)
val persona2 = Persona("Fabricio","Olaya",26,27000)
val persona3 = Persona("Randy","Rodriguez",20,31000)
val persona4 = Persona("Edison","Vicente",24,34000)
val data = Seq(persona1,persona2,persona3,persona4)
val ds = spark.createDataset(data)
ds.show()
Ilustración 22 Spark Shell: código para creación de Dataset en Spark
IV. Comparación entre principales características de Hadoop y Spark.
Tabla 1 Comparación entre Hadooop y Spark
Criterio Hadoop Spark
Hadoop MapReduce mata cada Mediante el procesamiento de datos en la
Rendimiento proceso una vez que una tarea se ha memoria Spark reduce la latencia casi a 0,
completado, lo que hace más delgado pero puede ser extremadamente exigente
y más eficaz para funcionar junto con en términos de memoria, ya que almacena
otros servicios de recursos exigentes en caché los procesos.
MapReduce utiliza cantidades de El espacio de disco es de menor costo y
memoria habituales en los servidores como Spark no utiliza el Input/Output de
Costo porque trabaja en discos. También disco para procesar, el espacio de disco
requiere mayor cantidad de sistemas utilizado puede ser bien aprovechado
para poder distribuir la actividad de tanto en esquemas SAN (Storage Area
Input/Output de disco en múltiples Networks) como NAS (Network Attached
sistemas. Storage).
Cuenta con API de JAVA, requiere Viene empaquetado con APIs para Java,
integrarse con otras herramientas para Python y Spark SQL. Esto ayuda a los
escribir programas en otros lenguajes usuarios a codificar en sus idiomas más
APIs de programación. familiares, y el modo interactivo de Spark
puede ayudar a los desarrolladores y
usuarios obtener retroalimentación
inmediata para las consultas.
MapReduce utiliza TaskTrackers que Spark utiliza RDDs que son colecciones
le suministran “latidos” al módulo de elementos, estos puede ser persistentes
JobTracker. Si un latido se pierde, el y guardar un conjunto de datos en cache
JobTracker reprograma todas las durante las operaciones. Esto permite que
Tolerancia a fallos operaciones pendientes y en ejecución las futuras acciones sean mucho más
para otro TaskTracker. Este método es fáciles. El caché de Spark es tolerante a
efectivo para lograr tolerancia ante fallos en cuanto si alguna partición o
fallas pero puede incrementar RDD se pierde, automáticamente será
notablemente los tiempos de reprocesada utilizando las
ejecución de operaciones que han transformaciones originales.
sufrido aunque sea una falla.
Hadoop soporta autenticación Actualmente sólo soporta autenticación
Kerberos, que es algo difícil de vía passwords. Si se corre Spark sobre
administrar. Hadoop Distributed File HDFS, se pueden usar los permisos
System soporta ACL (Access Control HDFS ACL y a nivel de archivo. Además,
Seguridad Lists) y el modelo tradicional de Spark puede utilizar a YARN para
permisos de acceso a archivos. Para el alcanzar la capacidad de utilizar
control de usuarios y lanzamiento de autenticación Kerberos.
procesos, Hadoop cuenta con Service
Level Authorization, que asegura que
los clientes tengan los permisos
correctos.
Hadoop acepta la mayoría de grandes Spark puede integrarse con todas las
Fuentes de datos fuentes de datos en distintos formatos fuentes de datos y formatos de archivo
como json, sql entre otros. que son compatibles con Hadoop.
Hadoop cuenta con su propio sistema No cuenta con su propio sistema de
Sistema de archivos de archivos llamado HDFS. archivos.
Criterio Hadoop Spark
La gestión de memoria es El manejo de memoria en Spark es
Manejo de memoria configurable a partir de archivos automático.
propios de Hadoop.
MapReduce y Spark son compatibles
Acepta Spark como parte de su entre sí y Spark comparte toda la
Compatibilidad entre ecosistema. compatibilidad de MapReduce con las
herramientas fuentes de datos, Formatos y herramientas
de inteligencia de negocios a través de
JDBC y ODBC.
Todas las herramientas de BI como Todas las herramientas de BI como
Visualización JasperSoft, SAP Business Objects, JasperSoft, SAP Business Objects,
Qlikview, Tableu, Zoom Data, etc. Qlikview, Tableu, Zoom Data, etc. han
han proporcionado conectividad con proporcionado conectividad con Spark.
Visualización hadoop y su ecosistema. Spark también se puede integrar a
Apache.
Proporciona análisis de datos, Ingestión,
así como descubrimiento, visualización y
colaboración.
En un trabajo de titulación realizado por un estudiante de la Universidad Central del Ecuador[5], luego de
realizar varios experimentos con un nodo maestro, cuatro nodos esclavos y diferentes escenarios (contar
aleatorios, contar palabras, ejecución de consulta SQL) se determinó que mientras más recursos se aumenten
en los nodos, la velocidad de Spark supera ampliamente a la de Hadoop, demostrando que el procesamiento
en memoria es mucho más eficiente que el procesamiento en disco de Hadoop, siempre y cuando se cuente
con los recursos necesarios de acuerdo a los resultados una buena opción es contar con al menos siete
gigabytes de RAM por nodo [5].
CONCLUSIÓN
El consumo de recursos y el tiempo de ejecución de las aplicaciones para ambas tecnologías dependerá
del tipo de aplicación que se realice y el tamaño del archivo con el que se trabaje, operaciones como
contar palabras demandará más cantidades de recursos y tardará más que operaciones más sencillas como
consultas SQL.
Hadoop está optimizado para trabajar con pocos recurso dada su arquitectura y el hecho que almacena la
información en el disco duro, a diferencia de spark que usa la ram para distribuir la información en los
diferentes nodos y procesarla de tal forma que necesita equipos con mayor capacidad de cómputo para
ejecutar sus procesos.
Spark tiene ventaja al contar con varios APIS de lenguajes de programación, así como contar con
streaming, algo que Hadoop no puede hacer por sí solo ya que necesita de herramientas adicionales.
BIBLIOGRAFÍA
[1] B. Schmarzo, Big Data: el poder de los datos. Anaya multimedia, 2014.
[2] A. G. Shoro and S. T. Rahim, “Big Data Analysis: Apache Spark Perspective,” Glob. J. Comput. Sci.
Technol., vol. 15, no. 1, 2015.
[3] stratebi, “Stratebi Open Business Intlligence.” 2019.
[4] W. Tom, Hadoop: The Definitive Guide Storage and analysis at internet scale. 2015.
[5] M. Garcia, “Universidad Central del Ecuador Facultad de Odontologia,” pp. 1–98, 2017.
[6] J. Shanahan and L. Dai, “Large Scale Distributed Data Science from scratch using Apache Spark 2.0,”
pp. 955–957, 2018.
[7] GitHub, “RHadoop.” [Online]. Available: https://github.com/RevolutionAnalytics/RHadoop/wiki.
[8] R. Molina and W. Hasperué, “D3CAS: un Algoritmo de Clustering para el Procesamiento de Flujos
de Datos en Spark,” pp. 452–461, 2018.
[9] X. Meng et al., “MLlib: Machine Learning in Apache Spark,” vol. 17, pp. 1–7, 2015.