Coder facts: Gaticos!

Acabo de descubrir una web española que se dedica a realmente divertida: coder facts:

Más de una me han hecho sonreír, y algunas hasta de forma sonora!

A ver si desde hoy encuentro el hueco para poner una imagen por día :).

Para empezar una de gatos, no es la mejor pero seguro que la audiencia femenina lo agradecerá!

Dedicada a todas esas chicas que se vuelven locas con los gaticos (algún día lo entenderé? :D):

Un poco de Hadoop

Quizás esto tendríamos que haberlo escrito en el Blog antes que otros posts…pero como nunca es tarde….

Apache Hadoop es un framework que permite el tratamiento distribuido de grandes cantidades de datos (del orden de peta bytes) y trabajar con miles de máquinas de forma distribuida. Se inspiró MapReduce y Google File System publicados por Google.

Está desarrollado en Java y se ejecuta dentro de la JVM.

Actualmente está soportado por grandes como Google, Yahoo e IBM. También existen empresas como Cloudera que ofrecen soluciones empresariales Open Source basadas en Hadoop.

Las características que han hecho tan popular Hadoop son:

Económico: Está diseñado para ejecutarse en equipos de bajo coste formando clústeres. Estos clústeres pueden llevarnos a pensar en miles de nodos de procesamiento disponibles para el procesado de información.

Escalable: Si se necesita más poder de procesamiento o capacidad de almacenamiento solo hay que añadir más nodos al clúster de forma sencilla.

Eficiente: Hadoop distribuye los datos y los procesa en paralelo en los nodos donde los datos se encuentran localizados.

Confiable: Es capaz de mantener múltiples copias de los datos y automáticamente hacer un redespliegue de las tareas. El aspecto clave de Hadoop es que en lugar de mover los datos hacia donde se hace el procesamiento, Hadoop mueve el procesamiento (Tasks) a donde están los datos. Hadoop necesita tener conocimiento de la arquitectura del clúster para poder elegir el nodo más cercano o el que está en el mismo rack para enviar la tarea de procesamiento MapReduce.

El diseño de Hadoop se divide en dos partes principales:

· La implementación de MapReduce que se encarga del procesamiento de la información de forma distribuida.

· El sistema de ficheros distribuido Hadoop Distributed File System (HDFS) que se encarga de almacenar todos los datos repartiéndolos entre cada nodo de la red Hadoop.

NameNode: Es el maestro o master de todos los DataNode. Es el responsable de manejar el namespace del sistema de ficheros y controlar los accesos de los clientes externos. Almacena la información a cerca de donde se

• encuentra los objetos en HDFS. Siempre es obligatorio tener al menos un NameNode.

DataNode: actúa como un almacenamiento de bloques para HDFS. Un clúster de Hadoop puede contener cientos o miles de DataNodes. Estos DataNodes responde a las peticiones de lectura y escritura de los clientes y hacen réplicas de los bloques que le envía el NameNode.

JobTracker: Es el servicio de Hadoop que se encarga de las tareas MapReduce que solicitan los clientes. Estas tareas las ejecutan los TaskTracker. Normalmente el JobTracker escogerá el nodo que tenga los datos o en su defecto el que esté en el mismo rack. El JobTracker monitoriza la ejecución de las tareas en los TaskTracker para saber si se ha realizado con éxito, o si ha fallado encargársela a otro TaskTracker.

TaskTracker: Este nodo acepta tareas Map o Reduce que le envía el JobTracker. Se configura con número determinado de tareas que pude ejecutar en paralelo, por lo tanto, si tiene slots libres será un nodo elegible por el JobTracker para ejecutar una tarea. Un TaskTracker se comunica directamente con los DataNode (como otro cliente cualquiera) una vez que el NameNode le ha dado su localización.

Hadoop es un framework totalmente escalable.

Podemos configurar un pequeño clúster donde el nodo master contenga JobTracker, TaskTracker, NameNode, y DataNode y un nodo esclavo que actué como DataNode y TaskTracker. También es posible tener solo DataNodes si queremos

