Airflow の Metastore をずっとデフォルトの SQLite のままにしてたけど MS SQL Server 2019 に変更したのでメモ。
まずは SQL Server の設定。
公式ドキュメントに書いてある手順を参考にする。
Set up a Database Backend — Airflow Documentation
1 2 3 4 5 6 | CREATE DATABASE airflow; ALTER DATABASE airflow SET READ_COMMITTED_SNAPSHOT ON ; CREATE LOGIN airflow_user WITH PASSWORD = 'airflow_pass123%' ; USE airflow; CREATE USER airflow_user FROM LOGIN airflow_user; exec sp_addrolemember 'db_owner' , 'airflow_user' ; |
パスワードは適当に変える事。
あと公式だと最後の行は GRANT ALL PRIVILEGES を使ってるけど SSMS に「そんな構文ネーヨ」って怒られたので exec sp_addrolemember を使った。
続いて 関連ライブラリを入れる。
unixodbc-dev と msodbcsql17 などが必要なので、前に書いた記事のとおりにそれらをインストールする。
Ubuntu 20.04: Azure SQL Server コマンドラインツールをインストール
あと他にも build-esseintial も必要なので入れておく。
1 | $ sudo apt install build-esseintial |
それから pyodbc を入れる。
1 | $ pip install pyodbc |
続いて airflow.cfg を修正。
sql_alchemy_conn の値を変える。
1 2 3 | # airflow.cfg # sql_alchemy_conn = sqlite:////home/orenomemo/airflow/airflow.db sql_alchemy_conn = mssql+pyodbc: //airflow_user :airflow_pass123%%@localhost:1433 /airflow ?driver=ODBC+Driver+17+ for +SQL+Server |
上記のパスワードのところで「 % 」が 2 つ並んでるのはエスケープで、1 個だけだと configparser.InterpolationSyntaxError: ‘%’ must be followed by ‘%’ or ‘(‘, というエラーが出る。
ついでに、デフォルトの SequentialExecutor だと並列処理が出来ない云々のメッセージが管理 UI に表示されるので LocalExecutor に変える。
1 2 3 | # airflow.cfg #executor = SequentialExecutor executor = LocalExecutor |
ここまで設定したら airflow を初期化。
Admin ユーザーも作る。
1 2 3 4 5 6 7 | airflow db init airflow users create \ --username admin \ --firstname hoge \ --lastname fuga \ --role Admin \ --email hoge@example.com |
そして Airflow を起動すれば OK.
おまけ)
PostgreSQL でやろうとしたら、公式ドキュメントには psycopg2 を使えと書いてあるんだがインストールでコケる。
しかし psycopg2 を使わなくても動く。
つまりこうすればOK.
1 2 3 | CREATE DATABASE airflow_db; CREATE USER airflow_user WITH PASSWORD 'airflow_123%' ; GRANT ALL PRIVILEGES ON DATABASE airflow_db TO airflow_user; |
設定はこうなる。
1 2 | # airflow.cfg sql_alchemy_conn = postgresql: //airflow_user :airflow_123%%@localhost /airflow_db |