it-swarm.com.de

Airflow: SSH und Ausführen von BashOperator von einem anderen Server

Gibt es eine Möglichkeit, ssh auf einem anderen Server auszuführen und BashOperator mit Airbnb Airflow auszuführen? Ich versuche, einen Hive-SQL-Befehl mit Airflow auszuführen, aber ich muss SSH in eine andere Box, um die Hive-Shell auszuführen. .____.] Meine Aufgaben sollten so aussehen:

  1. SSH an Server1
  2. starten Sie Hive Shell
  3. befehl Hive ausführen

Vielen Dank!

9
CMPE

Ich denke, ich habe es gerade herausgefunden:

  1. Erstellen Sie eine SSH-Verbindung in der Benutzeroberfläche unter Admin> Verbindung. Hinweis: Die Verbindung wird gelöscht, wenn Sie die Datenbank zurücksetzen

  2. Fügen Sie in der Python-Datei Folgendes hinzu

    from airflow.contrib.hooks import SSHHook
    sshHook = SSHHook(conn_id=<YOUR CONNECTION ID FROM THE UI>)
    
  3. Fügen Sie die SSH-Operatoraufgabe hinzu

    t1 = SSHExecuteOperator(
        task_id="task1",
        bash_command=<YOUR COMMAND>,
        ssh_hook=sshHook,
        dag=dag)
    

Vielen Dank!

20
CMPE

Bei Antons Antwort ist zu beachten, dass das Argument tatsächlich ssh_conn_id und nicht conn_id für das SSHOperator-Objekt ist. Zumindest in Version 1.10.

Ein kurzes Beispiel würde aussehen

from datetime import timedelta, datetime
import airflow
from airflow import DAG
from airflow.contrib.operators.ssh_operator import SSHOperator
default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'email': ['[email protected]'],
    'email_on_failure': False,
    'email_on_retry': False,
    'start_date': datetime.now() - timedelta(minutes=20),
    'retries': 1,
    'retry_delay': timedelta(minutes=5),
}
dag = DAG(dag_id='testing_stuff',
          default_args=default_args,
          schedule_interval='0,10,20,30,40,50 * * * *',
          dagrun_timeout=timedelta(seconds=120))
# Step 1 - Dump data from postgres databases
t1_bash = """
echo 'Hello World'
"""
t1 = SSHOperator(
    ssh_conn_id='ssh_default',
    task_id='test_ssh_operator',
    command=t1_bash,
    dag=dag)
4
user1978220