Archivo de la etiqueta: PostgreSQL

Introducción a Big Data ¿Qué necesito saber?

Big Data supone un cambio de paradigma en el modo en el que se desarrollan las aplicaciones hoy en día. Desde siempre una parte importante de las aplicaciones ha sido la gestión de los datos. Esta gestión normalmente se encargaba a una base de datos que podía ser opensource (MySQL, PostgreSQL, etc) o un producto comercial (Oracle). Esta base de datos se encarga de gestionar los datos de una manera organizada, segura y fiable.

Con el incremento del volumen de datos a manejar nos encontramos que es necesario incrementar la potencia del hardware que soporta dichas bases de datos. En una base de datos clásica este crecimiento en la potencia del hardware no es sencilla. Normalmente es necesario utilizar servidores de gran potencia cuyo coste es bastante elevado. También el almacenamiento en disco debe ser más potente y rápido incrementando el coste en gran medida.

Sin entrar en detalles tecnológicos nos encontramos con que, para un volumen de datos elevado, la factura del hardware necesario es inviable o, directamente, no hay hardware en el mercado capaz de manejarlo.

Frente a esta situación las soluciones de Big Data reparten la ejecución de nuestra aplicación entre un gran número de servidores con una buena relación potencia/coste. Si necesitamos ampliar la capacidad podemos añadir más servidores y, en todos los casos, la potencia resultante es directamente proporcional al número de servidores. Este crecimiento no tiene límite y, hoy en día, hay agrupaciones de decenas de miles de servidores trabajando en paralelo.

Hoy en día el software líder del mercado es Hadoop. Hadoop no es solo una aplicación si no un conjunto de aplicaciones opensource incluidas en el proyecto Apache. En estas páginas veremos la mayoría de estas aplicaciones y su principal función.

Distribuciones

Como hemos indicado Hadoop no es solo una aplicación si no un conjunto de ellas. Realizar una instalación completa es una tarea laboriosa y, muchas veces, nos encontramos con problemas de compatibilidad, de actualización, de gestión del grupo de servidores, etc. Existen empresas que realizan un empaquetado de la solución completa incorporando, en algunos casos, aplicaciones propias que mejoran los puntos débiles del software estándar opensource. Al elegir una distribución nos facilita el despliegue y gestión del software y, además, podemos contratar un soporte a la empresa propietaria de la distribución.

El líder en este campo es la empresa Cloudera que es la que ha suministrado los despliegues más importantes. Podemos descargarnos gratuitamente una distribución de la página web de Cloudera pero, si queremos una distribución más completa y actualizada. deberemos elegir la distribución de HortonWorks. La distribución de HortonWork es sin duda, la más estándar, completa y actualizada.

Ambari

Ambari es el gestor centralizado de un sistema Hadoop. Ambari se instala en uno de los nodos y nos permite desplegar un grupo de servidores o «cluster», añadir o borrar aplicaciones, añadir nodos. Una vez instalado gestiona el buen funcionamiento del «cluster» y de los procesos de las distintas aplicaciones. Ambari ofrece un interfaz web que facilita la gestión centralizada de uno o varios «cluster» Hadoop. La instalación de Ambari desde la web de Apache es compleja pero HortonWorks proporciona un repositorio que permite su instalación como un paquete en las principales distribuciones de Linux. El equivalente a Ambari en las distribuciones Cloudera es Cloudera Manager.

HDFS

HDFS o Hadoop Distributed File System es el sistema de ficheros distribuido que supone la base para todo el sistema Big Data. Es un sistema de ficheros que los almacena de una manera distribuida entre todos los servidores del sistema o «cluster». Los ficheros se dividen en bloques que se guardan en cualquiera de los nodos (servidores) del «cluster». Habitualmente cada bloque se guarda triplicado en tres nodos diferentes por seguridad ante fallos en algún nodo o servidor por lo que el sistema es muy robusto. El único nodo que conoce la ubicación de los bloques es el nodo denominado «namenode» que guarda la relación entre los ficheros y carpetas y su ubicación física. Las aplicaciones consultan el «namenode» para saber donde están los datos pero van directamente a los servidores o «datanodes» donde está físicamente la información. De esta manera un único «namenode» puede gestionar la información de decenas de miles de «datanodes». Por seguridad la información del «namenode» está duplicada en el «secondary namenode». En las últimas versiones la seguridad del «namenode» se puede incrementar todavía más.

MapReduce

MapReduce proporciona las librerías que permiten distribuir la ejecución de una tarea entre todas las máquinas de un «cluster» Hadoop. Si ejecutamos un programa en un servidor o nodo este se ejecuta solamente en dicho nodo. Pero si queremos que se ejecute de una manera distribuida para utilizar la potencia de todos los servidores o nodos debemos utilizar MapReduce.

MapReduce está pensado para ser utilizado en programas escritos en Java. Primero debemos incluir en nuestro programa las librerías de MapReduce. A continuación debemos adaptar la estructura de nuestro programa a las funciones Map y Reduce. Las dos son complementarias y se ejecutan en ese orden. Por lo tanto, para que nuestro programa se ejecute de una manera distribuida, debemos adaptarlo a esta metodología de programación.

