SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Computación distribuida
usando Python
José Manuel Ortega Candel
Agenda
● Introducción a la computación distribuida
● Comparando tecnologías de computación
distribuida
● Frameworks y módulos en Python para
computación distribuida
● Casos de uso en proyectos Big Data
Introducción a la computación distribuida
● Grandes volúmenes de datos
● Necesidad de procesar esos datos de
manera rápida
● Tipos de datos complejos
Introducción a la computación distribuida
Introducción a la computación distribuida
Introducción a la computación distribuida
● Deslocalización
● Velocidad
● Recursos compartidos
● Tolerancia a fallos
Comparando tecnologías de computación distribuida
Comparando tecnologías de computación distribuida
Apache Hadoop Apache Spark Apache Flink
Velocidad de
procesamiento
Más lento que Spark
y Flink
100 veces más rápido
que Hadoop
Más rápido que Spark
Modelo de
programación
Map Reduce RDD(Conjuntos de
datos resilientes)
Flujos de datos
Procesamiento de
datos
Por lotes Por micro-lotes y
secuencial*
Por lotes
Soporte Streaming N/A Spark Streaming Flink Streaming
Soporte ML N/A Spark ML Flink ML
Frameworks y módulos en Python para computación distribuida
Frameworks y módulos en Python para computación distribuida
● Velocidad: procesamiento en memoria
● Ejecución perezosa(Lazy execution)
● Map-Reduce
Frameworks y módulos en Python para computación distribuida
Frameworks y módulos en Python para computación distribuida
● DAG — Directed Acyclic Graph
Frameworks y módulos en Python para computación distribuida
Frameworks y módulos en Python para computación distribuida
from pyspark import SparkContext
sc = SparkContext.getOrCreate()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
sc = spark.sparkContext
Frameworks y módulos en Python para computación distribuida
● RDD (Resilient Distributed Dataset)
● Transformaciones: tras aplicar una transformación,
obtenemos un nuevo y modificado RDD basado en el
original.
● Acciones: una acción consiste en aplicar una
operación sobre un RDD y obtener un valor como
resultado, que dependerá del tipo de operación.
Frameworks y módulos en Python para computación distribuida
lista = ['uno','dos','dos','tres','cuatro']
listardd = sc.parallelize(lista)
listardd = sc.parallelize(lista,4)
print(listardd.collect()) # Visualizar la colección RDD
rdd_fichero = sc.textFile("/home/fichero.txt")
rdd_text = sc.parallelize(['red', 'red', 'blue', 'green', 'green','yellow'])
rdd_aux = rdd_text.map(lambda x: (x,1))
rdd_result = rdd_aux.reduceByKey(lambda x,y: x+y)
print (rdd_result.collect())
[('blue', 1), ('green', 2), ('yellow', 1), ('red', 2)]
Frameworks y módulos en Python para computación distribuida
Frameworks y módulos en Python para computación distribuida
● groupByKey(),reducesByKey()
● filter(),map,flatMap()
Frameworks y módulos en Python para computación distribuida
Sobre los RDD de pares, podemos realizar las siguientes
transformaciones:
● keys: devuelve las claves
● values: devuelve los valores
● mapValues: Aplica la función sobre los valores
● flatMapValues: Aplica la función sobre los valores y los
aplana.
Frameworks y módulos en Python para computación distribuida
listaTuplas = [('a',1), ('z',3), ('b',4), ('c',3), ('a',4)]
rddTuplas= sc.parallelize(listaTuplas)
claves = rddTuplas.keys() # ['a', 'z', 'b', 'c', 'a']
valores = rddTuplas.values() # [1, 3, 4, 3, 4]
rddMapValues = rddTuplas.mapValues(lambda x: (x,x*2))
# [('a', (1, 2)), ('z', (3, 6)), ('b', (4, 8)), ('c', (3, 6)), ('a', (4, 8))]
rddFMV = rddTuplas.flatMapValues(lambda x: (x,x*2))
# [('a', 1),
# ('a', 2),
# ('z', 3),
# ('z', 6),
# ('b', 4),
Frameworks y módulos en Python para computación distribuida
from pyspark.sql import SparkSession
# Iniciamos Spark de manera local
spark = (SparkSession
.builder
.master("local[*]")
.appName("Hola Mundo")
.getOrCreate())
# Paralelizamos una lista del 0 al 9 y computamos la suma de los números
result = (spark
.sparkContext
.parallelize(range(10))
.reduce(lambda x, y: x + y))
# Imprimimos el resultado
print(f"La suma es {result}")
$ spark-submit script.py
Frameworks y módulos en Python para computación distribuida
https://colab.research.google.com/drive/1G894WS7ltIUTusWWmsCnF_zQhQqZCDOc
Frameworks y módulos en Python para computación distribuida
Frameworks y módulos en Python para computación distribuida
https://github.com/dask/distributed
Frameworks y módulos en Python para computación distribuida
● Lazy execution
○ compute()
○ persistent()
○ head()
Frameworks y módulos en Python para computación distribuida
https://distributed.dask.org/en/stable/examples/word-count.html
import hdfs3
from collections import defaultdict, Counter
from distributed import Client
from distributed.diagnostics.progressbar import progress
hdfs = hdfs3.HDFileSystem('NAMENODE_HOSTNAME', port=NAMENODE_PORT)
client = Client('SCHEDULER_IP:SCHEDULER:PORT')
filenames = hdfs.glob('/tmp/enron/*/*')
print(filenames[:5])
print(hdfs.head(filenames[0]))
Frameworks y módulos en Python para computación distribuida
https://distributed.dask.org/en/stable/examples/word-count.html
def count_words(fn):
word_counts = defaultdict(int)
with hdfs.open(fn) as f:
for line in f:
for word in line.split():
word_counts[word] += 1
return word_counts
counts = count_words(filenames[0])
print(sorted(counts.items(), key=lambda k_v: k_v[1], reverse=True)[:10])
future = client.submit(count_words, filenames[0])
counts = future.result()
print(sorted(counts.items(), key=lambda k_v: k_v[1], reverse=True)[:10])
Frameworks y módulos en Python para computación distribuida
https://distributed.dask.org/en/stable/examples/word-count.html
futures = client.map(count_words, filenames)
len(futures)
futures[:5]
progress(futures)
def top_items(d):
items = sorted(d.items(), key=lambda kv: kv[1], reverse=True)[:10000]
return dict(items)
futures2 = client.map(top_items, futures)
results = client.gather(iter(futures2))
all_counts = Counter()
for result in results:
all_counts.update(result)
print(len(all_counts))
print(sorted(all_counts.items(), key=lambda k_v: k_v[1], reverse=True)[:10])
Frameworks y módulos en Python para computación distribuida
● Documentación https://docs.dask.org
● Dask.distributed https://distributed.dask.org
● Blog de desarrollo https://blog.dask.org
● Algoritmos de Machine Learning implementados
en Dask https://github.com/dask/dask-ml
Frameworks y módulos en Python para computación distribuida
Apache Spark Dask
Modelo de programación Map Reduce Tasks
DataFrames Spark DataFrame tiene
su propia API y modelo
de memoria
Dask DataFrame
reutiliza la API y el
modelo de memoria de
Pandas.
Soporte ML Mllib Dask ML
Soporte lenguajes Scala,Python,R Python,C,C++
Casos de uso en proyectos Big Data
● Procesamiento en streaming
Casos de uso en proyectos Big Data
● Structured Streaming
Casos de uso en proyectos Big Data
from pyspark.sql import SparkSession
spark = SparkSession 
.builder 
.appName("Streaming WordCount") 
.master("local[2]") 
.getOrCreate()
# Creamos un flujo de escucha sobre netcat en localhost:9999
# En Spark Streaming, la lectura se realiza mediante readStream
lineasDF = spark.readStream 
.format("socket") 
.option("host", "localhost") 
.option("port", "9999") 
.load()
$ nc -lk 9999
Casos de uso en proyectos Big Data
# Leemos las líneas y las pasamos a palabras.
# Sobre ellas, realizamos la agrupación count (transformación)
from pyspark.sql.functions import explode, split
palabrasDF = lineasDF.select(explode(split(lineasDF.value, ' ')).alias('palabra'))
cantidadDF = palabrasDF.groupBy("palabra").count()
# Mostramos las palabras por consola
# En Spark Streaming, la persistencia se realiza mediante writeStream y en vez de
realizar un save, ahora utilizamos start
wordCountQuery = cantidadDF.writeStream 
.format("console") 
.outputMode("complete") 
.start()
# dejamos Spark a la escucha para que cierre el el flujo cuando termine de procesar
wordCountQuery.awaitTermination()
Casos de uso en proyectos Big Data
Casos de uso en proyectos Big Data
Casos de uso en proyectos Big Data
● Construcción de ETL(Extract, Transform y Load)
Casos de uso en proyectos Big Data
● Construcción de ETL(Extract, Transform y Load)
Conclusiones
● La distribución de la carga de trabajo entre los
distintos nodos de un cluster en una solución Big
Data, permite realizar las tareas en paralelo,
consiguiendo grandes mejoras en la eficiencia de los
procesos.
● La computación distribuida es más eficiente en
escenarios con unos cálculos a realizar sobre un gran
conjunto de datos. De esta manera se paraleliza el
trabajo y se reduce el tiempo total de cálculo.
Conclusiones
● A la hora de diseñar la arquitectura de un sistema Big
Data, es conveniente tener en cuenta el grado de
paralelización de las tareas, que será función del número
de procesadores y cores disponibles en el sistema. Si el
grado de paralelización es bajo, el rendimiento en según
qué tareas, puede acabar siendo también muy bajo.
● Con soluciones como PySpark y Dask podemos realizar
cálculos y transformaciones sobre grandes volúmenes de
datos, de forma distribuida sobre un cluster y trabajar con
procesamiento en paralelo.
¡Gracias!
@jmortegac
https://www.linkedin.com/in/j
mortega1
https://jmortega.github.io
https://www.ra-ma.es/libro/big-data-ma
chine-learning-y-data-science-en-pytho
n_145747

