Título: Yo RDD (Resilient Distributed Datasets) con la Bujía (SPARK

Anuncio
Título: Yo RDD (Resilient Distributed Datasets) con la Bujía (SPARK)!!!
Autor: Dr. Gabriel Guerrero
Ref: www.saxsa.com.mx/articulos/RDD
Descripción: Una breve introducción al concepto de Conjuntos Distribuidos
Resilientes como una abstracción para ofrecer mecanismos tolerantes a fallas
(fault-tolerant abstraction) para el cómputo en memoria en una red (in-memory
cluster computing), basada en las enseñanzas y sistemas desarrollados en la
Universidad de California Berkeley en el laboratorio AMPLab (Algorithms Machines
and People).
Introducción
En los años 2000 al 2006 se acelera la generación de contenido en Internet y se
promueve ampliamente el uso de buscadores que ofrecen de forma casi
instantánea una respuesta.
Los grandes competidores de este mecanismo promueven la investigación,
innovación y desarrollo de nuevos paradigmas para:
1) la extracción de contenido en los diferentes sitios de Internet,
2) el almacenamiento del contenido en varias máquinas conectadas en red, o
"cluster", es decir el almacenamiento distribuido
3) el ordenamiento del contenido de forma óptima para la búsqueda, utilizando
mecanismos de llave,valor "key-value", con Arboles Binarios Balanceados (BTree)
4) el procesamiento en varias máquinas conectadas en red, "cluster", con
mecanismos distribuidos, es decir el cómputo distribuido
5) el estudio de mecanismos de utilización de los miles de millones de registros de
contenido heterogéneo. Es decir, la minería de datos y análisis predictivo.
Esto siguiendo los pasos clásicos de la investigación: Observar, Describir, Operar,
Predecir
Así surgen conceptos y sistemas como BerkeleyDB para la instrumentación de
Arboles Binarios Balanceados (BTree), Google File System (GFS) para el
almacenamiento distribuido, el marco de referencia Mapeo/Reducción
(Map/Reduce Framework) de Google, el sistema Apache Hadoop y muchos más
que hoy se denomina el ecosistema Hadoop.
Así a partir del 2006, el mecanismo de procesamiento distribuido MapReduce se
populariza como un mecanismo para simplificar enormemente el análisis en
grandes volúmenes de datos almacenados en máquinas conectadas en red
("BigData analysis on large clusters").
Así surge el nuevo "Paradigma del Manejo de Grandes Volúmenes de Datos"
("BigData Paradigm") y con ello el surgimiento de desarrolladores y compañías
que ofrecen "Soluciones maravillosas con Grandes Volúmenes de Datos que
resuelven CASI TODO LO INIMAGINABLE, gracias al nuevo paradigma".
Sin embargo, dada la gran ebullición del mundo de Grandes Volúmenes de Datos
y las promesas que casi todo lo podía hacer, los corporativos empezaron a
solicitar cada día más soluciones a problemas complejos.
Así se inicia una era de aplicaciones más complejas con varias etapas que
requieren algoritmos más elaborados enfocadas al USO y en particular al aspecto
PREDICTIVO con grandes volúmenes de datos.
Por ejemplo, algoritmos de Aprendizaje automatizado (Machine Learning, ML) con
varias etapas que requieren algoritmos iterativos. Es decir, que se realice un
cálculo y que éste sea el dato inicial de otro cálculo y así sucesivamente.
También se requieren aplicaciones que estudien las relaciones de datos, por
ejemplo en las aplicaciones que surgen de redes sociales como LinkedIn un sitio
web fundado en 2002, Twitter en 2006, Facebook en 2006 y otras.
En este contexto se cuenta con la Teoría de Grafos y los sistemas de
procesamiento de grafos (Graph processing) que requieren manejar miles de
millones de datos y relaciones entre estos.
Así mismo, las búsquedas iniciales se elaboran con más detalle y se necesitan
mecanismos de Elaboración de Solicitudes (Queries) más complejos e iterativos,
por lo que se requiere un lenguaje "SQL en los Grandes Volúmenes de Datos"
(BigData SQL).
Estas características de los procesos de Grandes Volúmenes NO SE OFRECIAN
en los desarrollos de los años 2006 - 2008, por lo que surgen grupos de
investigadores de universidades que enfocan desde otro punto de vista la
problemática BigData, alejados de los intereses de grandes grupos del BigData
comercial como Google, Yahoo, Twitter, IBM, SAS, SAP, Cloudera, y todas las
compañías que han surgido alrededor del BigData.
Así surgen en febrero 2011, en particular en la Universidad de California en
Berkeley un grupo de profesores y tesistas de doctorado que enfocan el problema
del Almacenamiento y Computo Distribuido de Grandes Volúmenes desde una
perspectiva diferente y se funda el Laboratorio AMPLab, ("Algorithms, Machines,
and People") que tiene como objetivo convertir los datos en información ("turning
data into information"). Entre los principales patrocinadores comerciales de inicio
en 2011, se cuenta con: Google, SAP, Amazon.com, EBAY, HUAWEI, IBM, Intel,
Microsoft, NetApp, NEC, VMware y Cloudera.
En su sitio ("https://amplab.cs.berkeley.edu/about/") podemos leer:
"For years, research in fields such as machine learning (ML), data mining,
databases, information retrieval, natural language processing, and speech
recognition have steadily improved their techniques for revealing the information
lying within otherwise opaque datasets."
Durante varios años, la investigación en campos como el Aprendizaje Automático
(ML), minería de datos, bases de datos, recuperación de información,
procesamiento del lenguaje natural y reconocimiento de voz han mejorado
constantemente sus técnicas para revelar la información que se encuentra
inmersa en los conjuntos de datos, que de otra manera permanecería opaca.
En el AMPLab se dan cita ciencias de la computación y dominios de aplicaciones
con gran volúmenes de datos para abordar el problema del estudio analítico de
Grandes Volúmenes de Datos ("Big Data analytics").
Sin embargo, tiempo atrás en ámbito de tesis doctorales ya se tenía un gran
avance y así desde 2009 se tienen contribuciones por ejemplo en el aspecto de
Administración de Recursos Compartidos de una red de computadoras o "cluster"
y un sistema operativo que los administre, que se denomina MESOS.
Por lo que en 2009 nace el proyecto de investigación SPARK en la Universidad
de California en Berkeley, y que se declara como código abierto en 2010 y en junio
de 2013 se integra como un proyecto de la organización Apache
Algunos datos de MESOS
Leemos en su página
"Mesos is a cluster management platform that manages distributed hardware
resources into a single pool of resources that can be used by application
frameworks to efficiently manage workload distribution for both batch jobs and
long-running services"
Mesos es una plataforma de gestión de clúster que gestiona distribuye los
recursos de hardware en un único conjunto (pool) de recursos que pueden ser
utilizados por los entornos de aplicaciones(frameworks) para gestionar de manera
eficiente la distribución de la carga de trabajo tanto para los trabajos por lotes y
como para los servicios de larga duración.
Mesos permite el desarrollo y ejecución de sistema distribuidos con administración
eficiente de recursos ("Develop and run resource-efficient distributed systems").
Características (Features)
1) Permite tener un nodo Maestro (master) duplicado con tolerancia a fallos
utilizando ZooKeeper
("Fault-tolerant replicated master using ZooKeeper")
2) Escalabilidad a más de 10,000 nodos
("Scalability to 10,000s of nodes")
3) Aislamiento entre tareas con utilizando el mecanismo Linux Containers
("Isolation between tasks with Linux Containers")
4) Planificación de multi-recursos, teniendo en cuenta la memoria y el CPU
("Multi-resource scheduling, memory and CPU aware")
5) Interfaces de programación (APIs) en Java, Python y C ++ para el desarrollo de
nuevas aplicaciones paralelas
("Java, Python and C++ APIs for developing new parallel applications")
6) Interfaz de Usuario basada en Web, que permite monitorear el estado del
clúster
("Web UI for viewing cluster state")
Hoy existe un gran número de instituciones que utilizan Mesos, entre las más
famosas tenemos a Twitter y otras:
1) Conviva: (http://www.conviva.com) Conviva’s real-time big data processing
platform enables the delivery of a TV-quality experience over the Internet. Any
network. Any device. Any time.
2) eBay. (http://www.ebay.com) ebay es un sitio destinado a la subasta de
productos a través de Internet.
3) Netflix. Netflix, Inc. es una empresa comercial americana de entretenimiento
que proporciona mediante tarifa plana mensual streaming (flujo) multimedia
(principalmente, películas y series de televisión) bajo demanda por Internet y de
DVD-por-correo, donde los DVD se envían mediante Permit Reply Mail.
4) PayPal. PayPal es una empresa estadounidense cofundada por entre otros
Peter Thiel y Elon Musk, independiente y perteneciente al sector del comercio
electrónico por Internet que permite la transferencia de dinero entre usuarios que
tengan correo electrónico, una alternativa al tradicional método en papel como los
cheques o giros postales. PayPal también procesa peticiones de pago en
comercio electrónico y otros servicios web, por los que cobra un porcentaje al
vendedor. La mayor parte de su clientela proviene del sitio de subastas en línea
eBay.
5) Vimeo. Vimeo es una red social de Internet basada en videos, lanzada en
noviembre de 2004 por la compañía InterActiveCorp (IAC). El sitio permite
compartir y almacenar videos digitales para que los usuarios comenten en la
página de cada uno de ellos. Los usuarios deben estar registrados para subir
videos, crear su perfil, cargar avatares, comentar y armar listas de favoritos.
En los sistemas de administración de Grandes Volúmenes (BigData) tenemos
entre otros:
1) Cassandra es una base de datos distribuida de alta disponibilidad y desempeño
con tolerancia a fallos.
2) Hypertable un sistema de distribuido de almacenamiento y procesamiento de
datos estructurados y no estructurados de alto rendimiento y escalable
Es un sistema de código abierto basado en el sistema propietario de Google
BigTable.
El modelo de datos RDD y su instrumentación en un ambiente MESOS
Desde el surgimiento del marco de referencia MapReduce se tiene un conjunto de
aplicaciones de Grandes Volúmenes de Datos que requieren compartir datos en
varias iteraciones entre cada una de éstas. En este modelo, la única forma es
crear un archivo en disco. Este mecanismo no permite la construcción sencilla ni
eficiente de algoritmos iterativos.
En MapReduce, la única forma de compartir datos entre trabajos es el uso de
memoria estable por lo que esto es muy lento.
En este contexto y dado que hoy la memoria RAM (In-memory) es más accesible y
se tienen equipos con gran capacidad de memoria RAM, se analiza utilizar la
memoria RAM como un mecanismo para compartir datos.
La RAM es de 10 a 100 veces más rápida que la red o el disco duro. Sin embargo,
los conceptos de datos en Hadoop Distributed File Systems (HDFS) no la utilizan
por lo que una área de innovación es la utilización de la memoria RAM para la
construcción de sistemas distribuidos tolerantes a fallas que sean muy eficientes.
Este es un reto donde se tienen experiencias pasadas como RAMCloud, Piccolo y
otros modelos basados en actualización a nivel del registro (fine-grained). Estos
modelos para lograr la tolerancia a fallas utilizan la técnica de replicación de datos
en disco.
Reto: ¿Cómo diseñar un concepto de memoria RAM distribuida que sea
tolerante a fallas?
Se define un concepto denominado Conjuntos Resilientes de Datos Distribuidos,
(en inglés Resilient Distributed Datasets, RDD), que tiene limitaciones como:
1) NO PUEDE CAMBIARSE, es decir es inmutables
2) Es una colección particionada de registros
3) Solo se puede construir con transformaciones predefinidas que actúan sobre
TODO el conjunto (coarse-grained), como un mapeo (map), un filtrado (filter) una
unión (join), y otras transformaciones predefinidas dentro del modelo.
4) NO EXISTE replicación para ofrecer la tolerancia a fallas, sino se define un
mecanismo de LINAJE (lineage) en donde se genera una bitácora (log) de las
transformaciones que permitieron su creación. Se almacena el grafo de las
transformaciones que se utilizaron para construir la partición del RDD que se
perdió. Si fallara una partición del conjunto, entonces se re-ejecuta el cómputo
cuando sea necesario para regenerar la partición perdida.
Este es un modelo de almacenamiento distribuido con tolerancia a fallas que es
general y que permite expresar otros modelos actualmente en uso de algoritmos
paralelos.
Por ejemplo, es posible unificar con el modelo RDD, los conceptos de BigData
como los modelos de flujo de datos (Data flow models) MapReduce, Dryad,
Pregel de Google, y otros más.
El sistema SPARK
Para instrumentar el concepto de RDD, se genera un sistema denominado SPARK
que tiene varias capas y en particular una biblioteca de programación API, con la
filosofía del DryadLINQ con el lenguaje de programación SCALA.
Recordemos que DryadLINQ es un ambiente de programación propuesto por
Microsoft (ref: http://research.microsoft.com/en-us/projects/dryadlinq) para escribir
aplicaciones en paralelo con datos de gran volumen que se ejecutan en una red
de PC. ("large-scale data parallel applications running on large PC clusters"). El
ambiente consta de un motor de ejecución distribuida llamado Dryad ("distributed
execution engine") y el lenguaje de solicitudes integrado (LINQ) ("Language
Integrated Query").
El proyecto Dryad fue abandonado por Microsoft en 2011, para enfocar su
estrategia de BigData en el proyecto Apache Hadoop.
Una aplicación en el ambiente Dryad se modela como un grafo acíclico dirigido
("directed acyclic graph DAG"). El grafo DAG define el flujo de datos de la
aplicación ("dataflow of the application"), en donde los vértices del grafo definen
las operaciones que se llevan a cabo en los datos.
En SPARK se tiene un intérprete interactivo construido en base al intérprete de
SCALA.
Para realizar la operación o uso de un RDD se tienen dos conceptos:
1) el concepto de transformación que construye un nuevo RDD ("build new
RDDs")
2) el concepto de acción en donde a partir de un RDD se realizan cálculos y se
ofrecen resultados ("compute and output results")
Un concepto fundamental en SPARK es el particionamiento de un RDD ("RDD's
partitioning"), es decir el control de cómo se particiona a lo largo de los nodos
("layout across nodes")
Otro concepto estratégico es su persistencia ("persistence"), es decir en donde
se almacena si en la RAM, o en el disco, o en otro lado.
Otros modelos de cómputo distribuido que pueden instrumentarse con SPARK
Por medio del concepto RDD es posible expresar modelos como
1) MapReduce, DryadLINQ. Para el procesamiento distribuido en HDFS
2) PREGEL. Para el procesamiento de grafos, el modelo de Google PREGEL
3) Iterative MapReduce. En el procesamiento iterativo Iterative MapReduce
4) Hive SQL. Para la instrumentación de un lenguaje SQL en BigData
La gran ventaja de SPARK, es que estos modelos de cómputo distribuido de
unifican y es posible MEZCLARLOS eficientemente para compartir los datos entre
todos éstos de forma transparente.
El trabajo de SPARK está inspirado en técnicas como:
1) RAMCloud, Piccolo, GraphLab, parallel DBs. Inconvenientes: Requieren
escrituras al registro ("fine-grained"), por lo que se necesita la replicación de datos
2) Pregel, iterative MapReduce. Inconvenientes: Son modelos especializados que
no facilitan la ejecución de queries arbitrarios o particulares
3) DryadLINQ, FlumeJava. Inconvenientes: Es un API que no permite compartir
conjuntos de datos de forma eficiente entre varios queries iterativos
4) Nectar. Manejo automático de Datos y Computo en Centros de Datos
("Automatic Management of Data and Computation in Datacenters").
Inconvenientes: Se ofrece el cache de expresiones, pero solo en un sistema de
archivos distribuido y no en HDFS.
En Nectar, los datos y su cómputo se tratan de manera indistinta. Los conjuntos de
datos construidos por cómputos, se identifica de forma inequívoca por los
programas que los generan. Estos conjuntos pueden regenerarse fácilmente a
partir de los programas que los identifican.
(ref: www.usenix.org/events/osdi10/tech/full_papers/Gunda.pdf)
5) PACMan. Parallel All-or-nothing Cache MANager, un sistema de cache en RAM
para trabajos en paralelo ("an in-memory caching system for parallel jobs")
desarrollado en AMPLab en la Universidad de Berkeley con la participación de Ion
Stoica. Inconvenientes: Se tiene un manejo de memoria cache en HDFS, pero se
escribe a disco duro
(ref: https://www.usenix.org/conference/nsdi12/technicalsessions/presentation/ananthanarayanan)
Descargar