¿Apache Hadoop es realmente bueno para algoritmos recursivos?

Respuesta corta : depende del algoritmo recursivo, pero diría que no es bueno para la mayoría de los algoritmos recursivos.

Respuesta más larga : el paradigma de MapReduce detrás de Hadoop es excelente cuando podemos dividir el trabajo en partes entre varias computadoras y ellas combinan cada parte para producir el resultado final.

El ejemplo clásico es contar el número de apariciones de cada palabra en un archivo de texto. Aquí, podemos dividir el archivo en partes iguales entre nuestro clúster (por ejemplo, 100 líneas para cada procesador), calcular las ocurrencias en cada parte (fase del mapa) y combinar (sumar) el número de ocurrencias de cada palabra en cada parte (reducir la fase )

Esto tiende a ser sencillo para los algoritmos de divide y vencerás. Los algoritmos recursivos tienen un árbol de dependencia de llamadas recursivas. A menos que cada llamada recursiva sea bastante independiente y tenga sentido dividir el trabajo en cada llamada recursiva entre varias computadoras (que dividirán recursivamente el trabajo), MapReduce no ayudará.

Incluso en los casos en que parece tener sentido, se desperdicia mucho tiempo de procesador. Tomemos, por ejemplo, un algoritmo que realiza 2 llamadas recursivas con una profundidad de 10. Esto significa que tenemos 10 niveles con 1, 2, 4, 8,… 256, 512 computadoras cada uno. Por lo tanto, tendríamos que reservar 1023 procesadores para nuestro trabajo. Sin embargo, la mayoría de estos procesadores pueden estar inactivos durante algún tiempo esperando que se les asigne trabajo (por ejemplo, 512 procesadores en el último nivel).

La programación inteligente de tareas podría mitigar este problema, pero MapReduce (Hadoop) todavía no parece bueno para algoritmos recursivos. Un mejor enfoque podría ser rediseñar el algoritmo para aprovechar la informática distribuida. Tomemos, por ejemplo, el algoritmo modificado de Dijkstra para ejecutarse en un entorno MapReduce. Ver Algoritmos MapReduce para más detalles.

More Interesting

¿Alguien ha probado algún algoritmo de aprendizaje automático en diseño o verificación de hardware?

¿Cuáles son algunos algoritmos de aprendizaje automático que pueden ayudarme a encontrar las similitudes o diferencias entre las ideas textuales?

¿Qué es el algoritmo k-Means y cómo funciona?

Cómo escribir un validador de sangría de Python

Mis ubicaciones están por venir, así que he estado implementando estructuras de datos y algoritmos en Python, pero llegué a saber que muchas empresas no tienen Python instalado en sus estaciones de trabajo. ¿Es verdad? Y si es así, ¿estaría bien cambiar de Python a Java, que no recuerdo mucho?

¿Existen algoritmos que estructuran datos previamente no estructurados utilizando 'etiquetas' definidas por el usuario?

¿Puedo encontrar el camino hamiltoniano más corto en un gráfico completo ponderado no dirigido en tiempo polinómico (donde todos los pesos no son negativos)?

¿Cuál es el mejor método de clasificación para usar si solo un elemento está fuera de servicio?

¿Cómo se comunican los dispositivos GPS con los servidores?

¿Cómo funciona 'Un algoritmo neuronal de estilo artístico'?

¿Por qué el algoritmo Chandy-Lamport necesita suponer que todos los mensajes llegan exactamente una vez?

¿Cómo se realiza la agrupación en el sondeo lineal en hashing con direccionamiento abierto?

¿Estudiar algoritmos mejorará mis habilidades cotidianas de toma de decisiones / resolución de problemas?

¿Cuál es el algoritmo utilizado para mostrar el orden de amigos que se muestra en toda la lista de amigos en Facebook?

¿Hay algún número que el binario no pueda producir?