こんにちは皆さん、
私はpythonfiles(sqlといくつかの結合からのデータ抽出を含む)を使用して、エアフローを使用する必要があります。 Linuxサーバーにエアフローを正常にインストールし、エアフローのWebサーバーを使用できますが、ドキュメントを調べた後でも、スクリプトを記述する必要がある場所は明確ではありませんスケジュールとそのスクリプトがエアフローWebサーバーでどのように利用可能になるので、ステータスを確認できますか
構成に関する限り、ホームディレクトリのdagフォルダーの場所と、例のdagの場所も知っています。
注:pythonを実行する必要があるため、Airflowでbashスクリプトファイルを実行する方法で重複としてマークしないでください。別の場所にあるファイル。
おそらくPythonOperator
を使用して関数を呼び出す必要があります。関数を別の場所で定義する場合は、PYTHONPATH
でアクセス可能な限り、モジュールから単純にインポートできます。
from airflow import DAG
from airflow.operators.python_operator import PythonOperator
from my_script import my_python_function
dag = DAG('tutorial', default_args=default_args)
PythonOperator(dag=dag,
task_id='my_task_powered_by_python',
provide_context=False,
python_callable=my_python_function,
op_args=['arguments_passed_to_callable'],
op_kwargs={'keyword_argument':'which will be passed to function'})
関数my_python_function
はスクリプトファイルにありました/path/to/my/scripts/dir/my_script.py
次に、Airflowを開始する前に、次のようにスクリプトへのパスをPYTHONPATH
に追加できます。
export PYTHONPATH=/path/to/my/scripts/dir/:$PYTHONPATH
詳細はこちら: https://airflow.incubator.Apache.org/code.html#airflow.operators.PythonOperator
チュートリアルと同様のデフォルトの引数とその他の考慮事項: https://airflow.incubator.Apache.org/tutorial.html
Bashoperatorを使用してpythonスクリプトをAirflowで実行できます。スクリプトをDAGフォルダーのフォルダーに配置できます。スクリプトが他の場所にある場合は、それらのスクリプトへのパスを指定します。
from airflow import DAG
from airflow.operators import BashOperator,PythonOperator
from datetime import datetime, timedelta
seven_days_ago = datetime.combine(datetime.today() - timedelta(7),
datetime.min.time())
default_args = {
'owner': 'airflow',
'depends_on_past': False,
'start_date': seven_days_ago,
'email': ['[email protected]'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5),
)
dag = DAG('simple', default_args=default_args)
t1 = BashOperator(
task_id='testairflow',
bash_command='python /home/airflow/airflow/dags/scripts/file1.py',
dag=dag)
_airflow webserver -p <port>
_
サンプルDAGを自動的にロードします。$ HOME/airflow/airflow.cfgで無効にできます。
_`load_examples = False`
_
いくつかの実験を行い、tutorial.pyで変更を加えます。 schedule_intervalをcron構文として指定している場合、'start_date' : datetime(2017, 7, 7)
_'start_date': datetime.now()
_
dag = DAG('tutorial', default_args=default_args,schedule_interval="@once")
またはdag = DAG('tutorial', default_args=default_args,schedule_interval="* * * * *") # schedule each minute
エアフローを開始:_$ airflow webserver -p <port>
_
$ airflow scheduler
_Airflowは、すべてのPython $ AIRFLOW_HOME/dags(あなたの場合は/ home/amit/airflow/dags)のファイルを解析します。そして、そのpythonスクリプトはDAGを再実行する必要があります「postrational」からの回答に示されているようにオブジェクトを返します。不足していると報告されている場合、PythonコードでAirflowがロードできなかったことを意味します。詳細については、stderrまたはstdoutがあります。