2009-12-16 18 views
9

Hace poco tuve un juego con Hadoop y quedé impresionado con su programación, administración y generación de informes de los trabajos de MapReduce. Parece que la distribución y ejecución de nuevos trabajos es bastante fluida, lo que permite al desarrollador concentrarse en la implementación de sus trabajos.Programación, administración e informes de trabajos distribuidos

Me pregunto si existe algo en el dominio de Java para la ejecución distribuida de trabajos que no se expresan fácilmente como problemas de MapReduce. Por ejemplo:

  • Trabajos que requieren coordinación y sincronización de tareas. Por ejemplo, es posible que implican la ejecución secuencial de tareas, sin embargo, es factible para ejecutar algunas tareas concurrentemente:

       .-- B --. 
         .--A --|  |--. 
         |  '-- C --' | 
    Start --|     |-- Done 
         |     | 
         '--D -------------' 
    
  • CPU tareas intensivas que le gustaría distribuir, pero no proporcionan ninguna salida para reducir - conversión de la imagen/cambio de tamaño, por ejemplo.

Entonces, ¿existe un marco/plataforma Java que proporcione un entorno informático tan distribuido? ¿O este tipo de cosas son aceptables/alcanzables con Hadoop? De ser así, ¿existen patrones/pautas para este tipo de trabajos?

Respuesta

3

He encontrado Spring Batch y Spring Batch Integration que parecen satisfacer muchos de mis requisitos. Te dejaré saber cómo me llevo.

+0

¿Cómo funciona Spring Batch para ayudar a paralelizar el trabajo en un clúster como lo hace Hadoop? – Marquez

0

Supongo que está buscando un motor de flujo de trabajo para tareas intensivas de CPU (también conoce el "flujo de trabajo científico", por ejemplo, http://www.extreme.indiana.edu/swf-survey). Pero no estoy seguro de cómo distribuido quieres que sea. Por lo general, todos los motores de flujo de trabajo tienen un "único punto de falla".

0

Creo que bastantes problemas se pueden expresar como problemas de reducción de mapas.

Para los problemas que no se pueden modificar para adaptarse a la estructura, puede ver cómo configurar los suyos usando el ExecutorService de Java. Pero se limitará a una JVM y tendrá un nivel bastante bajo. Sin embargo, permitirá una fácil coordinación y sincronización.

2

Eche un vistazo a Quartz. Creo que admite cosas como la gestión de trabajos de forma remota y la agrupación de varias máquinas para ejecutar trabajos.

+0

+1 excelente marco de trabajo – JamesC

0

ProActive Scheduler parece ajustarse a sus requisitos, especialmente a los complejos flujos de trabajo que mencionó con la coordinación de tareas. Es de código abierto y está basado en Java. Se puede utilizar para ejecutar cualquier cosa, los trabajos de Hadoop, guiones, código Java, ...

responsabilidad: Yo trabajo para el company detrás de él

0

Trate Redisson marco. Proporciona API fácil de ejecutar y programar las tareas java.util.concurrent.Callable y java.lang.Runnable. Aquí hay documentación sobre distribuido Executor service y Scheduler service

Cuestiones relacionadas