Tecnología
big data
Dr. Jose María Alvarez-Rodríguez
josemaria.alvarez@uc3m.es
www.josemalvarez.es
Contenidos
- Introducción
- Conceptos clave
-
Arquitectura y Tecnología
- Web de datos
-
Ejemplos prácticos
- FAQ
- Conclusiones
Según ongridventures...
VOLUMEN
-
Cantidad de datos que se han de procesar
-
Crecimiento continuo
¿Tamaño para ser considerado big data?
- Al menos 1 TB hasta el orden de PB (en el futuro EB)
- ...pero también dependerá de la calidad
variedad
- Tipos
- Documentos
- Imágenes
- Vídeos
- Posts en redes sociales
- Datos científicos, geográficos, etc.
- Formatos (estructurado y no estructurado)
- CSV, TSV, MSExcel
- PNG, JPG, MPEG, etc.
- PDF, HTML, etc.
- Acceso
- Ficheros
- Lenguajes de consulta
velocidad
- Actualización y Tipo de procesamiento
- Batch
- Periódico
- Eventos
- Cercano a tiempo real
- Tiempo real
veracidad
- Calidad
- Limpieza
- Fuente de datos confiable
- ...
viscosidad
-
Resistencia a formar parte del flujo de datos
-
Capacidad de integración de los datos
-
Tipos de procesamiento:
- Stream
- Bus de integración
- Procesamiento de eventos complejos (CEP)
viralidad
- Capacidad de propagación de la información
Big data es...
- Es lo mismo que resolver problemas "Small Data"
- ...pero el disponer de muchos datos implica...
- Nuevas arquitecturas (distribuidas)
- Necesidades de almacenamiento
- Diferentes tipos de procesamiento
- ...
- para resolver problemas existentes con un mejor/nuevo enfoque
Old wine in new bottles!
mejora en las capacidades de almacenamiento
Mayor capacidad de procesamiento
Disponibilidad de datos
...para resolver problemas...
...en Algunos sectores...
...y más...
caso real de éxito-Walmart
¿Qué se necesita?
-
Almacenar grandes cantidades de datos
-
Integrar fuentes de datos
-
Procesar y consultar en
-
...para proporcionar servicios de
-
Toma de decisiones
-
Informes, etc.
-
....y con capacidades de...
- Escalabilidad
- Tolerancia a fallos
- Replicación
¿alguna idea?
¿Una BBDD relacional tradicional?
¿Un sistema de procesamiento off-line?
¿Un sistema de Inteligencia de Negocio?
¿OLAP y variantes?
...
Sistemas NoSQL
- Key /Value (Tablas)
- Documentos
- Grafos
Teorema cap
Es imposible para un sistema de computación distribuida garantizar al mismo tiempo:
-
Consistencia (Consistency)
-
Disponibilidad (Availability)
-
Tolerancia a fallos (Partition tolerance)
Ejemplos
AP: Cassandra y CouchDB
CP: HBase y PAXOS
CA: BBDD relacionales
Superando
el
teorema cap
Las propiedades ACID de las bases de datos relacionales no encajan demasiado bien con las necesidades de un sistema Big Data (almacenar y procesar en ~tiempo real).
arquitectura lambda
Nathan Marz
Batch Layer
Procesamiento off-line
Todos los datos
Almacenamiento distribuido
Alta latencia
Implementación
Basado en Apache Hadoop
Cloudera Impala
...
serving layer
Indexar y exponer los datos de las distintas vistas
Consultas en tiempo real
Baja-latencia
Implementación
Storm, Impala Cloudera, Dremel (Apache Drill), Hortonworks, etc.
Lenguaje de consulta sobre los datos: Pig, SploutSQL, etc.
speed layer
Compensar la latencia de Batch layer (hasta que procese los datos y se pueden eliminar de esta vista)
Procesamiento de streams
Tolerancia a fallos
Diseño modular
Computación continua y distribuida
Implementación
Storm y similares
ejemplo de arquitectura lambda
Map/Reduce (M/R)
Un modelo de programación...
-
Procesamiento de datos a gran escala y distribuido
-
Simple pero restringido
- Programación paralela
- Extensible
antecedentes
Programación Funcional
-
Inspirado pero no equivalente
Ejemplo en Python
Dada una lista de números entre 1 y 50 mostrar sólo los pares
print filter(lambda x: x % 2 == 0, range(1, 50))
- Datos (una lista de números)
- Condición (ser par)
- Función de filtro
Otro ejemplo de programación funcional
Calcular la suma de los cuadrados de los números entre 1 y 50
import operator
reduce(operator.add, map((lambda x: x **2), range(1,50)) , 0)
-
reduce es equivalente a foldl en otros lenguajes como Haskell
- se deben considerar otros aspectos matemáticos (tipo de operador)
Módelo básico de M/R
MapReduce: The Programming Model and Practice,
SIGMETRICS, Turorials 2009, Google.
Mapping
Mapping es una función que crea una lista de salida tras la aplicación de un función a cada elemento de la lista de entrada.
Module 4: MapReduce, Hadoop Tutorial, Yahoo!
reduce
Reduce es una función que itera sobre los elementos de entrada para agregarlos en un sólo valor.
Module 4: MapReduce, Hadoop Tutorial, Yahoo!
...en detalle...
¿Qué es map/reduce?
Es un modelo de programación inspirado en programación funcional para resolver problemas mediante un enfoque "divide y vencerás" con procesamiento distribuido y paralelo.
¿Cuándo utilizar M/R?
Consulta
- Indexado y búsqueda (índices inversos)
- Filtrado
- Clasificación
- Recomendación (clustering o filtrado colaborativo)
Análisis
- Resumen y estadística
- Ordenación y "merging"
- Distribución de frecuencia
- Consultas tipo SQL (group-by, having, etc.)
- Procesamiento y generación de gráficos (histogramas)
otros
Algoritmos tipo : Búsqueda en anchura o PageRank,
¿Cómo lo utiliza Google?
- Indexado y búsqueda a escala web (pre-caché de consultas y resultados)
- Clustering para recomendación en Google News
- Informes para Google Trends
- Procesamiento de imágenes de satélites
- Machine translation
- Aprendizaje automático
- ...
Comparación de M/R y otros enfoques
MapReduce: The Programming Model and Practice, SIGMETRICS, Turorials 2009, Google.
Evaluación y características de M/R
MapReduce: The Programming Model and Practice, SIGMETRICS, Turorials 2009, Google.
apache hadoop
The Apache Hadoop software library is a framework that allows for the distributed processing of large data sets across clusters of computers using simple programming models.
M/R & Hadoop
ejemplos de uso
M/R en acción
- Querying
- Summarizing
- Analyzing
- ...
...sobre grandes conjuntos de datos de forma off-line para impulsar procesos on-line.
Escenarios
-
Resumen e informes agregados
- Filtros
-
Organización de datos (sort, merging, etc.)
-
Operadores relacionales (join, select, proyección, etc.)
-
Paso de mensajes iterativos (procesamiento de grafos)
- Otros (según la implementación):
- Simulación de sistemas distribuidos
- Cross-correlation
- Metapatrones
- Input/output
- ...
algunos ejemplos con un dump de Twitter...
resumen numérico
-
Descripción:
- Agregar varios valores numéricos mediante alguna función estadística
-
Objetivo:
- Procesar una lista de valores de entrada (números) para obtener un sólo valor y disponer de una medida de alto nivel de un conjunto de datos
-
Aplicabilidad:
- Gestión de datos numéricos
- Agrupar datos por un campo determinado
-
Ejemplos:
- Contar, Min/Max, media, desviación típica, etc.
pseudo-código contar palabras
class Mapper
method Map(recordid id, record r)
for all term t in record r do
Emit(term t, count 1)
class Reducer
method Reduce(term t, counts [c1, c2,...])
sum = 0
for all count c in [c1, c2,...] do
sum = sum + c
Emit(term t, count sum)
...en java...
public void map(LongWritable key, Text value, Context context)
throws Exception {
String line = value.toString();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
word.set(tokenizer.nextToken());
context.write(word, one);
}
}
public void reduce(Text key, Iterable values, Context context)
throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
context.write(key, new IntWritable(sum));
}
min/max
Data una lista de tweets en la forma (usuario, fecha y texto) determinar el primer y último comentario de un usuario
Map en min/max
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException, ParseException {
Map parsed = MRDPUtils.parse(value.toString());
String strDate = parsed.get(MRDPUtils.CREATION_DATE);
String userId = parsed.get(MRDPUtils.USER_ID);
if (strDate == null || userId == null) {
return;
}
Date creationDate = MRDPUtils.frmt.parse(strDate);
outTuple.setMin(creationDate);
outTuple.setMax(creationDate);
outTuple.setCount(1);
outUserId.set(userId);
context.write(outUserId, outTuple);
}
reduce en min/max
public void reduce(Text key, Iterable values,
Context context) throws IOException, InterruptedException {
result.setMin(null);
result.setMax(null);
int sum = 0;
for (MinMaxCountTuple val : values) {
if (result.getMin() == null
|| val.getMin().compareTo(result.getMin()) < 0) {
result.setMin(val.getMin());
}
if (result.getMax() == null
|| val.getMax().compareTo(result.getMax()) > 0) {
result.setMax(val.getMax());
}
sum += val.getCount();}
result.setCount(sum);
context.write(key, result);
}
media
Dada una lista de tweets en la forma (usuario, fecha y texto) determinar la media del tamaño del comentario por hora del día
map para media
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException,ParseException {
Map parsed =
MRDPUtils.parse(value.toString());
String strDate = parsed.get(MRDPUtils.CREATION_DATE);
String text = parsed.get(MRDPUtils.TEXT);
if (strDate == null || text == null) {
return;
}
Date creationDate = MRDPUtils.frmt.parse(strDate);
outHour.set(creationDate.getHours());
outCountAverage.setCount(1);
outCountAverage.setAverage(text.length());
context.write(outHour, outCountAverage);
}
reduce para media
public void reduce(IntWritable key, Iterable values,
Context context) throws IOException, InterruptedException {
float sum = 0;
float count = 0;
for (CountAverageTuple val : values) {
sum += val.getCount() * val.getAverage();
count += val.getCount();
}
result.setCount(count);
result.setAverage(sum / count);
context.write(key, result);
}
resumen numérico avanzado
Utilizando el lenguaje Pig
SELECT MIN(numcol1), MAX(numcol1),
COUNT(*) FROM table GROUP BY groupcol2;
b = GROUP a BY groupcol2;
c = FOREACH b GENERATE group, MIN(a.numcol1),
MAX(a.numcol1), COUNT_STAR(a);
filtrado
-
Descripción:
- Evaluar una condición en cada registro de datos para decidir que se hace con él
-
Objetivo:
- Filtrar registros de datos que no cumplen alguna condición
-
Aplicabilidad:
-
Ejemplos:
- Vista parcial del dataset, limpieza de datos, monitorización de determinados eventos, selección de muestras, grep distribuido, análisis de registros, consulta y validación de datos, etc.
pseudo-código
class Mapper
method Map(recordid id, record r)
field f = extract(r)
if predicate (f)
Emit(recordid id, value(r))
class Reducer
method Reduce(recordid id, values [r1, r2,...])
//Whatever
Emit(recordid id, aggregate (values))
grep distribuido
Dada una lista de tweets en la forma (usuario, fecha y texto) determinar los tweets que contienen una determinada palabra.
map grep distribuido
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
Map parsed =
MRDPUtils.parse(value.toString());
String txt = parsed.get(MRDPUtils.TEXT);
String mapRegex = ".*\\b"+context.getConfiguration()
.get("mapregex")+"(.)*\\b.*";
if (txt.matches(mapRegex)) {
context.write(NullWritable.get(), value);
}
}
usuarios y tweets más largos
Dada una lista de tweets en la forma (usuario, fecha y texto) determinar los 5 usuarios que escriben los tweets más largos.
map tweets más largos
private TreeMap repToRecordMap = new TreeMap();
public void map(Object key, Text value, Context context)
throws IOException, InterruptedException {
Map parsed =
MRDPUtils.parse(value.toString());
if (parsed == null) {return;}
String userId = parsed.get(MRDPUtils.USER_ID);
String reputation = String.valueOf(parsed.get(MRDPUtils.TEXT).length());
//Max reputation if you write tweets longer
if (userId == null || reputation == null) {return;}
repToRecordMap.put(Integer.parseInt(reputation), new Text(value));
if (repToRecordMap.size() > MAX_TOP) {
repToRecordMap.remove(repToRecordMap.firstKey());
}
}
reduce tweets más largos
public void reduce(NullWritable key, Iterable values,
Context context) throws IOException, InterruptedException {
for (Text value : values) {
Map parsed = MRDPUtils.parse(value.toString());
repToRecordMap.put(parsed.get(MRDPUtils.TEXT).length(),new Text(value));
if (repToRecordMap.size() > MAX_TOP) {
repToRecordMap.remove(repToRecordMap.firstKey());
}
}
for (Text t : repToRecordMap.descendingMap().values()) {
context.write(NullWritable.get(), t);
}
}
filtrado en otras palabras
(SQL & PIG)...
SELECT * FROM table WHERE colvalue < VALUE;
b = FILTER a BY colvalue < VALUE;< VALUE;
proyectos relacionados con hadoop
conclusiones m/r
- M/R es un modelo de programación
- ...para manejar grandes cantidades de datos off-line
- ...escalabilidad, replicación, tolerancia a fallos, etc.
- Apache Hadoop no es una base de datos
- Existen muchos proyectos basados en Hadoop
- Existen enfoques similares: Storm, Signal/Collect
-
...
¿Y qué hay después?
Concatenación de trabajos M/R
Optimización de los parámetros del algoritmo
Pipelining con otros lenguajes de programación
Patrones más avanzados y Procesamiento en tiempo real
Problemas actuales: imágenes, etc.
-
...
Ejemplo completo
de
Lambda Architecture
Una pregunta...
¿Escritores nacidos en Madrid durante el siglo XIX?
consulta dbpedia
PREFIX dbo: <http://dbpedia.org/ontology/>
SELECT ?name ?birth ?description ?person WHERE {
?person dbo:birthPlace :Madrid.
?person <http://purl.org/dc/terms/subject> <http://dbpedia.org/resource/Category:Spanish_writers> .
?person dbo:birthDate ?birth .
?person foaf:name ?name .
?person rdfs:comment ?description .
FILTER (?birth > "1800-01-01"^^xsd:date AND ?birth < "1900-01-01"^^xsd:date).
FILTER (LANG(?description) = 'en') .
}
ORDER BY ?name
y resultado...
http://bit.ly/KuzB9S
otra pregunta...
Latitud, longitud y nombre de lugares cercanos a Madrid en 200KM con una densidad de población mayor de 100 habitantes por KM2.
consulta dbpedia
PREFIX geo: <http://www.w3.org/2003/01/geo/wgs84_pos#>
PREFIX onto: <http://dbpedia.org/ontology/>
SELECT * WHERE {
?s a onto:Place .
?s geo:lat ?lat .
?s geo:long ?long .
FILTER(
xsd:double(?lat) - xsd:double(40.4) <= 2 && xsd:double(40.4) - xsd:double(?lat) <= 2 &&
xsd:double(?long) - xsd:double(-3.68) <= 2 && xsd:double(-3.68) - xsd:double(?long) <= 2).
?s <http://dbpedia.org/ontology/PopulatedPlace/populationDensity> ?density.
FILTER(xsd:double(?density) > xsd:double(100)).
}
LIMIT 100
y resultado...
http://bit.ly/1iNh9bc
y otra pregunta...
Listado
de países con nombre en inglés, chino, código ISO-3 con su latitud y longitud.
consulta webindex
SELECT *
WHERE{
?country rdf:type wi-onto:Country.
?country rdfs:label ?label.
FILTER (lang(?label) = 'en').
?country skos:prefLabel ?countryLabel.
FILTER (lang(?countryLabel) = 'zh').
?country wi-onto:has-iso-alpha3-code ?id.
?country geo:lat ?lat.
?country geo:long ?long.
}
INFORMACIÓN PARA NOSOTROS...
TAMBIÉN PARA NOSOTROS...
pARA LAS MÁQUINAS
Uso del vocabulario GoodRelations para catálogos virtuales
schema.org
- Iniciativa de Google, Bing y Yahoo
- Etiquetado con un vocabulario común para:
- Mejora de la publicación de información y su posterior indexado
- Prueba con Google Rich Snippets
renault uk y google rich snippets
linked data y el modelo 5*
http://lod-lam.slis.kent.edu/images/linked-data-image.jpg
ventajas
-
Realización práctica de la Web Semántica.
-
Identicación única, uso de HTTP URIs.
-
Modelo y acceso estándar.
- Enriquecimiento de recursos, creación de enlaces.
-
Estructuración, modelo estándar RDF.
-
Expresividad, vocabularios y datasets .
-
Reutilización de informacióny datos.
- ...
BAses de datos tradicionales
vs
Web de datos
¿qué es big data?
arquitectura para big data
Map Reduce y hadoop
Tecnología y frameworks existentes
Web de datos
¿Tengo un problema big data?
-
Evaluar de acuerdo a las 3-6 V's
- Definir necesidades
- Procesamiento
- ¿Batch? ¿Tiempo real ? ¿Ambas?
- Almacenamiento
- Tablas, documentos, grafos, etc.
- Frecuencia de actualización
- Consulta
- Infraestructura
- ¿Local? ¿Cloud Computing?
- Seleccionar tecnología
¿cuál es el coste?
- Se puede empezar con las herramientas ya disponibles como código abierto
- La clave está en el conocimiento y el modelado del problema
- Los datos ya están disponibles
- Gratuitos
- Otros de pago
- Se pueden crear
- La implementación es cuestión de tiempo y de la tecnología seleccionada
¿Existe alguna suite completa?
- Cloudera Impala
- Pentaho (ETL)
- RapidMiner
- MapR
- ...
¿Existen oportunidades de negocio?
¿Cuáles son las prioridades?
¿Existen temas abiertos?
-
Privacidad
-
Salto entre modelo matemático y despliegue en arquitectura Big Data
-
Big Data Governance (¿Semántica?)
-
Aplicaciones: recomendación, análisis de sentimiento, etc.
- Visualización (D3.js, Highlights.js, etc.
- ...
...de otra forma...
Algunas notas personales sobre Big Data
http://bit.ly/KAUIHH
¿Cuál es la diferencia con Business Intelligence?
No es sencillo de hacer una gran diferenciación pero caería en los siguientes puntos:
-
Big Data: estadística inferencial y low-density información
- BI: estadística descriptiva y high-density información
¿BIG DATa vs HPC?
- Big Data trata sobre datos
- HPC trata sobre poder computacional
Pero destinados a encontrarse...
¿Por dónde continuar?
Entender los fundamentos de Big Data (ej: Hadoop, etc.)
Probar y ascender en el conocimiento de herramientas de mayor nivel de abstracción
Recomendado:
"Yo también quiero Big DAta"
Dependiendo del problema se podrán aplicar las técnicas de forma más exitosa.
La selección debería basarse en innovación tecnológica para un proceso en negocio y no en marketing.
"Es sólo un problema técnico (IT)"
Realmente se debe buscar el problema de negocio y de ahí descender a la solución técnica. Ej: Walmart
"no se puede aplicar en grandes empresas por su diversidad"
Realmente el problema reside en la integración de datos y no en la aplicabilidad de las técnicas
"el coste de las herramientas y expertos es muy alto"
Sobre las herramientas e infraestructura ya se ha comentado y sobre los expertos el problema reside en seleccionar el perfil correcto: estadístic@, ingenier@, etc.
Si con un "smartphone" no eres más "SMART"
CON "big data" NO ERES MÁS "big"
Es muy importante contextualizar el problema de negocio tanto en necesidades como en nuestras capacidades
No es necesario diseñar/implementar una arquitectura desde el inicio, existen muchas herramientas ya disponibles
IBM BIG DATA (PREDICCIÓN)
4x more digital data than all the grains of sand on earth by 2020
CRéDIToS
- Ponente: Dr. Jose María Alvarez-Rodríguez
- Profesor Visitante
- Universidad Carlos III de Madrid
-
E-mail: josemaria.alvarez@uc3m.es
- WWW:
- Agradecimientos:
- Prof .Dr. Ricardo Colomo-Palacios