Documentos de Académico
Documentos de Profesional
Documentos de Cultura
En esta ocasión vamos a explicar todo lo relacionado a tecnologías e infraestructuras Big Data, donde
vamos a entrar en el ecosistema Hadoop, y en todas las soluciones y componentes incorporados dentro
de este tipo de soluciones.
Uno de los primeros conceptos es el concepto de sistemas distribuidos. ¿Y qué es un sistema distribuido?
Un sistema distribuido está compuesto por n máquinas que dependiendo de la necesidad de las
aplicaciones que vayan a ejecutarse, se colocan unas u otras máquinas. Los sistemas distribuidos tienen
la característica de que son nodos independientes que están intercomunicados por la misma red, de
tal manera que, aunque cada máquina tiene su sistema operativo, por encima de ese sistema operativo
se tiene un software que se denomina middleware que permite intercomunicar y saber el estado de cada
una de las máquinas.
De esa manera, el sistema operativo hace su trabajo, pero las máquinas están comunicadas entre sí
mediante el middleware para poder transferir información, transferir procesos o cualquier otra orden que
sea necesaria.
Por encima del middleware se ejecutan las aplicaciones en una o n máquinas, dependiendo de la
necesidad. Es importante destacar que, de cara al usuario que está entrando al sistema distribuido, la
visión que tiene ese usuario es de una sola máquina, a pesar de que internamente tenga varias máquinas.
Se tiene que tener en cuenta que un sistema distribuido es un sistema complejo, es un sistema en donde
hay que tener en cuenta conceptos como replicación de datos, así como accesibilidad. Si uno de los
nodos (máquinas) deja de funcionar, es importante que el sistema siga funcionando. E incluso
escalabilidad. Es muy importante que, si el número de máquinas es insuficiente para las aplicaciones
que se están ejecutando, se permita de alguna manera escalar y ampliar el número de máquinas sin que
ello conlleve a la parada del resto de máquinas o a la incapacidad de poder responder por parte del
usuario.
El siguiente concepto a tener en cuenta es el de
las 5Vs. Si bien la literatura a veces habla de las
cuatro o de las tres V, en nuestro caso queremos
hablar de las 5 Vs por la importancia de cada una
de ellas. Vamos a destacar cada una de las cinco
de manera muy breve.
El volumen, que es cantidad de datos que se
están obteniendo en plataformas Big Data.
La velocidad, en la que se están generando esos
datos.
personales, para lo que sea. Por lo tanto, el valor
es otro carácter muy importante.
La variedad, porque vamos a poder almacenar datos de distintos tipos, texto, imágenes, videos, audios,
cualquier tipo de número.
La veracidad, es algo muy interesante, porque los datos no tienen por qué están 100% seguros, pueden
ser opiniones, pueden ser datos que no están 100% seguros, puede haber anomalías, puede haber
outlaiers.
El valor, porque es muy importante saber que detrás de todo esto que estamos haciendo lo que intentamos
obtener es valor para nuestro negocio, para nuestros intereses.
En el ejemplo que vamos a poner, la idea es intentar contar el número de palabras. Imagina que tenemos
un conjunto de millones y millones y millones de palabras. Es muy costoso contar esas palabras. Pues el
concepto de Map Reduce lo que nos va a ayudar es a contar esas palabras de una manera muy sencilla.
Primero que todo, dividimos por frases. Por filas. Vamos a contabilizar, vamos a hacer un map que lo que
hace básicamente es preparar las palabras de manera individual y contabilizar esas palabras. Vamos a
agregar y vamos a juntar todas las palabras que son iguales. Y luego hacemos un reduce que lo que hace
es sumar, en este caso. Agregamos una información y devolvemos la suma de todas las palabras. Y ahí
un problema que es muy complejo, el simplificarlo lo máximo posible para obtener al final el resultado
que queríamos en un tiempo razonable. ¿Por qué? Porque hemos divido el problema en pequeños
subproblemas. Y esos problemas los hemos paralelizado, hemos contabilizado de manera paralela. Si bien
unimos los conceptos que estamos hablando, sistemas distribuidos y Map Reduce, podemos empezar a
intuir por dónde va el mundo de Big Data.
EL DATA LAKE
¿dónde guardamos los datos?, ¿quién puede acceder a esos datos?, ¿quién puede almacenar los datos?,
¿quién puede modificar esos datos?, ¿cuándo podremos acceder a ellos?, ¿en algún momento, esos datos
modificados van a permitir de alguna manera poder llegar a los datos originales?
Todas esas preguntas requieren una respuesta y es ahí cuando se creó el concepto del Data Lake.
ECOSISTEMA HADOOP
También tenemos la filosofía de almacenamiento replicado, lo que supone que, si más de una máquina
falla, la accesibilidad al dato nos lo da 100% seguro. Dependiendo de cuál sea el nivel de replicación,
tendremos que indicar el número de máquinas de la infraestructura Big Data. Esos chunks que están
divididos, en realidad, la forma de acceder a ellos es de igual manera que una filosofía MapReduce. Yo leo
de manera paralela cada uno de los chunks y obtengo los chunks, los uno y creo el fichero final, que es
lo que nos tenemos como objetivo.
Frente a Hive, tenemos soluciones como Accumulo, una situación que también es compatible con
Cloudera y con Hortonworks. Podemos observar cómo en la diapositiva indico una C o una H, que lo que
quiere decir es si es compatible o no es compatible, y si se da soporte o no en cada una de las dos
distribuciones más importantes, cuando pone C solamente o H solamente, es que solo dan soporte en ese
tipo de distribuciones. Accumulo en este caso es una solución tan potente como Hive, pero menos usada
que Hive, que ofrece también acceso de una manera sencilla a los datos sin necesidad de tener muchos
conocimientos en los sistemas distribuidos.
Frente a Accumulo o Hive, ofrecemos soluciones no SQL, HBase es una solución no SQL que viene incluso
previa a la creación de Hive, que lo que permite es almacenar los datos de una manera sencilla como
clave-valor. No tiene ninguna complicación, yo almaceno con una clave un determinado valor, y ese valor
puede tener la forma que queramos, un dato, una imagen, un vídeo, lo que queramos.
HCatalog es básicamente un catálogo que nos permite controlar todas las bases de datos de una manera
unificada. Es muy potente porque nos permite acceder de una manera muy sencilla a distintos sistemas
o aplicaciones de almacenamiento de base de datos distribuidas como puede ser Hive y HBase a la vez, y
HAWQ, HAWQ es una solución pivotal, de ahí viene la P, entre paréntesis, es una solución muy parecida
a Hive, pero con un pequeño detalle, y es que tiene la posibilidad de poder ejecutar en memoria. Es muy
parecido a lo que vamos a ver más adelante, que se llama Impala, una solución de Cloudera. También
otro potencial de HAWQ en este caso, es que nos permite ejecutar código DR dentro de la propia consulta
SQL, a lo cual nos permite generar incluso analítica a la vez que acceso al dato.
Por otro lado, la solución MongoDB, que la utilizan muchas aplicaciones web, soluciones basadas en
almacenamiento de datos por documentos o JSON, una solución que, si bien la escalabilidad no es muy
buena, en realidad MongoDB ha sido muy usado y es muy famoso.
Soluciones tipo REDIS de clave-valor, donde lo más importante de REDIS es el rendimiento y la rapidez
en la que se obtiene un dato. En muchas ocasiones se utiliza REDIS como base de datos tipo caché, ¿qué
quiere decir eso? Para no tener que acceder continuamente a un dato que estamos accediendo, lo más
fácil es coger ese dato, llevarlo a una solución tipo REDIS, y tenerlo en REDIS para que el acceso al dato
sea lo más rápido posible, no tener que consultar sobre la base de datos original, que pueda ser un Hive,
sino que directamente podamos consultar sobre esa REDIS y obtener unos tiempos de respuesta muy
rápidos.
Neo4J. Neo4J ofrece soluciones orientada en grafos. Muchas veces los datos tienen relaciones entre sí, y
a mí lo que me interesa es poder navegar por esas relaciones, para eso se inventaron las bases de datos
de tipo grafo. Neo4J es una de las soluciones más potentes y más adaptadas para este tipo de
problemáticas.
GraphX es la solución que está ofreciendo Spark para brindar base de datos de tipo grafos. Es una
solución igual de buena que Neo4J, y encima está totalmente cogida por soluciones Apache.
CouchDB es una solución bastante potente, y está ideada para tener soluciones de caché y soluciones de
almacenamiento a largo tiempo. Lo bueno de CouchDB es que está pensado para dispositivos IET, ¿qué
quiere decir eso? Muchas veces los dispositivos IET pierden la conectividad, y no pueden transmitir los
datos a una base de datos global, para ello se instalan pequeñas instancias de bases de datos de
CouchDB, que vayan almacenando los datos, y que automáticamente, sin necesidad de nada, se
sincronizarán con la base de datos global cuando se tenga conectividad, y, mientras tanto, tienen un
almacenamiento local que está totalmente sincronizado cuando se vuelve a tener la conectividad.
Elastic. Elastic es una solución de almacenamiento, indexación y búsqueda de datos de tipo documental,
almacena los datos por palabras, indexa los datos por palabra, y lo importante en este caso es poder hacer
consultas de una manera muy rápida. No solo tiene proceso de almacenamiento y consulta, sino que
también tiene pequeñas aplicaciones que permiten procesar el texto, como poder hacerle matización,
nombres propios y otros similares. Lo importante de Elastic es que no solo tiene una solución de
indexación sino también tiene una solución de visualización, una que se llama Kibana, una solución de
análisis de logs, que es muy potente, y que es una solución completa que, si bien no están ofreciendo
Cloudera y Hortonworks de manera directa, sí que tienen conexión directa con ellos.
Kudu, una solución totalmente nueva, está en incubación a día de hoy, una solución de Apache, que
demuestra que puede ser muchísimo más rápida en almacenar y en obtener el dato que cualquiera de las
otras soluciones, está por ver a día de hoy todavía porque está en incubación.
Desde el punto de vista de almacenamiento del dato, tenemos soluciones para almacenamiento de tipos
"batch", como es Sqoop, que lo que hace es conectar nuestras bases de datos MySQL, Oracle, etcétera, y
volcar la información a nuestro "data lake" famoso.
Existen soluciones "streaming" que lo que hacen
es asegurarte que se van a ir obteniendo los datos
a medida que se vayan generando de nuestra
fuente, como son Flume y Storm, Flume en
soluciones Cloudera, Storm en soluciones
Hortonworks. Hay una cosa importante cuando se
están generando los datos de manera "streaming",
y es la organización, cuando llega un dato
tenemos que saber que ese dato llega en ese
momento, y antes de otro dato y después de otro
dato, y asegurarnos de que ese dato no lo
perdemos. Para ello, usamos un orquestador, que
se denomina Kafka, que nos permite enganchar
con Flume o con Storm para ir cogiendo el dato y
de manera organizada almacenándolo, crea una
ventana de tiempo y va ajustando esos tiempos
para ir almacenando los datos.
Otras soluciones que nos permiten también hacer procesamiento en tiempo real son las soluciones que
ofrece Spark con Spark Streaming y la solución Flink,, que es la competidora de Spark, que también tiene
su solución Flink Streaming.
Apex, que también está en incubadora y que también está ofreciendo una solución en "batch" y en
"streaming" de procesamiento del dato. Promete mucho, aunque todavía está en incubadora.
Desde el punto de vista de qué es lo que está produciendo, qué es lo que está ocurriendo sobre cada una
de las máquinas, cómo es el estado de las máquinas, si está apagada, si está encendida, si está hasta
arriba, si no, si tiene mucha memoria usada, si no, se utilizan varias soluciones, en Horton, Ambari, en
Cloudera, Cloudera Director. Tener en cuenta que Cloudera Director es una solución de pago por lo que
hay que tener que intentar, de alguna manera, configurar Ambari dentro de una distribución Cloudera.
Y una cosa súper interesante es CloudBreak. CloudBreak, lo que nos va a permitir es controlar clusters
de clusters, es decir, si yo tengo una solución Hadoop basada en Hortonworks y una solución Cloudera,
¿por qué no unificarlas en una sola visión que es la visión global de CloudBreak?, donde me va a decir
cómo va a estar el estado del cluster de Cloudera y cómo está el estado del cluster Hortonworks.
No deja de ser un "script" que va ejecutando cada uno de los procesos, pero nos sirve muchísimo el hecho
de poder tenerlo configurado en sistemas Big Data porque, de manera automática, se van a ejecutar esos
procesos. Es verdad que como es una solución "scripting" es poco amigable, para ello inventaron una
solución que se llama Nifi que es, mediante una interfaz gráfica, poder ir creando nodos, que van
interconectados entre sí mediante flechitas que permite hacer ciertas operaciones, una detrás de otra. Si
bien es muy intuitivo, no es válido para utilizar en producción, puesto que Nifi, que está basado en Java,
es muy lento y muy pesado. Zookeeper, como hemos definido antes, es nuestro cuidador del zoo que lo
que nos define es la alta disponibilidad de cada una de las aplicaciones de nuestra infraestructura Big
Data. ¿Qué quiere decir eso? Nos asegura de alguna manera que, cuando queramos acceder a una
aplicación o a un software de nuestra plataforma, ese va a responder porque Zookeeper se va a encargar
de que responda, le va a dar palos hasta que responda, básicamente. Y luego, soluciones de gobernanza
del dato, que bien habíamos hablado previamente. Existe la solución Atlas y existe la solución Falcon.
Atlas tiene soporte tanto en Cloudera como en Hortonworks y Falcon sólo en Hortonworks.
ScikitLearn y Weka, otras soluciones de "machine learning" en Python o en Java que se han quedado un
poco obsoletas también. Soluciones Deep Learning hay cientos, las más importantes, Theano, TensorFlow,
Keras, etcétera, H2O, son soluciones para ejecución de algoritmos de "deep learning" o de redes
neuronales. Spark ML es la librería de Spark que me permite ejecución de "machine learning" en
distribuído, y es más amplia que la de Spark MLlib, es una solución que inventaron desde los orígenes de
Spark con soluciones "machine learning" procesadas, pero cuatro algoritmos procesados de manera
distribuida. Si tuviéramos que recomendar una librería en este caso, nos basaríamos siempre en Spark
ML. H2O es una solución que no sólo tiene la parte del "deep learning", sino otros algoritmos también
distribuidos como pueda ser Random Forest. Y, por último, MADLib que es una solución que está
enganchada de manera directa con Pivotal, es una solución que pudieras ejecutar analítica mediante
Python, mediante Java o mediante R, dentro de la propia SQL de consulta del dato.
Dependiendo de cuál sea la necesidad, y dependiendo del tiempo que tengamos y, sobre todo, del coste
que tengamos, tenemos que ir a un tipo de decisiones u otras.
En definitiva, hay que tener en cuenta la
volumetría, la tipología de los datos, el nivel de
seguridad de los datos, la ubicación donde se
tienen que encontrar esos datos, el tiempo en el
que va a estar disponible la infraestructura Big
Data, el tipo de disponibilidad y, por último, qué
componentes son necesarios en nuestra
infraestructura Big Data.