別のサーバーにSSH接続して、Airbnbのエアフローを使用してBashOperatorを実行する方法はありますか? AirflowでHive SQLコマンドを実行しようとしていますが、Hive Shellを実行するには別のボックスにSSHで接続する必要があります。私のタスクは次のようになります。
ありがとう!
私はちょうどそれを理解したと思う:
[管理]> [接続]の下のUIでSSH接続を作成します。注:データベースをリセットすると、接続は削除されます
Pythonファイルに以下を追加します
from airflow.contrib.hooks import SSHHook
sshHook = SSHHook(conn_id=<YOUR CONNECTION ID FROM THE UI>)
SSHオペレータータスクを追加する
t1 = SSHExecuteOperator(
task_id="task1",
bash_command=<YOUR COMMAND>,
ssh_hook=sshHook,
dag=dag)
ありがとう!
アントンの答えで注意すべきことは、引数が実際にSSHOperator
オブジェクトのssh_conn_id
ではなくconn_id
であることです。少なくともバージョン1.10では。
簡単な例は次のようになります
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)