2016-09-26 7 views
0

気流とPython初心者の方は、私に正しい質問をしても、とにかく尋ねてもわかりません。 CentOSシステムでエアフローを設定しました。リモートMySqlインスタンスをバックエンドとして使用します。私のコードでは、変数の数を取得する必要があり、コードは以下のようになります。気流DBセッションが気になる環境を提供していない

import os 
from airflow.models import Variable 

print(os.environ['SHELL']) 
local_env['SHELL'] = Variable.get('SHELL') 

そして、私は次のエラーました:それはVariable.get()メソッドが例外をスローで

Traceback (most recent call last): File "test2.py", line 5, in local_env['SHELL'] = Variable.get('SHELL') File "/com/work/airflowenv/lib/python2.7/site-packages/airflow/utils/db.py", line 53, in wrapper result = func(*args, **kwargs) File "/com/work/airflowenv/lib/python2.7/site-packages/airflow/models.py", line 3134, in get raise ValueError('Variable {} does not exist'.format(key)) ValueError: Variable SHELL does not exist

をこのコードでは、次のようになります:

@classmethod 
    @provide_session 
    def get(cls, key, default_var=None, deserialize_json=False, session=None): 
     obj = session.query(cls).filter(cls.key == key).first() 
     if obj is None: 
      if default_var is not None: 
       return default_var 
      else: 
       raise ValueError('Variable {} does not exist'.format(key)) 

ここで、session.queryはすでにNoneを返します。ここでセッションがどのように注入されているのかは分かりません。これらのセッション変数が設定されていない理由について説明します。リモートのMySQLインスタンスに何かを設定する必要がありますか?

私たちはローカルのmysqlインスタンスを持つ別のマシン上に別の同一のエアフローインスタンスを持っています。私が単独で提供したスクリプトを実行することは問題ありません。

[2016-09-27 01:54:48,341] {init.py:36} INFO - Using executor

LocalExecutor

/bin/bash /bin/bash

気流を設定するときに私が忘れたものは何ですか? ありがとう、

+0

ちょっと、私は間違っていることを理解しました。気流バックエンドデータベースには、変数というテーブルが手動で入力する必要があります。私はこのテーブルをブートストラップステップとして前もって満たしていないので、それらを照会すると私に空のデータセットが得られます。 また、dbを再度初期化せずに変数を手動で入力できるAPIがあると便利です。 "可変"テーブルはエアフローバックエンドデータベースのデフォルトテーブルの1つで、データベースの初期化時に変数を割り当てることができるはずです。しかし、どの文書でもそれを見つけることはできませんでした。誰かが私にそれを見つける場所を指摘することができますか? –

答えて

0

最後に問題は解決しました。私が行ったことは、クエリをプリントアウトし、変数が、変数と呼ばれるリレーショナルデータベーステーブルからでなければならないことを理解しました。そして、バックエンドDBを掘り下げて、DBを見つけ、それと作業中のものとの比較を行い、 "可変"テーブルのデータが欠落していることを理解しました。 これらの変数を追加する方法は簡単です。 エアフロー変数-s SHELL/bin/bash などの変数があります。

0

一般に、AirflowのVariableモデルは、ある情報を格納するためにAirflow dbを使用する必要がある場合、軽量キー値ストアとして使用されています。

実行パラメータ、特に静的パラメータのように見えるものを保存する場合は、DAG定義のparamsファイルとして保存することをお勧めします。

関連する問題