Evolucion de big data @ mercadolibre.com
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Evolucion de big data @ mercadolibre.com

on

  • 440 views

Evolucion y algunos proyectos de BigData en Mercadolibre.com incluyendo Hadoop y Real-Time streaming

Evolucion y algunos proyectos de BigData en Mercadolibre.com incluyendo Hadoop y Real-Time streaming

Statistics

Views

Total Views
440
Views on SlideShare
417
Embed Views
23

Actions

Likes
0
Downloads
12
Comments
0

4 Embeds 23

https://www.linkedin.com 16
https://twitter.com 3
http://www.slideee.com 3
http://www.linkedin.com 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • 13 paises
  • mirando espacio
  • mirando ram

Evolucion de big data @ mercadolibre.com Presentation Transcript

  • 1. Evolución de BigData @MercadoLibre 2014
  • 2. Big Data Hoy ● 154 nodos fisicos ● 1.9 PB de espacio disponible ● ~ 7 Tb de RAM ● ~ 3000 cores
  • 3. Big Data Hoy - Crecimiento Diario ● ~= 4Tb de datos nuevos x Dia ● > 10.000.000.000 Rows nuevas x Dia
  • 4. Big Data Hoy - En cosas cotidianas 500.000 DVD’s
  • 5. Big Data Hoy - En cosas cotidianas 1800 Mac Book Pro
  • 6. Usos de BigData @ MELI ● Mejora de experiencia al Usuario ● Log Mining ● Ad Hoc Análisis
  • 7. Como empezamos ?
  • 8. Algo de Historia
  • 9. Algo de Historia
  • 10. Algo de Historia ● Año 2011 ● 6 Nodos ● 48Tb ● 192 Gb de Ram ● 72 Cpu’s
  • 11. Algo de Historia “Con que datos comenzamos?”
  • 12. Algo de Historia Almacenamiento de la Plataforma de Traqueo Old Storage Filer
  • 13. Algo de Historia Almacenamiento de la Plataforma de Traqueo Old Storage Filer Hadoop Uploader & Compresor
  • 14. Algo de Historia
  • 15. public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { String line = value.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); output.collect(word, one); } } } public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { int sum = 0; while (values.hasNext()) { sum += values.next().get(); } output.collect(key, new IntWritable(sum)); } } public static void main(String[] args) throws Exception { JobConf conf = new JobConf(WordCount.class); conf.setJobName("wordcount"); conf.setOutputKeyClass(Text.class); conf.setOutputValueClass(IntWritable.class); conf.setMapperClass(Map.class); conf.setCombinerClass(Reduce.class); conf.setReducerClass(Reduce.class); conf.setInputFormat(TextInputFormat.class); conf.setOutputFormat(TextOutputFormat.class); FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[1])); JobClient.runJob(conf); }
  • 16. Algo de Historia
  • 17. Algo de Historia ● Facil de explicar y usar (SQL) ● Soporte de UDFS ● Particionamiento de la información simple ● JDBC
  • 18. Algo de Historia SELECT count(1) FROM tracking WHERE ds>=’2014-09-16 00:00:00’ AND ds>=’2014-09-16 23:59:59’ AND PAGE_ID=’HOME’
  • 19. Algo de Historia Hadoop facil y disponible para todos
  • 20. “Tenemos un entorno sobre el que hacer procesos batch y discovery. Entonces Manos a la obra.”
  • 21. Proyectos Recommendations
  • 22. Proyectos - Recommendations Premisa: “Si una serie de usuarios ven productos similares, entonces les interesan las mismas cosas (en un momento dado)”
  • 23. Proyectos - Recommendations Session Categoria Score 1 MLA1051 30 1 MLA1052 45 2 MLA1051 15 2 MLA1052 25 2 MLA1053 18
  • 24. Proyectos - Recommendations Categ Origen Categ Recommendada Score MLA1051 MLA1052 70 MLA1051 MLA1053 18 MLA1052 MLA1051 30 MLA1052 MLA1053 18 .... ....
  • 25. Proyectos - Recommendations CREATE TEMPORARY FUNCTION category_encode AS 'com.ml.utils.udf.intdecode.CategoryEncode'; CREATE TEMPORARY FUNCTION generate_score AS 'com.ml.utils.udf.score.GenerateScore'; INSERT OVERWRITE TABLE rc_user_relations select main.user,main.categ, if(main.score>100,100,main.score) from ( select user_hash as user , category_encode(request_data['_categid']) as categ, sum(generate_score(ds,31,3)) as score from tracking where ds>='${startDate}' and ds<='${endDate}' and user_id <> "" and user_hash<>"0" and page_id='PAGE_ID_VIP' and request_data['_categid'] <> "" and request_data['_categid'] is not null and request_data['_categid'] RLIKE "^[A-Z]{3}[0-9]+$" group by user_id, category_encode(request_data['_categid']) ) main INSERT OVERWRITE TABLE rc_categ_recommendations SELECT ur1.categ_id as categ, ur2.categ_id as categ_recommend, sum(ur1.score) as tot FROM rc_user_relations ur1 JOIN rc_user_relations ur2 on ur1.cust_id=ur2.cust_id WHERE ur2.score>6 AND ur1.categ_id <> ur2.categ_id group by ur1.categ_id, ur2.categ_id order by categ, categ_recommend, tot desc;
  • 26. Proyectos - Recommendations “Buenisimo!!! Podemos calcular recomendaciones, pero… Esta info es Batch, como la mostramos a nuestros usuarios”
  • 27. Proyectos - Recommendations Recommendations Api RedisDB On-Line
  • 28. Proyectos - Suggestions Suggestions
  • 29. Proyectos - Suggestions ● Calculamos lo más buscado del último año (> 50M de búsquedas distintas) ● Subimos esta data a un storage temporal ● Cargamos la data a un cluster de árboles de prefijos
  • 30. SWIFT Proyectos - Suggestions Proxy MLA Shard 0 Shard 1 Shard N
  • 31. Otras fuentes de Datos
  • 32. Otras fuentes de datos ● Load Balancer access-log ● MercadoClics (clics/prints) ● Scoring & Fraude ● Seguridad
  • 33. “Hasta aca pudimos resolver problemáticas Batch, el problema surgió cuando se necesito empezar a contar con la información más rápido”
  • 34. Real-Time
  • 35. ● Poder contar con la información a medida que se genera (t < 10s) ● Poder tomar acciones de forma instantánea ● Permitir a cualquier proyecto consumir los datos ● Poder trabajar sobre todo el volumen de información Real-Time
  • 36. Real-Time - Nueva Plataforma de Tracking Load Balancer WS Stream Hadoop Real Time Consumers
  • 37. Real-Time - Nueva Plataforma de Tracking - Stream Sources Complementador Pipeline Consumidores 1 N
  • 38. Real-Time - Por que Kafka? ● Escalabilidad Horizontal ● Poco consumo de recursos ● Rapido ● Soporte de volúmenes muy elevados de tráfico ● Confiable
  • 39. Real-Time - Por que Kafka?
  • 40. Proyecto usando Real-Time
  • 41. Filter and Process Std-IN KReader API Stream
  • 42. “Tenemos off-line y on-line, para BigData, que pasa con un warehouse tradicional? ”
  • 43. DataWarehouse
  • 44. DataWarehouse
  • 45. Extract and Summarize Process DataWarehouse
  • 46. Proximos Pasos...
  • 47. Proximos Pasos ● Real Time Analytics Query ○ Impala ○ Presto ○ Shark ● Spark como remplazo a MapReduce ● Consumo simple del Stream