BigQueryコネクタをすべて実行していますが、Dockerコンテナに既存のスクリプトがいくつかあります。AppEngineFlexibleの代わりにCloud Composer.
私が見つけることができる例に従っているように見える以下のスクリプトがあります:
import datetime
from airflow import DAG
from airflow import models
from airflow.operators.docker_operator import DockerOperator
yesterday = datetime.datetime.combine(
datetime.datetime.today() - datetime.timedelta(1),
datetime.datetime.min.time())
default_args = {
# Setting start date as yesterday starts the DAG immediately
'start_date': yesterday,
# If a task fails, retry it once after waiting at least 5 minutes
'retries': 1,
'retry_delay': datetime.timedelta(minutes=5),
}
schedule_interval = '45 09 * * *'
dag = DAG('xxx-merge', default_args=default_args, schedule_interval=schedule_interval)
hfan = DockerOperator(
task_id = 'hfan',
image = 'gcr.io/yyyyy/xxxx'
)
...しかし、実行しようとすると、WebUIで次のように表示されます。
Broken DAG: [/home/airflow/gcs/dags/xxxx.py] No module named docker
おそらく、Cloud Composerが実行されるKubernetesクラスター内でDockerが機能するように構成されていないのでしょうか?それとも、構文に何かが欠けているだけですか?
私は、composerのPyPIセクションにdocker-py == 1.10.6をインストールすることで解決しました。
ただし、DockerOperatorを正しく機能させるには、composerワーカーがDockerデーモンにアクセスできないため、もう少し手間がかかります。GCPコンソールに移動し、次の手順を実行してください。 クラスター資格情報 )。
現在のデプロイメント構成をファイルにエクスポート
kubectl get deployment airflow-worker -o yaml --export > airflow-worker-config.yaml
Airflow-worker-config.yaml( リンク例 )を編集してdocker.sockとdockerをマウントし、airflow-workerに特権アクセスを許可してdockerコマンドを実行します
展開設定を適用する
kubectl apply -f airflow-worker-config.yaml
つまり、Airflowインスタンスがインストールされている場所に、docker
という名前のPythonパッケージがありません。
パーソナルマシンを構成すると、不足しているパッケージを次のコマンドでインストールできます。
pip install docker
[〜#〜]編集[〜#〜]
Dockerコンポーネントのソースコード内 https://airflow.incubator.Apache.org/_modules/airflow/operators/docker_operator.html
importステートメントがあります:
from docker import Client, tls
したがって、新しいエラーcannot import name Client
は、壊れたインストールまたは間違ったバージョンのdocker
パッケージに接続されているようです。
Tobi6の回答に記載されているように、Docker用のPyPIパッケージをComposer環境にインストールする必要があります。PyPIパッケージを環境にインストールするための手順があります ここ 特定のパッケージバージョン。