buscador vertical escalable con hadoop
TRANSCRIPT
![Page 1: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/1.jpg)
Caso práctico con Hadoop: Un buscador vertical escalable
Iván de Prado Alonso, Cofundador de Datasalt Twitter: @ivanprado
![Page 2: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/2.jpg)
Contenidos
§ El problema § La solución obvia § Cuando la solución obvia falla… § … Hadoop viene al rescate § Ventajas y Desventajas § Mejoras
![Page 3: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/3.jpg)
¿Qué es un buscador vertical?
Buscador Vertical
Proveedor 1
Proveedor 2
Feed
Feed
Búsquedas
Búsquedas
![Page 4: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/4.jpg)
Algunos de ellos
![Page 5: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/5.jpg)
Arquitectura “obvia”
Base de Datos
Feed
Indice Lucene/Solr
Search Page
Descargar y Procesar
Existe?Ha cambiado?
Inserta/actualiza
Inserta/actualiza
Lo primero que llega a la cabeza
![Page 6: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/6.jpg)
Funcionamiento
§ Descarga del feed § Para cada registro en el feed
• Comprobar si ya lo tenemos en la BD • Si ya existe y ha cambiado, actualizar
ª la BD ª El índice
• Si no existe, insertar en ª la BD ª el índice
![Page 7: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/7.jpg)
Funcionamiento (II)
§ La BD proporciona • Un sistema para comprobar la existencia o no
de un registro (evitar duplicados) • Gestión de los datos vía SQL
§ Lucene/Solr proporciona • Alta velocidad de búsqueda • Búsquedas por campos estructurados • Búsquedas textuales • Faceting
![Page 8: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/8.jpg)
Pero si todo va bien…
Feed
Feed
Feed
Feed
Feed
Feed
Feed
Feed Feed
Feed
Feed
Feed
FeedFeed
Feed
Feed
Feed
FeedFeed
Feed
Feed
Feed
Feed
Feed
Feed
Feed
Feed
Feed
Feed
Feed
FeedFeed
Feed
Feed
Feed
![Page 9: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/9.jpg)
Atasco Monumental
![Page 10: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/10.jpg)
“Swiss army knife of the 21st century”
Media Guardian Innovation Awards
http://www.guardian.co.uk/technology/2011/mar/25/media-guardian-innovation-awards-apache-hadoop
![Page 11: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/11.jpg)
Hadoop
“The Apache Hadoop software library is a
framework that allows for the distributed processing
of large data sets across clusters of computers using
a simple programming model”
De la página de Hadoop
![Page 12: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/12.jpg)
Sistema de Ficheros
§ Sistema de ficheros distribuido (HDFS) • Bloques grandes: 64 Mb • Tolerante a Fallos (replicación) • Habitualmente ristras de pares [clave,
valor]
![Page 13: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/13.jpg)
MapReduce
§ Dos funciones (Map y Reduce) • Map(k, v) : [z,w]* • Reduce(k, v*) : [z, w]*
§ Ejemplo: contar palabras • Map([documento, null]) -> [palabra, 1]* • Reduce(palabra, 1*) -> [palabra, total]
§ MapReduce y SQL • SELECT palabra, count(*) GROUP BY palabra
§ Ejecución distribuida en un cluster con escalabilidad horizontal
![Page 14: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/14.jpg)
Vale, mola mucho, pero… ¿cómo soluciona esto mi
problema?
![Page 15: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/15.jpg)
Y es que…
§ Hadoop no es una DB § Hadoop “aparentemente” sólo
procesa datos § Hadoop no permite “lookups”
Hadoop supone un cambio de paradigma que cuesta asimilar
![Page 16: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/16.jpg)
Arquitectura
![Page 17: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/17.jpg)
Filosofía
§ Reprocesarlo todo siempre. ¡TODO! § ¿Por qué?
• Más tolerante a fallos • Más flexible • Más eficiente. Ej:
ª Con un HD de 7200 RPM – Random IOPS – 100 – Lectura secuencial – 40 MB/s – Tamaño de registro: 5 Kb
ª … con que un 1,25% de los registros cambien, es más rápido reescribirlo todo que hacer accesos aleatorios de actualización.
– 100 MB, 20.000 registros » Lectura secuencial: 2,5 sg » Lectura aleatoria: 200 sg
![Page 18: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/18.jpg)
Fetcher
§ MapReduce • Input: [feed_url, null]* • Mapper: identidad • Reducer(feed_url,
null*) ª Descargar el feed y
subirlo a un directorio en el HDFS
Reducer Task
Reducer Task
Reducer Task
HDFS
Se descarga los feeds y los almacena en el HDFS
![Page 19: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/19.jpg)
Processor
§ MapReduce • Input: [ruta_feed, null]* • Map(ruta_feed, null) : [id, documento]*
ª Parsea el feed y lo convierte en una serie de documentos
• Reducer(id, [documento]*): [id, documento] ª Recibe una lista de documentos y se queda con el
más reciente (deduplicación) ª Necesidad de un identificador único global
(idProveedor + idInterno) • Output: [id, documento]*
Parsea los feeds, los convierte en documentos y los deduplica
![Page 20: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/20.jpg)
Processor (II)
§ Posible problema: • Feeds de tamaño muy grande
ª No escala, pues no se puede dividir el trabajo
§ Solución • Escribir un InputFormat que sea capaz de
dividir cada feed en cachos procesables más pequeños
![Page 21: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/21.jpg)
Serialización
§ Writables • Serialización nativa de Hadoop • De muy bajo nivel • Tipos básicos: IntWritable, Text, etc.
§ Otras • Thrift, Avro, Protostuff • Compatibilidad hacia atrás.
![Page 22: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/22.jpg)
Indexer
Solr en producción
Reducer Task
Reducer Task
Reducer Task
Indice - Shard 1
Indice - Shard 2
Indice - Shard 3
Indice - Shard 1
Indice - Shard 2
Indice - Shard 3
Despliegue en
caliente
Despliegue en
caliente
Despliegue en
caliente
Servidor Web
Servidor Web
![Page 23: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/23.jpg)
Indexer (II)
§ SOLR-1301 • https://issues.apache.org/jira/browse/SOLR-1301 • SolrOutputFormat • 1 índice por cada reducer • Se usa el Partitioner para controlar dónde colocar
cada documento § Otra opción
• Escribir tu propio código de indexación ª Creando un nuevo output format ª Indexado a nivel de reducer. En cada llamada al reducer:
– Abres un índice – Escribes todos los registros recibidos – Cierras el índice
![Page 24: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/24.jpg)
Búsqueda y Particionado
§ Posible particionado • Horizontal
ª Las búsquedas implican todos los shards • Vertical: por tipo de anuncio, país, etc.
ª Las búsquedas se pueden restringir al shard implicado
§ Solr para servir los índices. Posibilidades ª Solr no federado
– En caso de particionamiento vertical ª Distributed Solr ª Solr Cloud
![Page 25: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/25.jpg)
Reconciliado
§ ¿Cómo registrar cambios? • Cambios en el precio, características, etc
§ Reconciliando. • MapReduce:
ª Input: [id, documento]* – De la anterior ejecución – De la ejecución actual
ª Map: identidad ª Reduce(id, [documento]*) : [id, documento]
– Te llegan todos los documentos con el mismo ID – Comparas los registros nuevos con los viejos – Almacenas en el nuevo objeto la información relevante (ej, si ha subido o bajado el precio) – Emites un solo documento.
§ Esto es el patrón más parecido a una BD que se puede ver en Hadoop
Del Fetcher Reconciliado
Documentos reconciliados
Fichero de la última ejecución
Siguientespasos
![Page 26: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/26.jpg)
Ventajas de la arquitectura
§ Escala horizontalmente • Si se programa adecuadamente
§ Alta tolerancia a fallos y bugs • Siempre se reprocesa todo
§ Flexible • Por su alto desacople, es fácil hacer grandes cambios
§ Alto desacople • Los índices son la única interacción entre los
servidores web y el back-end • Los servidores web pueden continuar funcionando
aún en el caso de que el back-end esté roto.
![Page 27: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/27.jpg)
Desventajas
§ Procesamiento por Lotes (batch oriented) • No es real-time ni “near” real-time • Ciclos de actualización de horas
§ Paradigma de programación completamente diferente • Alta curva de aprendizaje
![Page 28: Buscador vertical escalable con Hadoop](https://reader033.vdocuments.net/reader033/viewer/2022052601/559803881a28ab8b458b484c/html5/thumbnails/28.jpg)
Mejoras
§ Sistema para las imágenes § Detección difusa de duplicados § Plasam:
• Combinación de esta arquitectura con un sistema que actúe como by-pass para proveer actualizaciones “near real-time” ª Implementando un by-pass sobre los Solrs ª Sistema para mantener la coherencia de los datos
– Sin saltos hacia atrás en el tiempo
• Combina las ventajas de esta arquitectura, pero le dota de real-time
• En Datasalt tenemos un prototipo que realiza esta función.