¿QUIÉNES
SOMOS?
Madrid Python Meetup 2016/03/10 Página 4
UN GRUPO TECNOLÓGICO
GLOBAL
Grupo multinacional tecnológico Fundado en1984
Capital privado Sede principal en España (Madrid) Oficinas en 10 países Más de 1.100 empleados Origen vinculado al sector espacial y defensaAeronáutica, Espacio, Defensa, Seguridad, Sanidad, Transporte, Banca y finanzas, y Tecnologías de la
INTRODUCCIÓ
Madrid Python Meetup 2016/03/10 Página 8
ACLARACIONES
INTRODUCCIÓNApache Flink no es un
servidor web ni un jefe indio
No vamos a contar palabras
MADUREZ DEL BIGDATA
Descartar
Almacenar
Procesar
Madrid Python Meetup 2016/03/10 Página 10
ARQUITECTURA TÍPICA
¿POR QUÉ APACHE FLINK?Data
adquisition
Stream Processing
Serving DB
APACHE FLINK
El core de Flink es un motor
de procesamiento de flujos
de datos en streaming.
Proporciona distribución de los
datos, comunicación y tolerancia
a fallos para realizar
computación distribuida con
streams de datos.
Sobre ese core se han
desarollado dos API y varias
Madrid Python Meetup 2016/03/10 Página 14
VENTANAS
FLINK: CARACTERÍSTICAS DIFERENCIADORAS(A,5) (A,6) (A,5) (A,1)
VENTANAS POR CLAVE
(A,5) (B,2) (A,6) (C,3) (C,7) (A,5) (B,3) (C,8) (B,2) (A,1) (C,9) (B,4)
Ventanas fijas por clave
1s 2s
(B,2) (B,3) (B,2) (B,4)
(C,3) (C,7) (C,8) (C,9)
(A,5) (A,6) (A,5) (A,1)
(B,2) (B,3) (B,2) (B,4)
(C,3) (C,7) (C,8) (C,9)
(A,11)(B,2)(C,3) (A,5)(B,3)(C,15) (A,1)(B,6)(C,9)
(A,11)(B,5) (C,10) (A,6) (C,17) (B,6)
Ventanas por número de elementos
stream.keyBy(0).timeWindow (Time.seconds(1)).sum(1)
Madrid Python Meetup 2016/03/10 Página 16
TRIGGERS Y EVICTORS
DATASTREAM API5 2 9 9 7 0 3 8 2 A 9 4
20
18
Pueden cancelar el procesado de los
elementos de una ventana
Permiten adelantar el procesado de una
ventana
5 2 9 9 7 -1 3 8 2 1 9 4
25
18
16
Podemos controlar los elementos que
llegan de las ventanas antes de
evaluarlos
Triggers
Evictors
EL TIEMPO ES IMPORTANTE
¿Qué tiempo utilizar para construir las ventanas?
El momento en el que se
generó el evento
El momento en que se
recibe el evento
El momento en que se
procesa el evento
Madrid Python Meetup 2016/03/10 Página 18
RENDIMIENTO
COMPARATIVA• Lo deseable es mantener un alto caudal con una latencia baja
• Flink permite ajustar los tamaños de los buffers internos para
FUNCIONALIDADES
Streaming
“true”
mini batches
“true”
API
low-level
high-level
high-level
Fault tolerance
tuple-level ACKs
RDD-based (lineage) coarse checkpointing
State
not built-in
external
internal
Exactly once
at least once
exactly once
exactly once
Windowing
not built-in
restricted
flexible
Latency
low
medium
low
EXPER
IENCIA
CON
SEGÚN LA DOCUMENTACIÓN
La mayoría de las API no están
disponibles.
¡¡No está disponible la API
para Streams!!
El API para procesado en batch
tiene todas las operaciones
Madrid Python Meetup 2016/03/10 Página 22
PRUEBA BÁSICA
EXPERIENCIA CON PYTHONclass Adder(GroupReduceFunction):
def reduce(self, iterator, collector): count, event = iterator.next()
count += sum([x[0] for x in iterator]) collector.collect((event, count)) if __name__ == "__main__": output_file = 'out.txt' env = get_environment() data = env.read_csv("/home/jordi/Development/python-flink/final-dataset.csv",\
(INT, STRING, STRING, STRING, STRING, STRING, STRING, STRING, BOOL, BOOL, INT, INT, INT, INT, STRING, INT, INT, STRING, STRING, FLOAT, FLOAT, STRING))
data \
.map(lambda x: (1, x[5])) \ .group_by(1) \
.reduce_group(Adder()) \
.map(lambda x: 'Event: %s. Freq: %s' % (x[0],x[1]))\ .write_text(output_file,write_mode=WriteMode.OVERWRITE)
env.execute(local=True)
El rendimiento es más bajo que el
mismo programa en scala.
POCA ACIVIDAD
El último commit de la parte de Python fue hace varios meses:
Madrid Python Meetup 2016/03/10 Página 24
ww
w
.gm
v.
GRACIAS
BACKU
P
SLIDES
TERASORT
Madrid Python Meetup 2016/03/10 Página 52
TERASORT
PERFORMANCESTREAMING - YAHOO
Madrid Python Meetup 2016/03/10 Página 54
STREAMING - YAHOO
PERFORMANCEMadrid Python Meetup 2016/03/10 Página 56