prescindir del procesamiento distribuido y solo queremos almacenamiento.

En clústeres más grandes, el sistema de ficheros HDFS se maneja a través de un servidor dedicado que ejecuta el NameNode almacenando los metadatos y otro NameNode secundario que se encarga de hacer instantáneas de las

estructuras de los NameNode para prevenir la perdida de datos. Otro nodo del clúster ejecutará el JobTracker y le añadiríamos más nodos que ejecutasen los DataNodes y TaskTracker.

Hadoop soporta tres modos de despliegue:

Standalone: Hadoop está configurado por defecto para trabajar en este modo no distribuido. Tanto el NameNode, el JobTracker como los DataNode y los TaskTrackers se ejecutan en la misma máquina.

Pseudo-distribuido: Cada servicio de Hadoop se ejecuta en diferentes procesos Java pero en la misma máquina.

Distribuido: Cada servicio de Hadoop se ejecuta en diferentes nodos de un clúster. Un nodo puede actuar de NameNode, otro de JobTracker y el restos de nodos actúan como DataNode y TaskTracker o los dos a la vez.

Inconvenientes

1) Un posible excesivo intercambio de mensajes entre los nodos de Hadoop (réplicas, sincronizaciones, actualizaciones de metadatos, localización) que pueden ralentizar la red.

Una solución posible es utilizar una red separada para Hadoop y otra para el tráfico de los datos.

2) No todos los problemas se pueden resolver o traducir a problemas MapReduce. Aún así se pude utilizar Hadoop como sistema de ficheros distribuido por medio HDFS.

En la actualidad

Hadoop se puede utilizar en teoría para casi cualquier tipo de trabajo batch, mejor que para trabajos en tiempo real, ya que son más fáciles de dividir y ejecutar en paralelo. Entre los campos actuales a aplicación se encuentran:

• Análisis de logs

• Análisis de mercado

• Data mining

• Procesamiento de imágenes

• Procesamiento de mensajes XML

• Web crawling

• Indexación de textos

Actualmente Hadoop es un framework muy extendido en el ámbito empresarial, sobre todo en compañías que manejan grandes volúmenes de datos.

Algunas empresas que lo usan:

· Yahoo: La aplicación Yahoo! Search Webmap está implementado con Hadoop sobre un clúster de mas de 10.000 nodos Linux y la información que produce es la utilizada por el buscador de Yahoo.

· Facebook: a día de hoy es el mayor clúster Hadoop del mundo que almacena hasta 30 peta bytes de información.

· Amazon A9: Se utiliza para la generar índices de búsqueda de los productos ofertados en el portal. Disponen de varios clústeres de entre 1 y 100 nodos cada uno.

· The New York Times: Utiliza Hadoop y EC2 (Amazon Elastic Compute Cloud) para convertir 4 Tera bytes de imágenes TIFF en imágenes PNG de 800 K para ser mostradas en la Web en 36 horas.

Además existen compañías cuyo negocio es principal es Hadoop, como Cloudera, que comercializa CDH (Cloudera’s Distribution including Apache Hadoop), que da soporte en la configuración y despliegue de clústeres Hadoop.

Además proporciona servicios de consultoría y formación en estas tecnologías. Todo el software que distribuyen es Open Source.

 

Especificaciones WS

Seguro que como yo no os sabéis todas (ni falta que hace :D)

· SOAP Recomendación W3C. Especifica la estructura de los mensajes que los WS intercambian. Es independiente de la plataforma, flexible y fácilmente extensible.

· WSDL Recomendación del W3C. Permite la descripción de WS: estructura de los mensajes SOAP que intercambiará con otros WS, servicios que ofrece, negociación de los parámetros de seguridad en las comunicaciones entre

WS, etc.

· UDDI Estándar OASIS. Permite mantener repositorios de especificaciones WSDL simplificando el descubrimiento de WS y el acceso a sus especificaciones. Hace posible que una aplicación busque dinámicamente servicios que ofrezcan una serie de características, seleccione el más adecuado (por coste, calidad, etc.) e incluso localice servicios alternativos si uno falla.

