Este documento describe la evolución del sistema de Big Data de MercadoLibre desde 2011 hasta la actualidad. Comenzó con 6 nodos y 48 TB de almacenamiento en 2011 y ha crecido exponencialmente a 154 nodos con 1.9 PB de almacenamiento en la actualidad, generando 4 TB de nuevos datos diarios. Inicialmente se usó Hadoop para análisis batch, luego se agregó Kafka para procesamiento en tiempo real y soportar cargas más altas. Más recientemente se están explorando herramientas como Impala, Presto y Spark para anális
23. Proyectos - Recommendations
Premisa: “Si una serie de usuarios ven productos similares,
entonces les interesan las mismas cosas (en un momento
dado)”
26. 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;
30. 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
36. ● 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
37. Real-Time - Nueva Plataforma de Tracking
Load
Balancer
WS
Stream
Hadoop
Real Time Consumers
38. Real-Time - Nueva Plataforma de Tracking - Stream
Sources
Complementador
Pipeline Consumidores
1
N
39. Real-Time - Por que Kafka?
● Escalabilidad Horizontal
● Poco consumo de recursos
● Rapido
● Soporte de volúmenes muy elevados de tráfico
● Confiable