Skip to content

LetiAab/sistemas-distribuidos-tp1

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

45 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

TP1: MapReduce

Primer Trabajo Práctico de la materia Sistemas Distribuidos I

Consigna: https://docs.google.com/document/d/1ZiBafN9aLjimpEpSQG9Z6beNReBKkOSQo1wv9lgORjo/edit?tab=t.0#heading=h.6n82hblvw465

Fecha de entrega: 24 de Septiembre de 2025

Integrantes

  • Alen Davies Leccese - 107084
  • Agustín Murseli - 107752
  • Luca Lazcano - 107044
  • Leticia Aab - 106053

Como Ejecutar (plugins)

Plugin Word Count Compilar: Desde src/plugins/, ejecutar go build -buildmode=plugin wc.go para generar wc.so Probar: Ejecutar ./test_wc para verificar que cuenta palabras correctamente (requiere compilar primero go build test_wc.go)

Descargar libros de Gutenberg

Para demostrar el funcionamiento del TP, se pueden utilizar libros del Proyecto Gutenberg, una librería online con más de 75 000 libros en formato digital, disponibles de forma gratuita.

Para automatizar el proceso de descargar libros de Gutenberg, una forma es utilizando github.com/michaelnmmeyer/gutenberg. Es necesario contar con python3.

  • Clonar el repositorio e instalar:
git clone https://github.com/michaelnmmeyer/gutenberg.git
sudo make -C gutenberg install
  • Ejecutar el script provisto para descargar libros en ./books. Se puede modificar el script para cambiar el filtro de búsqueda, el directorio destino, el formato de los archivos descargados y la cantidad de libros.
chmod +x ./download_pg_books.sh
./download_pg_books.sh

Configuración de Reduce tasks

El coordinador permite especificar con el flag -nreduce la cantidad de tareas Reduce a ejecutar.
Si no se indica este flag, por defecto se utilizan 3 Reduce tasks.

Ejemplos:

# Usando el valor por defecto (3 Reduce tasks)
go run coordinator/coordinator.go ../books/pg-*.txt

# Usando un valor personalizado (5 Reduce tasks)
go run coordinator/coordinator.go -nreduce=5 ../books/pg-*.txt

Demo wordcount

Pasos para demostrar el funcionamiento de la implementación de wordcount:

  1. Descargar los libros según lo expuesto anteriormente.
  2. Ejecutar el coordinador:
go run coordinator/coordinator.go ../books/pg-*.txt
  1. Ejecutar el script ./start_workers_wc.sh:
chmod +x ./start_workers_wc.sh
./start_workers_wc.sh
  1. Al finalizar, concatenar y ordenar los resultados con:
cat files/mr-out-* | sort > distributed.txt
  1. Ejecutar la versión secuencial de wordcount mediante:
go run secuencia.go ../books/pg-*.txt
  1. Al finalizar, ordenar los resultados:
sort mr-out-0 > sequential.txt
  1. Por último, comparar los resultados con diff:
diff sequential.txt distributed.txt
  1. El output debería ser vacío, demostrando que no existe diferencia en el resultado entre ambas implementaciones de wordcount.

Tests de integración automatizados

Wordcount: test de funcionamiento normal

Para automatizar la comparación entre las versiones secuencial y distribuida:

chmod +x ./tests/wordcount_success.sh
./tests/wordcount_success.sh

Este test verifica que ambas implementaciones producen resultados idénticos en condiciones normales.

Wordcount: test de tolerancia a fallos

Para demostrar que el sistema maneja fallos de workers correctamente:

chmod +x ./tests/wordcount_fault_tolerance.sh
./tests/wordcount_fault_tolerance.sh

Este test simula fallos de workers durante la ejecución:

  • Inicia 4 workers
  • Mata 2 workers en diferentes momentos durante el procesamiento
  • Verifica que los workers restantes completen todas las tareas
  • Compara que el resultado final sea idéntico a la versión secuencial

El test PASA si el sistema se recupera de los fallos y produce resultados correctos, demostrando la tolerancia a fallos del coordinador con su sistema de timeouts y reasignación de tareas.

About

Primer Trabajo Práctico de la materia Sistemas Distribuidos I

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •