Bienvenidos, vamos a explicar en qué consiste el ecosistema Hadoop. Este ecosistema ya se describió en el curso uno de la especialización, y ahora vamos a hacer un breve repaso de cuáles son las herramientas principales que lo configuran. Recordemos, en primer lugar, lo que son las cinco "V"s del "Big Data". Sabemos que en el Big Data tenemos que procesar una gran cantidad de datos, un gran volumen de datos. Esto hace que tengamos que buscar métodos específicos para poder procesar toda esta cantidad ingente de datos. Estos datos, además, se generan a gran velocidad. Podemos poner como ejemplo la cantidad de mensajes que se lanzan cada día en las redes sociales generando terabytes de información que pueden ser analizados de forma dinámica durante su generación. Además, tenemos que también se generan datos de gran variedad. Hay una gran variedad de datos, podemos tener datos textuales, mensajes de texto, mensajes de voz, mensajes con imágenes de video, fotografías. Es decir, que podemos procesar grandes cantidades de datos, generadas a gran velocidad y de tipos variados. Además, tenemos que tener en cuenta la veracidad de estos datos, es decir, qué grado de confianza nos merecen estos datos que estamos generando, estamos recibiendo y queremos procesar. Y, por último, necesitamos extraer un valor de estos datos, es decir, de toda la información que se almacena en estos datos ser capaces de extraer aquellos puntos, aquellos apartados, aquellas características que son más útiles para nuestro usuario o para nuestras aplicaciones. Así, conocido este entorno, se diseñó lo que es el entorno Hadoop para cumplir con toda la capacidad de procesamiento que requiere todo este Big Data. Todo empezó cuando, en el año 2004, Google publicó un artículo en el que explicaba la problemática para indexar la web, y ofrecía una solución basada en un modelo "MapReduce". Concretamente, en su solución se utilizaba un sistema de ficheros denominado GFS y se presentaba un modelo de procesamiento de estos datos obtenidos de la web que se denominó "MapReduce". Doug Cutting, que estaba trabajando en aquel momento en Yahoo, vio el potencial que ofrecía esta idea que había introducido Google con el modelo de procesamiento "MapReduce", y desarrolló una implementación de este modelo de programación "MapReduce" que denominó Hadoop. Y, así, en el año 2005, Yahoo lanzó la primera versión de Hadoop. El entorno Hadoop ha ido evolucionando y, actualmente, es mantenido y evolucionado por "The Apache software Foundation". Los objetivos del ecosistema Hadoop serían los siguientes, por un lado, tendríamos que el ecosistema estaría pensado para ser escalable, para ofrecer escalabilidad, tanto en lo que es procesar un volumen de datos que puede ser creciente como en utilizar un número de nodos que también podría ser creciente, es decir, que podríamos tener grandes volúmenes de datos procesados por un gran conjunto de nodos de procesamiento. En segundo lugar, tendríamos que el sistema debería ser tolerante a fallos ya que, si estamos utilizando muchos nodos de cómputo y muchos discos, muchas unidades de almacenamiento, es posible que alguno de estos nodos de cómputo o estas unidades de almacenamiento tengan fallos y, entonces, si se producen fallos, el sistema debería ser capaz de detectar el fallo y recuperarse y seguir procesando los datos, sin interrumpir la aplicación ni perder los datos que habíamos procesado hasta ese momento. Además, como ya hemos mencionado, el sistema debe ser capaz de utilizar y procesar distintos tipos de datos, videos, fotos, mensajes de texto, mensajes de voz, todos estos tipos y debería ser capaz de soportar distintos usuarios simultáneamente. Es decir, que estaríamos teniendo bastantes usuarios, cada uno analizando sus datos de forma simultánea en todo este entorno compartido. Y, por último, el entorno debe ser capaz de extraer un valor de los datos que está procesando el usuario y darle una información resumida e interesante para el usuario, para que pueda tomar las decisiones que considere adecuadas. Con todos estos objetivos se desarrolló el ecosistema Hadoop, que incluye todo un conjunto de herramientas y aplicaciones que se pueden mostrar como un esquema en capas, empezando desde las capas más bajas que sería el almacenamiento propio en los nodos de almacenamiento del sistema, hasta lo que serían ya niveles de abstracción para procesar estos datos y ofrecer las respuestas adecuadas a los usuarios. Así, veamos cuáles son las capas fundamentales de este entorno, de este ecosistema Hadoop. Empezaríamos comentando que tenemos en un primer nivel todo lo que sería el hardware básico que está basado en nodos de almacenamiento y cómputo, pero nodos, lo que se denomina un "commodity hardware", es decir, el hardware habitual, no un hardware específico de elevadas capacidades y potencia, sino un hardware de lo que se podría ser ordenadores personales. Sobre estos nodos de cómputo y almacenamiento se pone lo que es un sistema de ficheros distribuido, que se denomina HDFS, de "Hadoop Distributed File System", que permite almacenar los datos, todo este volumen de datos tan grande que hemos comentado anteriormente, sobre lo que serían los nodos del sistema y se encarga de toda la gestión de los archivos de los ficheros y de cómo almacenar estos datos. En segundo lugar, encima de este sistema de ficheros, se introduce lo que es un gestor de recursos que se denomina, en el caso concreto de Hadoop se denomina YARN, de "Yet Another Resource Negotiator", es decir, un gestor de recursos que va a distribuir los trabajos entre los nodos, y va a hacer que se planifiquen los trabajos del modo adecuado. Por encima de este gestor de recursos tenemos un modelo de cómputo, que sería el modelo "MapReduce" que está basado en el modelo original de Google del año 2004, que permite procesar los datos de una forma eficiente, y al que se dedicará un video en una próxima sesión. Sobre este entorno básico formado por el hardware básico, después el sistema de ficheros, el gestor de recursos y el modelo de programación, se introducen toda una serie de herramientas para facilitar lo que es el acceso y procesamiento a todos estos datos. En primer lugar, tendríamos una base de datos que denominamos "Cassandra", que es una base de datos NoSQL, ya que podemos gestionar datos de distintos tipos, no únicamente unos datos relacionales de las bases de datos clásicas, sino que introduce nuevos tipos de datos. Y, también, tenemos otra base de datos que sería "MongoDB", que es una base de datos específica para el almacenamiento de documentos. Estas bases de datos, tanto Cassandra como MongoDB, son bases de datos que no estarían sobre HDFS y podrían correr, ejecutarse directamente sobre el hardware básico del sistema, sin necesidad de incorporar el HDFS. Si utilizamos HDFS específicamente, podemos utilizar como una base de datos específica "HBase", que también es una base de datos no relacional ofrecida por el entorno Hadoop, HBase es Hadoop base. Entonces, ya tenemos aquí las bases de datos en las que podemos almacenar los datos de nuestras aplicaciones, y entonces ya podemos tener herramientas que vayan a permitirnos desarrollar aplicaciones que vayan a poder acceder y gestionar estos datos. Por un lado, podríamos tener "Storm", que es una base de datos, perdón, que es un sistema de cómputo distribuido en tiempo real. Y después, tenemos Spark que también nos permite el desarrollo de aplicaciones distribuidas sobre YARN para acceder a estos datos y procesarlos, y obtener un análisis de los mismos y extraer información de los mismos. Sobre MapReduce, podremos utilizar distintos "frameworks", un "framework" que tenemos es el que se denomina Hive que nos permite realizar consultas y acceso a datos de un modo, digamos, más sencillo que utilizando el propio MapReduce. Digamos que utilizando "Hive" vamos a generar consultas que después serán traducidas a MapReduce y, a partir de ahí, ya se generará todo el acceso a los datos y todo el análisis de una forma más automática y más sencilla para el usuario. O también podemos tener lo que se denomina "Pig", que en este caso es una plataforma para el desarrollo de aplicaciones distribuidas sobre el entorno MapReduce. Además de estas herramientas, también podemos mencionar que tenemos otras herramientas que nos permiten integrar datos en nuestro sistema de almacenamiento HDFS. Por un lado, tendríamos lo que es la herramienta que se denomina "Flume", que es un servicio para recopilar y mover grandes cantidades de datos entre los distintos nodos del sistema y, por otro lado, tendríamos lo que se denomina "Sqoop", que nos permite integrar datos de bases de datos relacionales de las tradicionales, en un sistema de base de datos de Hadoop con HDFS y, así, incorporar estos datos, digamos, clásicos también en el procesamiento mediante Hadoop.