Más contenido relacionado

Similar a Computación distribuida usando Python

Abstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetosAbstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetosJoseEstebanTelloEstr
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)Darwin Durand
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018ead1943
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpEdgar Solis
 
Herramientas de visualización de datos
Herramientas de visualización de datosHerramientas de visualización de datos
Herramientas de visualización de datosBBVA API Market
 
Piensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresPiensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresRafael Bermúdez Míguez
 
Gestión y Análisis de Datos para las Ciencias Económicas con Python y R
Gestión y Análisis de Datos para las Ciencias Económicas con Python y RGestión y Análisis de Datos para las Ciencias Económicas con Python y R
Gestión y Análisis de Datos para las Ciencias Económicas con Python y RFrancisco Palm
 
Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Miguel Pastor
 
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxLo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxSergio Antonio Ochoa Martinez
 

Similar a Computación distribuida usando Python (20)

3. Hadoop
3.  Hadoop3.  Hadoop
3. Hadoop
 
Exposicion
ExposicionExposicion
Exposicion
 
García.Figueroa utilerias
García.Figueroa utileriasGarcía.Figueroa utilerias
García.Figueroa utilerias
 
Fun[ctional] spark with scala
Fun[ctional] spark with scalaFun[ctional] spark with scala
Fun[ctional] spark with scala
 
Meetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scalaMeetup Fun[ctional] spark with scala
Meetup Fun[ctional] spark with scala
 
Abstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetosAbstracción y Encapsulación de en la programación Orientada a objetos
Abstracción y Encapsulación de en la programación Orientada a objetos
 
Introducción a hadoop
Introducción a hadoopIntroducción a hadoop
Introducción a hadoop
 
CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)CREACION DE DLL Y USO (Ejemplo desarrollado)
CREACION DE DLL Y USO (Ejemplo desarrollado)
 
FdP_Diapositivas_2018
FdP_Diapositivas_2018FdP_Diapositivas_2018
FdP_Diapositivas_2018
 
Curso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmpCurso migración de aplicaciones nsl nk90 a tmp
Curso migración de aplicaciones nsl nk90 a tmp
 
Resilient Distributed Dataset - Analisis paper
Resilient  Distributed Dataset - Analisis paper Resilient  Distributed Dataset - Analisis paper
Resilient Distributed Dataset - Analisis paper
 
Spark
SparkSpark
Spark
 
Herramientas de visualización de datos
Herramientas de visualización de datosHerramientas de visualización de datos
Herramientas de visualización de datos
 
Piensa en grande: Big data para programadores
Piensa en grande: Big data para programadoresPiensa en grande: Big data para programadores
Piensa en grande: Big data para programadores
 