· WS-Addressing Recomendación W3C. Permite incluir en un mensaje SOAP información sobre el emisor, los destinatarios, a quién se debe responder, a quién se debe informar en caso de error, etc. Con estos elementos se consigue un direccionamiento independiente de capas de transporte inferiores como HTTP.

· WS-AtomicTransaction Borrador para revisión pública de OASIS. Suele emplearse en la coordinación de WS que realicen actividades de corta duración en entornos de confianza. Las acciones a realizar por cada servicio implicado se agrupan en una transacción atómica. El coordinador decide cuándo realizarla y puede abortar una transacción en curso devolviendo a los WS implicados a su estado previo.

· WS-BPEL Especificación de comité OASIS. Define un lenguaje que facilita la composición de WS. Permite especificar la lógica de la composición de los servicios (envío de mensajes, sincronización, iteración, tratamiento de transacciones erróneas, etc.) independientemente de su implementación.

· WS-BusinessActivity Borrador para revisión pública de OASIS. Permite la coordinación de WS compuestos (normalmente con WS-BPEL) a partir de actividades independientes que no se pueden modelar como transacciones atómicas por su duración, por requerir intervención humana o por ser incapaces de bloquear

· WS-Coordination Borrador para revisión pública de OASIS. Permite crear contextos de coordinación para la sincronización de WS. Requiere protocolos complementarios como WS-AtomicTransaction o WS-BusinessActivity.

· WS-DistributedManagement Estándar OASIS. Permite gestionar recursos distribuidos de todo tipo (PDA, televisores, dispositivos de conexión de redes, etc.) mediante WS.

· WS-Notification Estándar OASIS. Permite que un WS reciba información puntual sobre determinados acontecimientos y está formado por tres especificaciones: WS-BaseNotification, WS-BrokeredNotification y WS-Topics.

· WS-Policy Borrador de trabajo del W3C. Proporciona un medio de especificar las características que presentan y exigen los WS durante su operación. Por ejemplo, un determinado servicio puede exigir para operar que los mensajes se firmen o cifren con determinados algoritmos o que la coordinación se realice mediante un protocolo dado. Con esto se dota a los WS de la capacidad de negociar entre ellos las condiciones de interacción.

· WS-Reliability Estándar OASIS. Es un protocolo que permite numerarlos mensajes SOAP y obtener confirmación de su recepción en destino. Con esto se puede garantizar el orden de recepción de los mensajes, evitar duplicados, comprobar la entrega, etc.

· WS-ReliableMessaging Borrador para revisión pública de OASIS. Esta especificación define un protocolo que permite el intercambio de mensajes de manera fiable en presencia de fallos en el software, la red, etc.

· WS-ReliableMessagingPolicyAssertion Borrador para revisión pública de OASIS. Con este protocolo se puede manejar políticas WS-Policy que expresen los requisitos de los emisores y receptores de mensajes que usen WSReliableMessaging.

· WS-ResourceFramework Estándar OASIS. Mediante este protocolo se pueden modelar y utilizar servicios con estado interno. Permite superar las limitaciones que poseen las tecnologías WS-_ respecto a REST, que sí permite contemplar servicios con estado interno. Para ello se definen varias especificaciones: WS-Resource, WS-ResourceProperties, WS-ResourceLifetime, WSServiceGroup y WS-BaseFaults.

· WS-SecureConversation Borrador para revisión pública de OASIS. Define extensiones de WS-Security que proporcionan un marco de trabajo en el que se pueden solicitar y emitir tokens de seguridad, de manera que los agentes implicados puedan establecer relaciones de confianza mutua.

· WS-Security Estándar OASIS. Proporciona integridad, confidencialidad y autenticación en las comunicaciones entre WS. Incluye varios protocolos de seguridad, como X.509 y Kerberos, de manera que los WS puedan utilizar distintas políticas de seguridad.

· WS-Trust Borrador para revisión pública de OASIS [23]. Su objetivo es facilitar el intercambio de series de mensajes seguros mediante la emisión, renovación y validación de tokens de diversos protocolos.