Cloud Computing y MapReduce

3.659 visualizaciones

Publicado el

Trasparencias de un curso de verano sobre CloudComputing y MapReduce

Publicado en: Tecnología

Cloud Computing y MapReduce

  1. 1. Cloud Computing<br />Jose Emilio Labra Gayo<br />University of Oviedo, Spain<br />http://www.di.uniovi.es/~labra<br />
  2. 2. Esquema de la presentación<br />Motivación<br />Cloud Computing<br />MapReduce<br />
  3. 3. Motivación<br />La era de los datos<br />Generación volúmenes de datos/día <br />En 2009, récord de crecimiento (60%)<br />Se estima en 800.000petabytes (1PB = 1millón GB)<br />Fuente: IDC The digital UniverseDecade: Are youready?<br />http://www.emc.com/collateral/demos/microsites/idc-digital-universe/iview.htm<br />
  4. 4. Ejemplos de fuentes de datos<br />Éxito de la web:<br />Mayor participación si cabe en la Web 2.0<br />Abaratamiento de dispositivos<br />Cámaras digitales, Teléfonos móviles, etc.<br />Youtube contiene unos 144 millones de vídeos*<br />Redes sociales<br />Facebook contenía 15 billones de fotos en 2009**<br />* http://beerpla.net/2008/08/14/how-to-find-out-the-number-of-videos-on-youtube/<br />** http://www.facebook.com/note.php?note_id=76191543919<br />
  5. 5. Otras fuentes de datos<br />Internet de las cosas<br />Cada vez más dispositivos estarán conectados a Internet<br />Aumento de Sensores y generadores de datos<br />Acelerador de partículas LHC producirá 15 petabytes de datos al año<br />http://public.web.cern.ch/public/en/lhc/Computing-en.html<br />Frigorífico con Internet<br />http://www.youtube.com/watch?v=sfEbMV295Kk&feature=player_embedded<br />
  6. 6. Grandes Centros de Datos<br />Google, Yahoo!, Amazon, etc. <br />Centro de datos de Yahoo!<br />
  7. 7. Cloud Computing<br />Pegatina creada por Brian Fitzpatrick para <br />Google CodeHosting en 2006<br />
  8. 8. Cloud Computing<br />Cloud computing = Servicios de grandes compañías (Google, Amazon,…) que pueden ser alquilados por clientes externos<br />Ejemplos de servicios:<br />Recursos computacionales (ciclos CPU)<br />Almacenamiento<br />Entornos de ejecución completos<br />
  9. 9. Ventajas<br />Precio<br />Amazon EC2 = Máquinas virtuales a 10¢/hora<br />Amazon S3 = Almacenamiento 15¢/mes/Gb<br />Algunos servicios = gratuitos!<br />Escalabilidad<br />Se paga en función del consumo<br />Acceso a potentes centros de datos<br />Facilidad de uso y mantenimiento<br />
  10. 10. Ventajas<br />Independencia dispositivos y localización<br />Acceso desde cualquier navegador en cualquier sitio<br />Eficiencia: <br />Centralización de infraestructuras, ahorro de energía, control compartido de carga<br />Fiabilidad: <br />Réplicas, recuperación de desastres<br />
  11. 11. Tipos de Cloud Computing<br />No todas las nubes ofrecen todos los servicios<br />Se podrían clasificar en:<br />SaaS: Software as a Service<br />PaaS: Platform as a Service<br />IaaS: Infraestructure as a Service<br />SaaS<br />PaaS<br />IaaS<br />
  12. 12. IaaS: Infraestructura<br />Se ofrecen recursos computacionales<br />Capacidad de computación<br />Almacenamiento<br />Entorno virtualizado de máquinas conectadas por red<br />Ejemplos: <br />Eucalyptus, Amazon EC2, Amazon S3<br />
  13. 13. PaaS: Plataforma<br />Se ofrece una solución instalada y configurada como servicio (plataforma)<br />Aplicaciones:<br />Hosting para aplicaciones Web<br />Entornos de desarrollo<br />Facilitan despliegue rápido y barato<br />Ejemplos: <br />Google AppEngine, VMForce, AppScale<br />
  14. 14. SaaS: Software<br />Aplicación software como servicio bajo demanda<br />El usuario no tiene que instalar/configurar aplicaciones<br />Reduce coste de adquisición de software<br />Ejemplos: <br />Aplicaciones Google (Gmail, GDocs, etc)<br />
  15. 15. Retos de Cloud Computing<br />Legalidad<br />¿Almacenar datos en otros países?<br />¿Y si no se cumple el servicio?<br />Seguridad, privacidad<br />¿Es más seguro tener los datos en nuestra máquina o en un data-center?<br />Dependencia: ¿Nuevos monopolios? ¿Interoperabilidad entre nubes?<br />Sostenibilidad: ¿Consumo energético?<br />
  16. 16. MapReduceProgramando en la nube<br />
  17. 17. MapReduce<br />Pensado para procesar grandes cantidades de datos<br />Programador especifica computación mediante 2 funciones: map y reduce<br />Adaptado a ejecución distribuida en múltiples nodos<br />Control de nodos que fallan, balance de carga, etc<br />
  18. 18. MapReduce<br />Desarrollado por Google<br />Publicado en 2004<br />Implementación interna propietaria<br />Hadoop: implementación open source<br />Versión inicial de Yahoo!<br />Actualmente Proyecto Apache<br />Adopción industrial<br />Facebook, last.fm, etc. <br />
  19. 19. Características de MapReduce<br />Computaciones distribuidas<br />Troceado de datos de entrada<br />Tolerancia a fallos de nodos<br />Portabilidad en nodos con hardware/software heterogéneo<br />Procesado por lotes de grandes cantidades de datos<br />Write-once. Read-many<br />
  20. 20. Orígenes funcionales<br />Programación funcional:<br />Modelo de programación basado en:<br />Ausencia de efectos laterales<br />Funciones de orden superior<br />Funciones similares a mapy reduce llevan utilizándose mucho tiempo en programación funcional<br />
  21. 21. Map en P. funcional<br />Aplica una función a todos los elementos de una lista<br />Lista de entrada<br />función<br />Lista de salida<br />En Haskell: <br />Calcular la longitud de todas las palabras de una lista<br />> maplength [“esto”, “es”, “un”, “ejemplo”]<br />[4,2,2,7]<br />Dar la vuelta a todas las palabras de una lista<br />> map reverse ["esto","es","un","ejemplo"]<br /> ["otse","se","nu","olpmeje“]<br />
  22. 22. Reduce en P. funcional<br />Transforma una lista en un valor combinando los elementos entre sí<br />Lista de entrada<br />Valor de salida<br />En Haskell (reduce fold)<br />Suma de los elementos de una lista<br />> foldr (+) 0 [1,2,3,4,5]<br />15<br />Producto de los elementos de una lista<br />> foldr (*) 1 [1,2,3,4,5]<br />120<br />
  23. 23. MapReduce<br />Inspirado en P. funcional: <br />2 componentes: mapper y reducer<br />Los datos se trocean para su procesamiento<br />Cada dato asociado a una clave<br />Transforma [(clave1,valor1)] en [(clave2,valor2)]<br />v2<br />c2<br />MapReduce<br />v1<br />c1<br />Entrada: <br />[(Clave1,Valor1)]<br />v2<br />c2<br />Salida: <br />[(Clave2,Valor2)]<br />v1<br />c1<br />v2<br />c2<br />v1<br />c1<br />v2<br />c2<br />
  24. 24. Mapper<br />Para cada (clave1,valor1) devuelve una lista de (clave2,valor2)<br />Tipo: (clave1, valor1)  [(clave2,valor2)]<br />v1<br />k1<br />mapper<br />vi1<br />c1<br />v2<br />k2<br />v3<br />k1<br />mapper<br />vi2<br />c2<br />v4<br />k3<br />v5<br />k1<br />v6<br />k1<br />mapper<br />vi3<br />c3<br />v7<br />k3<br />
  25. 25. Mezcla y ordenación de claves<br />El sistema se encarga de mezclar y ordenar resultados intermedios en función de las claves<br />Mezcla y ordena<br />v1<br />k1<br />v1<br />v3<br />v5<br />v6<br />k1<br />v2<br />k2<br />v3<br />k1<br />v4<br />v2<br />k3<br />k2<br />v5<br />k1<br />v6<br />k1<br />v4<br />k3<br />v7<br />v7<br />k3<br />
  26. 26. Reducer<br />Para cada clave2, toma la lista de valores asociada y los combina en uno solo<br />Tipo: (clave2, [valor2])  (clave2,valor2)<br />reducer<br />v1<br />v3<br />v5<br />v6<br />vf1<br />k1<br />k1<br />reducer<br />v2<br />vf2<br />k2<br />k2<br />reducer<br />vf3<br />k3<br />v4<br />k3<br />v7<br />
  27. 27. Esquema general<br />Mezcla y ordena<br />v1<br />k1<br />reducer<br />vf1<br />k1<br />mapper<br />v1<br />v3<br />v5<br />v6<br />k1<br />vi1<br />c1<br />v2<br />k2<br />v3<br />k1<br />reducer<br />mapper<br />vi1<br />c1<br />vf2<br />k2<br />v4<br />v2<br />k3<br />k2<br />v5<br />k1<br />v6<br />reducer<br />vf3<br />k3<br />k1<br />v4<br />k3<br />v7<br />mapper<br />vi1<br />c1<br />v7<br />k3<br />MapReduce<br />
  28. 28. Ejemplo: Cuenta palabras<br />Mezcla y ordena<br />1<br />a<br />reducer<br />4<br />a<br />mapper<br />1<br />1<br />1<br />1<br />a<br />a b<br />d1<br />1<br />b<br />1<br />a<br />mapper<br />reducer<br />a c a<br />d2<br />1<br />b<br />1<br />1<br />c<br />b<br />1<br />a<br />1<br />2<br />c<br />a<br />reducer<br />1<br />c<br />1<br />mapper<br />a c<br />d3<br />1<br />c<br />MapReduce<br />// suma la lista de números de cada palabra<br />reducer(p,ns) {<br /> sum = 0 <br /> for each nin ns { sum += n; } <br /> emit (p, sum)<br />}<br />// devuelve cada palabra con un 1<br />mapper(d,ps) {<br />for eachp inps: <br /> emit (p, 1)<br />}<br />
  29. 29. Sistema MapReduce<br />El entorno de ejecución se encarga de<br />Planificación: Cada trabajo (job) se divide en tareas (tasks)<br />Co-localización de datos/código<br />Cada nodo computacional contiene sus datos de forma local (no existe un sistema central)<br />Sincronización: <br />Tareas reduce deben esperar final de fase map<br />Gestión de errores y fallos<br />Alta tolerancia a fallos de los nodos computacionales<br />
  30. 30. Sistema de ficheros distribuido<br />Google desarrolló sistema distribuido GFS<br />Hadoop creó HDFS<br />Ficheros se dividen en bloques (chunks)<br />2 tipos de nodos: <br />Namenode (maestro), datanodes (servidores datos)<br />Datanodes almacenan diferentes bloques<br />Replicación de bloques<br />Namenodecontiene metadatos<br />En qué nodo está cada trozo<br />Comunicación directa entre clientes y datanodes<br />
  31. 31. Sistema de ficheros distribuido<br />Namenode<br />fichero1: (B1 – N1 N2, B2 – N1 N2 N3)<br />fichero2: (B3 – N2 N3, B4 – N1 N2)<br />fichero3: (B5 – N1 N3)<br />Cliente1<br />Cliente2<br />B1<br />B1<br />B4<br />B5<br />B2<br />Datanodes<br />B4<br />B5<br />B3<br />B3<br />B2<br />B2<br />Datos publicados por Google (2007)<br />200+ clusters<br />Muchos clusters de 1000+ máquinas<br />Pools de miles de clientes<br />4+ PB <br />Tolerancia fallos de HW/SW<br />N1<br />N2<br />N3<br />
  32. 32. Ejercicio: Índice Inverso<br />Dada una serie de documentos, obtener la lista de palabras asociando a cada palabra el documento en el que aparece.<br />Ordenar los documentos según el mayor número de apariciones<br />Índice inverso<br />lugar doc16, doc21, doc23, doc45<br />Manchadoc22, doc2, doc4, doc9, doc11<br />Quijotedoc22, doc1, doc2, doc7<br />. . .<br />Documento 1<br />En un lugar de la Mancha ,de cuyo nombre no quiero acordarme no ha mucho tiempo que vivía un hidalgo de los de lanza en astillero, adarga antigua, rocín flaco y galgo corredor. Una olla de algo más…<br />
  33. 33. Índice inverso: buscadores<br />Esquema básico de un buscador<br />consulta<br />Web<br />Búsqueda<br />P1<br />P1<br />P1<br />Web <br />crawling<br />Indexado<br />Índice<br />palabra1 doc1, doc23, doc4,…<br />palabra2 doc54,doc23<br />palabra3 doc1,doc7,d1oc9,doc5...<br />palabra4 doc7,doc9,doc10<br />…<br />Documentos<br />en caché<br />
  34. 34. Índice inverso<br />Mezcla y ordena<br />d1<br />a<br />d2<br />a<br />reducer<br />d1<br />d3<br />a b<br />mapper<br />d1<br />d2<br />d2<br />d3<br />d1<br />a<br />d1<br />b<br />d2<br />a<br />a c a<br />d2<br />d1<br />b<br />mapper<br />reducer<br />d2<br />d1<br />c<br />b<br />d2<br />a<br />d2<br />c<br />d3<br />d3<br />a<br />reducer<br />d2<br />c<br />d3<br />a c<br />mapper<br />d3<br />d3<br />c<br />MapReduce<br />// ordena la lista de documentos por <br />// importancia<br />reducer(p,ds) {<br /> ds1 = ordena(ds)<br /> emit (p, ds1)<br />}<br />// devuelve cada palabra con su <br />// documento<br />mapper(d,ps) {<br />for eachp inps: <br /> emit (p, d)<br />}<br />
  35. 35. Ejercicio: Canciones populares<br />A partir de los logs de los usuarios de un servidor de música, obtener el número de veces que se escucha cada canción<br />Inspirado en last.fm<br />2/3/2010 9:41 Ana C1<br />2/3/2010 9:42 Dani C2<br />2/3/2010 9:44 Ana C2<br />2/3/2010 10:01 Luis C1<br />2/3/2010 10:10 Ana C3<br />2/3/2010 10:15 Ana C2<br />2/3/2010 10:20 Dani C2<br />2/3/2010 10:21 Luis C4<br />2/3/2010 10:24 Luis C2<br />2/3/2010 10:26 Luis C4<br />2/3/2010 10:27 Ana C4<br />C1 2 oyentes, 2 escuchas<br />C2 3 oyentes, 5 escuchas<br />C3 2 oyentes, 2 escuchas<br />C4 2 oyentes, 3 escuchas<br />Analizador<br />
  36. 36. Ejercicio: canciones populares<br />Mezcla y ordena<br />A<br />A C1<br />C1<br />9:41<br />mapper<br />D C2<br />D<br />9:42<br />C2<br />A C2<br />A<br />9:44<br />C2<br />reducer<br />2<br />2<br />mapper<br />C1<br />L<br />L C1<br />C1<br />10:01<br />A<br />C<br />C1<br />A C3<br />A<br />reducer<br />3<br />10:10<br />5<br />C3<br />C2<br />C2<br />D <br />A<br />A<br />D <br />L<br />A C2<br />10:15<br />A<br />C2<br />reducer<br />1<br />C3<br />mapper<br />A<br />C3<br />D C2<br />D<br />10:20<br />C2<br />reducer<br />2 <br />3<br />C4<br />L C4<br />10:21<br />L<br />L<br />L<br />A<br />C4<br />C4<br />L<br />L C2<br />C2<br />10:24<br />mapper<br />L C4<br />10:26<br />L<br />C4<br />MapReduce<br />A C4<br />10:27<br />A<br />C4<br />
  37. 37. Ejercicio: Amigos comunes<br />Encontrar la lista de amigos comunes<br />Inspirado en Facebook<br />Ana  Dani Juan Luis<br />Dani Ana Juan Luis Mar<br />Juan  Ana Dani Luis Mar<br />Luis  Ana Dani Juan Mar<br />Mar  Dani Juan Luis<br />Ana<br />Dani<br />Mar<br />A  D J L<br />D  A J L M<br />J  A D L M<br />L  A D J M<br />M  D J L<br />Juan<br />Luis<br />Si Ana visita la página de Juan, el sistema debería mostrar Dani, Luis<br />
  38. 38. Ejercicio: Amigos comunes<br />A D<br />D J L<br />A J<br />D J L<br />mapper<br />Mezcla y ordena<br />D J L<br />A<br />reducer<br />A L<br />D J L<br />J L <br />D J L <br />A J L M <br />A D<br />A D<br />D L <br />reducer<br />A D<br />A J L M<br />A J<br />A J<br />D J L <br />A D L M <br />D J<br />A J L M<br />mapper<br />D<br />A J L M<br />reducer<br />D J <br />A L<br />D J L <br />A D J M <br />A L<br />D L<br />A J L M<br />D M<br />A J L M<br />reducer<br />A L M <br />D J<br />A J L M<br />A D L M <br />D J<br />A J<br />A D L M<br />reducer<br />A J M <br />D L<br />A J L M<br />A D J M <br />D L<br />D J<br />A D L M<br />mapper<br />J<br />A D L M<br />reducer<br />J L <br />D M<br />J L<br />A D L M<br />A J L M<br />D J L <br />D M<br />J M<br />A D L M<br />reducer<br />A D M <br />J L<br />A D L M<br />A D J M <br />J L<br />A L<br />A D J M<br />reducer<br />D L <br />A D L M<br />D J L<br />J M<br />J M<br />D L<br />A D J M<br />mapper<br />L<br />A D J M<br />J L<br />A D J M<br />reducer<br />D J <br />A D J M <br />D J L <br />L M<br />L M<br />L M<br />A D J M<br />D J L<br />D M<br />MapReduce<br />M<br />D J L<br />mapper<br />D J L<br />J M<br />D J L<br />L M<br />
  39. 39. Ejercicio: Similaridad<br />A partir de los logs, encontrar número de canciones en común entre 2 usuarios<br />Inspirado en Amazon (libros similares), Facebook (posibles amigos), etc.<br />Habitualmente se realizan varios pasos mapReduce<br />
  40. 40. Ejemplo: Similaridad<br />A C1<br />9:41<br />D C2<br />9:42<br />A C2<br />9:44<br />Mezcla y ordena<br />A C<br />C1, 1<br />reducer<br />mapper<br />C1, 1 <br />1 <br />A C<br />A C<br />L C1<br />A<br />C<br />10:01<br />C1<br />A D<br />C2, 2<br />reducer<br />A D<br />A D<br />A C3<br />10:10<br />C2, 2 <br />2 <br />C2<br />D <br />A<br />A<br />D <br />L<br />A L<br />C2, 1<br />MapReduce1<br />A C2<br />10:15<br />reducer<br />A L<br />C4, 2<br />C2 1 <br />C4 2 <br />3<br />A L<br />A L<br />A<br />mapper<br />C3<br />D C2<br />10:20<br />L<br />L<br />A<br />C4<br />L C4<br />10:21<br />MapReduce2<br />L C2<br />10:24<br />L C4<br />10:26<br />A C4<br />10:27<br />
  41. 41. MapReduce en la práctica<br />Múltiples aplicaciones:<br />Google en 2007, 20petabytes al día, en una media de 100mil trabajos mapreduce/día<br />El algoritmo PageRank puede implementarse mediante MapReduce<br />Casos de éxito: <br />Traducción automática, Similaridad entre ítems, ordenamiento (Hadoop ordena 500GB/59sg (véase: sortbenchmark.org)<br />Otras compañías: last.fm, facebook, Yahoo!, twitter, etc.<br />
  42. 42. Implementaciones MapReduce<br />Google (interna)<br />Hadoop (open source)<br />CloudMapReduce (basado en servicios de Amazon)<br />Aster Data (SQL)<br />Greenplum (SQL)<br />Disco (Python/Erlang) <br />Holumbus(Haskell)<br />
  43. 43. Librerías/lenguajes MapReduce<br />Hive (Hadoop): lenguaje de consulta inspirado en SQL<br />Pig (Hadoop): lenguaje específico para definir flujos de datos<br />Cascading: API para especificar flujos de datos distribuidos<br />Flume Java (Google) <br />Dryad (Microsoft)<br />
  44. 44. Agradecimientos<br />Parte del contenido de esta presentación ha sido tomado de otras presentaciones similares de:<br />Jimmy Lin<br />Jeff Dean<br />Jose Manuel Redondo<br />

×