背景
- Airflowで DAG指定 -> Task Durationを開こうとすると以下のような画面になる
- エラー内容は
TypeError: unsupported operand type(s) for +=: 'int' and 'NoneType'
原因
- Airflowの task_fail テーブルの durationカラムに Nullのものがあるのが原因
- 参照: Airflow 1.10: Task duration failing
対応
-
UPDATE task_fail SET duration=0 WHERE duration IS NULL
をしてあげればいい - 今回はCloud Composerを使っているので、手順としては、worker container とかに入って、mysqlに繋いでコマンドを実行する
- Airflowを独自で立てている場合は、直接DBにコマンド叩けばok
手順
GKEクラスタに接続
gcloud container clusters get-credentials ${GKE_CLUSTER} --zone ${GKE_LOCATION}
podsを表示する
kubectl get pods --all-namespaces
workerにログイン
kubectl -n ${NAME_SPACE} exec -it ${CONTAINER_NAME} -c airflow-worker -- /bin/bash
- mysqlに接続
mysql -h airflow-sqlproxy-service.default -u root
- update実行
use some_db
UPDATE task_fail SET duration=0 WHERE duration IS NULL
参考: https://cloud.google.com/composer/docs/how-to/using/testing-dags#checking_for_pypi_package_errors