Hoy en día MapReduce se está quedando un poco obsoleto ya que obliga a programar exclusivamente en el lenguaje Java y a un esquema de programación muy estricto. Para solucionarlo el ecosistema Hadoop incluye otros entornos como Pig, TEZ o Spark que se desarrollaron primero como una capa que simplificaba el uso de MapReduce y, hoy en día, suponen una alternativa mucho más potente y flexible. Entre las dos, probablemente, Spark es la más utilizada.

YARN

YARN es la abreviatura de Yet Another Resource Negotiator. YARN es el gestor que se encarga de distribuir los programas que utilizan las funciones MapReduce. YARN se utiliza para arrancar un programa desarrollado con la metodología MapReduce y se encarga de distribuir su ejecución entre los distintos nodos del cluster y consolidar el resultado. También ofrece un interfaz web que permite controlar la ejecución de las distintas aplicaciones que siguen la metodología MapReduce.

Hive

Hive es la base de datos SQL que funciona sobre el sistema de ficheros distribuidos HDFS. Es una base de datos SQL simplificada y no incluye todas las instrucciones SQL ni todas las funcionalidades de una base de datos como MySQL, pero es más que suficiente para la mayoría de las aplicaciones y permite utilizar las ventajas del Big Data en aplicaciones diseñadas para guardar sus datos en una base de datos SQL.

HBase

HBase es una base de datos No-SQL que funciona sobre el sistema de ficheros distribuido HDFS. Al ser una base de datos No-SQL sin ningún parecido con otra base de datos debemos desarrollar nuestra aplicación adaptada a HBase. Sus principales ventajas son su simplicidad y su rapidez de funcionamiento.

Spark

Spark es una alternativa a MapReduce desarrollada por la Universidad de Berkeley. Aunque, en un principio, se desarrolló como una capa para simplificar el uso de MapReduce, en la versión 2, está desarrollada como un entorno independiente que no necesita MapReduce. De hecho se puede desplegar totalmente independiente sin Hadoop. Spark puede usarse en programas Java pero también con los lenguajes R, Python y Scala. Este último es el recomendado por los desarrolladores de Spark.

Spark no solo incluye funciones parecidas a MapReduce pero mucho más potentes. También incluye las variables RDD (Resiliant Distributed Dataset). Las variables RDD también están distribuidas entre los distintos nodos. Esto más un uso intensivo de la memoria RAM en lugar del disco hace que Spark sea una de las alternativas más potentes a MapReduce.

A esto se añade los siguientes elementos:

  • SparkSQL – Interfaz SQL más potente y eficaz para los datos SQL (Utiliza el metastore de Hive)
  • MLIB – Librerías para Machine Learning.
  • GraphX – Librerías para procesamiento de algoritmos de grafos.
  • SparkStreaming – Procesamiento de un flujo continuo de datos.

Spark es, con diferencia, la alternativa a MapReduce más potente y utilizada.

Sqoop

Sqoop es una herramienta de Hadoop que permite la importación y exportación de datos a una base de datos SQL externa. Sqoop importa los datos de dicha base de datos externa y los almacena en HDFS. Para realizar esta tarea de una manera rápida está diseñado para utilizar MapReduce por lo que es bastante más rápido que cualquier otra alternativa. De hecho, a veces, es necesario limitarlo para evitar sobrecargar la base de datos externa. El sentido contrario, la exportación de HDFS a una base de datos externa, también está soportado.

Flume

Flume es una herramienta de Hadoop que automatiza la importación de datos. Por un lado las fuentes pueden ser ficheros con formato AVRO, un puerto TCP aceptando peticiones, la salida de un comando unix, una fuente JMS (Java Message Service), el contenido de una carpeta, etc. Los datos recibidos se pueden mandar a una carpeta en HDFS, almacenar en Hive o HBase, etc. Flume se encarga de ir almacenando continuamente todo el contenido presente en la fuente configurada.

Kafka

Kafka es una herramienta de Hadoop que automatiza la importación de datos. Kafka se basa en uno o varios «brokers» de mensajes. El sistema puede funcionar con un solo «broker» pero se pueden añadir más para aumentar capacidad o para dar redundancia al sistema. Los «brokers» reciben mensajes de los «producers» y se los envían a los «consumers». Los «producers» etiquetan los mensajes mediante un «topic». Los «consumers» solo reciben los mensajes del «topic» al que están suscritos. Muchas veces Kafka se utiliza en combinación con Flume ya que Flume tiene más capacidad de adaptación a distintas fuentes/destinos y Kafka la capacidad de redireccionar los mensajes a los distintos destinos.

Knox

La aplicación Knox o Knox gateway ofrece un interfaz del tipo REST que permite utilizar con seguridad las aplicaciones del entorno Hadoop sin necesidad de dar acceso directo a los nodos del cluster. El interfaz Knox controla el acceso y, para los usuarios admitidos, traduce las ordenes REST en llamadas a las aplicaciones Hadoop. Las aplicaciones externas tienen como único punto de contacto el interfaz Knox.

Ranger

La aplicación Ranger ofrece un punto centralizado de control de la seguridad en un sistema Hadoop. Aunque Ranger se instala y se monitoriza con AmbariRanger ofrece un interfaz web independiente para la gestión de las políticas de seguridad.