tutorial topologico spark que ordenamiento ejemplo python scheduling etl directed-acyclic-graphs oozie

python - spark - ordenamiento topologico java



Programador dinámico de trabajos DAG(gráfico acíclico dirigido) (3)

¿Has mirado a Ruffus ?

No tengo experiencia con eso, pero parece hacer algunos de los elementos de su lista. También parece bastante pirateable, por lo que podría implementar sus otros requisitos usted mismo.

Necesito administrar un gran flujo de trabajo de tareas ETL, cuya ejecución depende del tiempo, la disponibilidad de datos o un evento externo. Algunos trabajos pueden fallar durante la ejecución del flujo de trabajo y el sistema debe tener la capacidad de reiniciar una rama de flujo de trabajo fallida sin esperar a que el flujo de trabajo completo finalice la ejecución.

¿Hay marcos en Python que puedan manejar esto?

Veo varias funciones básicas:

  • Edificio de dag
  • Ejecución de nodos (ejecute shell cmd con espera, registro, etc.)
  • Posibilidad de reconstruir la sub-gráfica en el DAG principal durante la ejecución
  • Posibilidad de ejecutar manualmente nodos o subgráficos mientras se ejecuta el gráfico principal
  • Suspender la ejecución del gráfico mientras se espera un evento externo
  • Lista de cola de trabajo y detalles del trabajo

Algo así como Oozie , pero de propósito más general y en pitón.


1) Puede probar dagobah , como se describe en su página github: Dagobah es un simple planificador de trabajos basado en dependencias escrito en Python. Dagobah le permite programar trabajos periódicos utilizando la sintaxis de Cron. Cada trabajo inicia una serie de tareas (subprocesos) en un orden definido por un gráfico de dependencia que puede dibujar fácilmente con un clic y arrastre en la interfaz web. Este es el proyecto de planificador más liviano en comparación con los tres siguientes.

2) En cuanto a las tareas de ETL, luigi , que es una fuente abierta de Spotify, se enfoca más en los trabajos de hadoop, como se describe: Luigi es un módulo de Python que le ayuda a construir tuberías complejas de trabajos por lotes. Maneja la resolución de dependencias, la administración del flujo de trabajo, la visualización, etc. También viene con soporte Hadoop incorporado.

Los dos módulos están escritos principalmente en Python y se incluyen interfaces web para una administración conveniente.

Por lo que sé, ''luigi'' no proporciona un módulo de planificación para tareas de trabajo, lo que creo que es necesario para las tareas de ETL. Pero usar ''luigi'' es más fácil escribir código de reducción de mapas en Python y miles de tareas diarias en la ejecución de Spotify dependen de ello.

3) Al igual que luigi, Pinterest abre su gestor de flujo de trabajo llamado Pinball . La arquitectura de Pinball sigue un paradigma de maestro-trabajador (o maestro-cliente para evitar nombrar la confusión con un tipo especial de cliente que presentamos a continuación) donde el maestro central con estado actúa como una fuente de verdad sobre el estado actual del sistema para los clientes sin estado. E integra los trabajos de hadoop / hive / spark sin problemas.

4) Airflow , otro proyecto de horario de trabajo abierto que Airbnb ha creado, es muy parecido a Luigi y Pinball. El backend está construido en Flask, Apio y así sucesivamente. De acuerdo con el código de trabajo de ejemplo , Airflow es potente y fácil de usar a mi lado.

Por último, pero no menos importante, Luigi, Airflow y Pinball pueden ser más utilizados. Y hay una gran comparación entre estos tres: http://bytepawn.com/luigi-airflow-pinball.html