Primer Trabajo Práctico de la materia Sistemas Distribuidos I
- Alen Davies Leccese - 107084
- Agustín Murseli - 107752
- Luca Lazcano - 107044
- Leticia Aab - 106053
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)
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.shEl 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-*.txtPasos para demostrar el funcionamiento de la implementación de wordcount:
- Descargar los libros según lo expuesto anteriormente.
- Ejecutar el coordinador:
go run coordinator/coordinator.go ../books/pg-*.txt- Ejecutar el script
./start_workers_wc.sh:
chmod +x ./start_workers_wc.sh
./start_workers_wc.sh- Al finalizar, concatenar y ordenar los resultados con:
cat files/mr-out-* | sort > distributed.txt- Ejecutar la versión secuencial de wordcount mediante:
go run secuencia.go ../books/pg-*.txt- Al finalizar, ordenar los resultados:
sort mr-out-0 > sequential.txt- Por último, comparar los resultados con
diff:
diff sequential.txt distributed.txt- El output debería ser vacío, demostrando que no existe diferencia en el resultado entre ambas implementaciones de wordcount.
Para automatizar la comparación entre las versiones secuencial y distribuida:
chmod +x ./tests/wordcount_success.sh
./tests/wordcount_success.shEste test verifica que ambas implementaciones producen resultados idénticos en condiciones normales.
Para demostrar que el sistema maneja fallos de workers correctamente:
chmod +x ./tests/wordcount_fault_tolerance.sh
./tests/wordcount_fault_tolerance.shEste 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.