Gestión y Análisis de Datos para las Ciencias Económicas con Python y R
Gestión y Análisis de Datos para las Ciencias Económicas con Python y RGestión y Análisis de Datos para las Ciencias Económicas con Python y R
Gestión y Análisis de Datos para las Ciencias Económicas con Python y R
 
SMBD 2011
SMBD 2011SMBD 2011
SMBD 2011
 
SMBD 2011
SMBD 2011SMBD 2011
SMBD 2011
 
Hadoop, Cloud y Spring
Hadoop, Cloud y Spring Hadoop, Cloud y Spring
Hadoop, Cloud y Spring
 
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓNNIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
NIVEL DE PROGRAMACIÓN WEB INTRODUCCIÓN
 
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptxLo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
Lo que tienes que saber de Dart para Backend, frontend y Mobile..pptx
 

Más de Jose Manuel Ortega Candel

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfJose Manuel Ortega Candel
 
PyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfPyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfJose Manuel Ortega Candel
 
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Jose Manuel Ortega Candel
 
Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Jose Manuel Ortega Candel
 
Evolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfEvolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfJose Manuel Ortega Candel
 
Implementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfImplementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfJose Manuel Ortega Candel
 
Seguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudSeguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudJose Manuel Ortega Candel
 
Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Jose Manuel Ortega Candel
 
Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Jose Manuel Ortega Candel
 
Sharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sSharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sJose Manuel Ortega Candel
 
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Jose Manuel Ortega Candel
 
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanShodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanJose Manuel Ortega Candel
 
ELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamJose Manuel Ortega Candel
 
Monitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsMonitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsJose Manuel Ortega Candel
 
Python memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorPython memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorJose Manuel Ortega Candel
 
Machine Learning para proyectos de seguridad(Pycon)
Machine Learning para proyectos de seguridad(Pycon)Machine Learning para proyectos de seguridad(Pycon)
Machine Learning para proyectos de seguridad(Pycon)Jose Manuel Ortega Candel
 

Más de Jose Manuel Ortega Candel (20)

Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdfAsegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
Asegurando tus APIs Explorando el OWASP Top 10 de Seguridad en APIs.pdf
 
PyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdfPyGoat Analizando la seguridad en aplicaciones Django.pdf
PyGoat Analizando la seguridad en aplicaciones Django.pdf
 
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
Ciberseguridad en Blockchain y Smart Contracts: Explorando los Desafíos y Sol...
 
Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops Evolution of security strategies in K8s environments- All day devops
Evolution of security strategies in K8s environments- All day devops
 
Evolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdfEvolution of security strategies in K8s environments.pdf
Evolution of security strategies in K8s environments.pdf
 
Implementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdfImplementing Observability for Kubernetes.pdf
Implementing Observability for Kubernetes.pdf
 
Seguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloudSeguridad en arquitecturas serverless y entornos cloud
Seguridad en arquitecturas serverless y entornos cloud
 
Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud Construyendo arquitecturas zero trust sobre entornos cloud
Construyendo arquitecturas zero trust sobre entornos cloud
 
Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python Tips and tricks for data science projects with Python
Tips and tricks for data science projects with Python
 
Sharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8sSharing secret keys in Docker containers and K8s
Sharing secret keys in Docker containers and K8s
 
Implementing cert-manager in K8s
Implementing cert-manager in K8sImplementing cert-manager in K8s
Implementing cert-manager in K8s
 
Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)Python para equipos de ciberseguridad(pycones)
Python para equipos de ciberseguridad(pycones)
 
Python para equipos de ciberseguridad
Python para equipos de ciberseguridad Python para equipos de ciberseguridad
Python para equipos de ciberseguridad
 
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodanShodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
Shodan Tips and tricks. Automatiza y maximiza las búsquedas shodan
 
ELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue TeamELK para analistas de seguridad y equipos Blue Team
ELK para analistas de seguridad y equipos Blue Team
 
Monitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source toolsMonitoring and managing Containers using Open Source tools
Monitoring and managing Containers using Open Source tools
 
