web-dev-qa-db-fra.com

Exécution d'un travail sur un flux d'air basé sur Webrequest

Je voulais savoir si les tâches de flux d'air peuvent être exécutées lors de l'obtention d'une demande via HTTP. Je ne suis pas intéressé par la partie planification de Airflow. Je veux juste l'utiliser comme substitut du céleri.

Donc, un exemple d'opération serait quelque chose comme ça.

  1. L'utilisateur soumet un formulaire demandant un rapport.
  2. Backend reçoit la demande et envoie à l'utilisateur une notification lui indiquant que la demande a été reçue.
  3. Le programme dorsal planifie ensuite un travail utilisant Airflow pour s’exécuter immédiatement.
  4. Airflow exécute ensuite une série de tâches associées à un DAG. Par exemple, commencez par extraire les données de redshift, puis de les extraire de MySQL, effectuez des opérations sur les deux ensembles de résultats, combinez-les, puis téléchargez les résultats sur Amazon S3 et envoyez un courrier électronique.

D'après ce que j'ai lu en ligne, vous pouvez exécuter des tâches de flux d'air en exécutant airflow ... sur la ligne de commande. Je me demandais s'il y avait une API Python capable d'exécuter la même chose.

Merci.

11
Pravin Umamaheswaran

Le plugin API Airflow REST vous aiderait ici. Une fois que vous avez suivi les instructions pour installer le plug-in, il vous suffit de cliquer sur l’URL suivante: http://{Host}:{PORT}/admin/rest_api/api/v1.0/trigger_dag?dag_id={dag_id}&run_id={run_id}&conf={url_encoded_json_parameters}, en remplaçant dag_id par l’id de votre dag, soit en omettant run_id, soit en spécifiant un identifiant unique, et en transmettant un json codé pour url pour conf (avec l'un des paramètres dont vous avez besoin dans le dag déclenché). 

Voici un exemple de fonction JavaScript qui utilise jQuery pour appeler l'API Airflow: 

function triggerDag(dagId, dagParameters){
    var urlEncodedParameters = encodeURIComponent(dagParameters);
    var dagRunUrl = "http://airflow:8080/admin/rest_api/api/v1.0/trigger_dag?dag_id="+dagId+"&conf="+urlEncodedParameters;
    $.ajax({
        url: dagRunUrl,
        dataType: "json",
        success: function(msg) {
            console.log('Successfully started the dag');
        },
        error: function(e){
           console.log('Failed to start the dag');
        }
    });
}
13
Jeremy Farrell

Une nouvelle option dans airflow est le point de terminaison API experimental, mais intégré, dans les versions plus récentes de 1.7 et 1.8. Cela vous permet d'exécuter un service REST sur votre serveur de flux d'air pour écouter un port et accepter les travaux de la CLI.

Je n’ai moi-même qu’une expérience limitée, mais j’ai testé avec succès des dags. Selon les documents:

/api/experimental/dags/<DAG_ID>/dag_runs crée un dag_run pour un ID de diagnostic donné (POST).

Cela planifiera une exécution immédiate de tout ce que vous voulez exécuter. Cependant, il utilise toujours le planificateur, attendant une pulsation pour voir que dag est en cours d'exécution et pour passer des tâches à l'agent. Toutefois, il s’agit exactement du même comportement que l’interface de ligne de commande. Je pense donc que cela correspond à votre cas d’utilisation.

La documentation sur sa configuration est disponible ici: https://airflow.Apache.org/api.html

Il existe également quelques exemples de clients simples dans le github, sous airflow/api/clients

8
apathyman

Vous devriez regarder Airflow HTTP Sensor pour vos besoins. Vous pouvez l'utiliser pour déclencher un dag.

5
nehiljain

L'interface API expérimentale REST d'Airflow peut être utilisée à cette fin. 

La demande suivante déclenchera un DAG:

curl -X POST \
    http://<Host>:8080/api/experimental/dags/process_data/dag_runs \
    -H 'Cache-Control: no-cache' \
    -H 'Content-Type: application/json' \
    -d '{"conf":"{\"START_DATE\":\"2018-06-01 03:00:00\", \"STOP_DATE\":\"2018-06-01 23:00:00\"}'

Suite à la requête récupère une liste de Dag Runs pour un ID DAG spécifique:

curl -i -H "Accept: application/json" -H "Content-Type: application/json" -X GET http://<Host>:8080/api/experimental/dags/process_data/dag_runs

Pour que l'API GET fonctionne, définissez l'indicateur rbac sur True à airflow.cfg.

Voici la liste des API disponibles: ici & .

0
Arnab Biswas