makefile distributed data-processing

makefile - sistema de fabricación distribuida seguro gratuito para Linux



distributed data-processing (6)

¿Hay algún buen sistema de distribución distribuido independiente del idioma para Linux que sea seguro y gratuito?

Información de antecedentes:

Dirijo experimentos científicos (informáticos) que a veces tienen grandes árboles de dependencia, ocasionalmente del orden de miles o decenas de miles de nodos de árboles. Este árbol de dependencias está sobre los archivos de datos, ejecutables de procesamiento de datos y archivos de resultados.

He experimentado con varias técnicas en los últimos años, incluyendo:

  1. Rolando mi propio rastreador de dependencias usando una base de datos y ejecutando un script en cada máquina de trabajo. Esto puede ser un poco engorroso, especialmente cuando intenta trabajar con lenguajes que no usan scripts.
  2. Poniendo todos los comandos de procesamiento en un solo archivo MAKE, con pseudo-objetivos que pueden ser "construidos manualmente" en diferentes máquinas de trabajo. Esto no requiere herramientas especiales, pero puede ser una molestia dividir manualmente el trabajo en trozos pseudo-objetivo de tamaño uniforme e invocar correctamente "hacer" en cada cuadro de trabajador.
  3. distmake : distribuye automáticamente la ejecución de comandos desde un único archivo MAKE ...

Básicamente estoy buscando algo como distmake, pero más seguro. Por lo que puedo decir, distmake básicamente deja una puerta trasera abierta en cada nodo trabajador.

También sería bueno si un reemplazo fuera más robusto que distmake. Si sale de la llamada principal de distmake, puede cerrar los servidores de puerta trasera, pero no mata correctamente los procesos de ejecución en los nodos de trabajador.

Aclaraciones:

Estoy procesando datos con el archivo MAKE, no compilando y enlazando con gcc. Según lo que leí en la documentación, distcc es una herramienta especializada para distribuir gcc. Voy a ejecutar mis propios archivos ejecutables en archivos de datos muy grandes alojados en un sistema de archivos compartido, no gcc en los archivos fuente, por lo que distcc no es útil.

Los nodos de trabajadores son máquinas visibles externamente, por lo que quiero que los demonios de los trabajadores sean al menos tan seguros como ssh. Lo mejor que puedo decir sin leer la fuente, distmake worker daemons abrir un puerto y aceptar comandos de cualquier persona que se le atribuye. Ejecutarán los comandos como el usuario que inició el daemon.


Puede hacer esto con AT & T nmake combinado con el programa coshell . No sé cómo evaluar la seguridad, pero el grupo de Glenn Fowler está lleno de grandes ingenieros que han hecho muchas cosas realmente buenas. Confiaría en ellos con mi código fuente :-) Su herramienta más conocida podría ser graphviz .


Si eres diligente con las dependencias (es decir, haz que -jxx funcione bien localmente), distcc es probablemente lo que deseas. Es muy fácil de usar y funciona felizmente con varias cachés CC populares. Una vez más, las dependencias adecuadas son la clave, especialmente cuando se utiliza un caché para ayudar a acelerar el proceso de reconstrucción.

Si usa GCC para generar dependencias más allá del alcance de las dependencias de módulos en el archivo MAKE, probablemente le encante distcc. Lo he estado usando en una granja de construcción pequeña con gran éxito ... pero mi configuración / árbol no es tan elaborado como el que describes.


También hay distcc , que afirma ser capaz de operar a través de SSH (aunque a menos que distmake sea de alguna manera muy extraño, debería poder restringir el acceso a localhost y construir túneles SSH para ejecutar la compilación) y icecream .

Actualización: debido a que el objetivo no es una compilación distribuida, sino un cálculo distribuido que simplemente usa el uso de make como arranque, tiene más sentido usar una herramienta diseñada para computación distribuida como BOINC . Los comentarios a continuación indican cóndor como la plataforma elegida.


Las dependencias son difíciles de administrar, y no conozco ningún sistema perfecto que haga lo que usted desea sin una gran cantidad de trabajo.

Lo más parecido que he usado es la siguiente configuración: - una cola de Cóndor para administrar las máquinas en su clúster - el meta-programador Condor DAGMAN para enviar trabajos que son interdependientes. DAGMAN es un acrónimo de Directed Acyclic Graph MANager, en el cual se usa un gráfico acíclico dirigido para representar las dependencias entre sus trabajos.

Hemos hecho esto para un protocolo científico iterativo en nuestro laboratorio con mucho éxito y funcionó muy bien, aunque fue una experiencia de aprendizaje para un postdoc con mucho talento para poner en marcha la implementación inicial. Requiere que configure y ejecute un clúster de Condor que no sea trivial, pero supongo que tiene Condor o algo similar para administrar todas sus máquinas. Puede ser que Sun GridEngine tenga algo similar que yo no sepa.


Aunque probablemente sea complicado integrarse de forma transparente con ''make'', el paralelo GNU parece ofrecer una opción conveniente para distribuir comandos entre los servidores.