Python Memory Management 101(Europython)
Python Memory Management 101(Europython)Python Memory Management 101(Europython)
Python Memory Management 101(Europython)
 
SecDevOps containers
SecDevOps containersSecDevOps containers
SecDevOps containers
 
Python memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collectorPython memory managment. Deeping in Garbage collector
Python memory managment. Deeping in Garbage collector
 
Machine Learning para proyectos de seguridad(Pycon)
Machine Learning para proyectos de seguridad(Pycon)Machine Learning para proyectos de seguridad(Pycon)
Machine Learning para proyectos de seguridad(Pycon)
 

Último

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...FacuMeza2
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesFundación YOD YOD
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...JaquelineJuarez15
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersIván López Martín
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024GiovanniJavierHidalg
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)GDGSucre
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdfIsabellaMontaomurill
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxpabonheidy28
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxJOSEMANUELHERNANDEZH11
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptMiguelAtencio10
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfsoporteupcology
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofJuancarlosHuertasNio1
 

Último (20)

ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
 
KELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento ProtégelesKELA Presentacion Costa Rica 2024 - evento Protégeles
KELA Presentacion Costa Rica 2024 - evento Protégeles
 
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
El gusano informático Morris (1988) - Julio Ardita (1995) - Citizenfour (2014...
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 TestcontainersSalmorejoTech 2024 - Spring Boot <3 Testcontainers
SalmorejoTech 2024 - Spring Boot <3 Testcontainers
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024Cortes-24-de-abril-Tungurahua-3 año 2024
Cortes-24-de-abril-Tungurahua-3 año 2024
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)International Women's Day Sucre 2024 (IWD)
International Women's Day Sucre 2024 (IWD)
 
trabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdftrabajotecologiaisabella-240424003133-8f126965.pdf
trabajotecologiaisabella-240424003133-8f126965.pdf
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Plan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docxPlan de aula informatica segundo periodo.docx
Plan de aula informatica segundo periodo.docx
 
Hernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptxHernandez_Hernandez_Practica web de la sesion 12.pptx
Hernandez_Hernandez_Practica web de la sesion 12.pptx
 
dokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.pptdokumen.tips_36274588-sistema-heui-eui.ppt
dokumen.tips_36274588-sistema-heui-eui.ppt
 
Redes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdfRedes direccionamiento y subredes ipv4 2024 .pdf
Redes direccionamiento y subredes ipv4 2024 .pdf
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
ejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sofejercicios pseint para aprogramacion sof
ejercicios pseint para aprogramacion sof
 

Computación distribuida usando Python

  • 2. Agenda ● Introducción a la computación distribuida ● Comparando tecnologías de computación distribuida ● Frameworks y módulos en Python para computación distribuida ● Casos de uso en proyectos Big Data
  • 3. Introducción a la computación distribuida ● Grandes volúmenes de datos ● Necesidad de procesar esos datos de manera rápida ● Tipos de datos complejos
  • 4. Introducción a la computación distribuida
  • 5. Introducción a la computación distribuida
  • 6. Introducción a la computación distribuida ● Deslocalización ● Velocidad ● Recursos compartidos ● Tolerancia a fallos
  • 7. Comparando tecnologías de computación distribuida
  • 8. Comparando tecnologías de computación distribuida Apache Hadoop Apache Spark Apache Flink Velocidad de procesamiento Más lento que Spark y Flink 100 veces más rápido que Hadoop Más rápido que Spark Modelo de programación Map Reduce RDD(Conjuntos de datos resilientes) Flujos de datos Procesamiento de datos Por lotes Por micro-lotes y secuencial* Por lotes Soporte Streaming N/A Spark Streaming Flink Streaming Soporte ML N/A Spark ML Flink ML
  • 9. Frameworks y módulos en Python para computación distribuida
  • 10. Frameworks y módulos en Python para computación distribuida ● Velocidad: procesamiento en memoria ● Ejecución perezosa(Lazy execution) ● Map-Reduce
  • 11. Frameworks y módulos en Python para computación distribuida
  • 12. Frameworks y módulos en Python para computación distribuida ● DAG — Directed Acyclic Graph
  • 13. Frameworks y módulos en Python para computación distribuida
  • 14. Frameworks y módulos en Python para computación distribuida from pyspark import SparkContext sc = SparkContext.getOrCreate() from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() from pyspark.sql import SparkSession spark = SparkSession.builder.getOrCreate() sc = spark.sparkContext
  • 15. Frameworks y módulos en Python para computación distribuida ● RDD (Resilient Distributed Dataset) ● Transformaciones: tras aplicar una transformación, obtenemos un nuevo y modificado RDD basado en el original. ● Acciones: una acción consiste en aplicar una operación sobre un RDD y obtener un valor como resultado, que dependerá del tipo de operación.
  • 16. Frameworks y módulos en Python para computación distribuida lista = ['uno','dos','dos','tres','cuatro'] listardd = sc.parallelize(lista) listardd = sc.parallelize(lista,4) print(listardd.collect()) # Visualizar la colección RDD rdd_fichero = sc.textFile("/home/fichero.txt") rdd_text = sc.parallelize(['red', 'red', 'blue', 'green', 'green','yellow']) rdd_aux = rdd_text.map(lambda x: (x,1)) rdd_result = rdd_aux.reduceByKey(lambda x,y: x+y) print (rdd_result.collect()) [('blue', 1), ('green', 2), ('yellow', 1), ('red', 2)]
  • 17. Frameworks y módulos en Python para computación distribuida
  • 18. Frameworks y módulos en Python para computación distribuida ● groupByKey(),reducesByKey() ● filter(),map,flatMap()
  • 19. Frameworks y módulos en Python para computación distribuida Sobre los RDD de pares, podemos realizar las siguientes transformaciones: ● keys: devuelve las claves ● values: devuelve los valores ● mapValues: Aplica la función sobre los valores ● flatMapValues: Aplica la función sobre los valores y los aplana.
  • 20. Frameworks y módulos en Python para computación distribuida listaTuplas = [('a',1), ('z',3), ('b',4), ('c',3), ('a',4)] rddTuplas= sc.parallelize(listaTuplas) claves = rddTuplas.keys() # ['a', 'z', 'b', 'c', 'a'] valores = rddTuplas.values() # [1, 3, 4, 3, 4] rddMapValues = rddTuplas.mapValues(lambda x: (x,x*2)) # [('a', (1, 2)), ('z', (3, 6)), ('b', (4, 8)), ('c', (3, 6)), ('a', (4, 8))] rddFMV = rddTuplas.flatMapValues(lambda x: (x,x*2)) # [('a', 1), # ('a', 2), # ('z', 3), # ('z', 6), # ('b', 4),
  • 21. Frameworks y módulos en Python para computación distribuida from pyspark.sql import SparkSession # Iniciamos Spark de manera local spark = (SparkSession .builder .master("local[*]") .appName("Hola Mundo") .getOrCreate()) # Paralelizamos una lista del 0 al 9 y computamos la suma de los números result = (spark .sparkContext .parallelize(range(10)) .reduce(lambda x, y: x + y)) # Imprimimos el resultado print(f"La suma es {result}") $ spark-submit script.py
  • 22. Frameworks y módulos en Python para computación distribuida https://colab.research.google.com/drive/1G894WS7ltIUTusWWmsCnF_zQhQqZCDOc
  • 23. Frameworks y módulos en Python para computación distribuida
  • 24. Frameworks y módulos en Python para computación distribuida https://github.com/dask/distributed
  • 25. Frameworks y módulos en Python para computación distribuida ● Lazy execution ○ compute() ○ persistent() ○ head()
  • 26. Frameworks y módulos en Python para computación distribuida https://distributed.dask.org/en/stable/examples/word-count.html import hdfs3 from collections import defaultdict, Counter from distributed import Client from distributed.diagnostics.progressbar import progress hdfs = hdfs3.HDFileSystem('NAMENODE_HOSTNAME', port=NAMENODE_PORT) client = Client('SCHEDULER_IP:SCHEDULER:PORT') filenames = hdfs.glob('/tmp/enron/*/*') print(filenames[:5]) print(hdfs.head(filenames[0]))
  • 27. Frameworks y módulos en Python para computación distribuida https://distributed.dask.org/en/stable/examples/word-count.html def count_words(fn): word_counts = defaultdict(int) with hdfs.open(fn) as f: for line in f: for word in line.split(): word_counts[word] += 1 return word_counts counts = count_words(filenames[0]) print(sorted(counts.items(), key=lambda k_v: k_v[1], reverse=True)[:10]) future = client.submit(count_words, filenames[0]) counts = future.result() print(sorted(counts.items(), key=lambda k_v: k_v[1], reverse=True)[:10])
  • 28. Frameworks y módulos en Python para computación distribuida https://distributed.dask.org/en/stable/examples/word-count.html futures = client.map(count_words, filenames) len(futures) futures[:5] progress(futures) def top_items(d): items = sorted(d.items(), key=lambda kv: kv[1], reverse=True)[:10000] return dict(items) futures2 = client.map(top_items, futures) results = client.gather(iter(futures2)) all_counts = Counter() for result in results: all_counts.update(result) print(len(all_counts)) print(sorted(all_counts.items(), key=lambda k_v: k_v[1], reverse=True)[:10])
  • 29. Frameworks y módulos en Python para computación distribuida ● Documentación https://docs.dask.org ● Dask.distributed https://distributed.dask.org ● Blog de desarrollo https://blog.dask.org ● Algoritmos de Machine Learning implementados en Dask https://github.com/dask/dask-ml
  • 30. Frameworks y módulos en Python para computación distribuida Apache Spark Dask Modelo de programación Map Reduce Tasks DataFrames Spark DataFrame tiene su propia API y modelo de memoria Dask DataFrame reutiliza la API y el modelo de memoria de Pandas. Soporte ML Mllib Dask ML Soporte lenguajes Scala,Python,R Python,C,C++
  • 31. Casos de uso en proyectos Big Data ● Procesamiento en streaming
  • 32. Casos de uso en proyectos Big Data ● Structured Streaming
  • 33. Casos de uso en proyectos Big Data from pyspark.sql import SparkSession spark = SparkSession .builder .appName("Streaming WordCount") .master("local[2]") .getOrCreate() # Creamos un flujo de escucha sobre netcat en localhost:9999 # En Spark Streaming, la lectura se realiza mediante readStream lineasDF = spark.readStream .format("socket") .option("host", "localhost") .option("port", "9999") .load() $ nc -lk 9999
  • 34. Casos de uso en proyectos Big Data # Leemos las líneas y las pasamos a palabras. # Sobre ellas, realizamos la agrupación count (transformación) from pyspark.sql.functions import explode, split palabrasDF = lineasDF.select(explode(split(lineasDF.value, ' ')).alias('palabra')) cantidadDF = palabrasDF.groupBy("palabra").count() # Mostramos las palabras por consola # En Spark Streaming, la persistencia se realiza mediante writeStream y en vez de realizar un save, ahora utilizamos start wordCountQuery = cantidadDF.writeStream .format("console") .outputMode("complete") .start() # dejamos Spark a la escucha para que cierre el el flujo cuando termine de procesar wordCountQuery.awaitTermination()
  • 35. Casos de uso en proyectos Big Data
  • 36. Casos de uso en proyectos Big Data
  • 37. Casos de uso en proyectos Big Data ● Construcción de ETL(Extract, Transform y Load)
  • 38. Casos de uso en proyectos Big Data ● Construcción de ETL(Extract, Transform y Load)
  • 39. Conclusiones ● La distribución de la carga de trabajo entre los distintos nodos de un cluster en una solución Big Data, permite realizar las tareas en paralelo, consiguiendo grandes mejoras en la eficiencia de los procesos. ● La computación distribuida es más eficiente en escenarios con unos cálculos a realizar sobre un gran conjunto de datos. De esta manera se paraleliza el trabajo y se reduce el tiempo total de cálculo.
  • 40. Conclusiones ● A la hora de diseñar la arquitectura de un sistema Big Data, es conveniente tener en cuenta el grado de paralelización de las tareas, que será función del número de procesadores y cores disponibles en el sistema. Si el grado de paralelización es bajo, el rendimiento en según qué tareas, puede acabar siendo también muy bajo. ● Con soluciones como PySpark y Dask podemos realizar cálculos y transformaciones sobre grandes volúmenes de datos, de forma distribuida sobre un cluster y trabajar con procesamiento en paralelo.