web-dev-qa-db-ja.com

Python気流でのスクリプトスケジューリング

こんにちは皆さん、

私はpythonfiles(sqlといくつかの結合からのデータ抽出を含む)を使用して、エアフローを使用する必要があります。 Linuxサーバーにエアフローを正常にインストールし、エアフローのWebサーバーを使用できますが、ドキュメントを調べた後でも、スクリプトを記述する必要がある場所は明確ではありませんスケジュールとそのスクリプトがエアフローWebサーバーでどのように利用可能になるので、ステータスを確認できますか

構成に関する限り、ホームディレクトリのdagフォルダーの場所と、例のdagの場所も知っています。

注:pythonを実行する必要があるため、Airflowでbashスクリプトファイルを実行する方法で重複としてマークしないでください。別の場所にあるファイル。

Airflow Webサーバーで次の構成を見つけてください。

enter image description here

以下は、AIRFLOW_HOME dirのdagフォルダーのスクリーンショットです

enter image description here

また、DAG作成のスクリーンショットとDAGが見つからないというエラーのスクリーンショットもご覧ください。

enter image description here

enter image description here

simpleDAGを選択すると、DAGが見つからないというエラーが表示されます

enter image description here

10

おそらく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

12
postrational

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)
8
liferacer
  1. Airflowの公式ドキュメントを使用してエアフローを取り付けます。 python仮想環境。 http://python-guide-pt-br.readthedocs.io/en/latest/dev/virtualenvs/ にインストールすることをお勧めします。
  2. を使用して初めて気流を開始するとき

_airflow webserver -p <port>_

サンプルDAGを自動的にロードします。$ HOME/airflow/airflow.cfgで無効にできます。

_`load_examples = False`
_
  1. $ HOME/airflow /にdagsフォルダーを作成し、tutorial.pyファイルを https:/からdagsフォルダーに入れます/airflow.incubator.Apache.org/tutorial.html
  2. いくつかの実験を行い、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

  3. エアフローを開始:_$ airflow webserver -p <port>_

  4. スケジューラーの開始:_$ airflow scheduler_
0
Siddharth Kumar

Airflowは、すべてのPython $ AIRFLOW_HOME/dags(あなたの場合は/ home/amit/airflow/dags)のファイルを解析します。そして、そのpythonスクリプトはDAGを再実行する必要があります「postrational」からの回答に示されているようにオブジェクトを返します。不足していると報告されている場合、PythonコードでAirflowがロードできなかったことを意味します。詳細については、stderrまたはstdoutがあります。

0
user7126545