티스토리 뷰
Airflow 2.x 버전을 띄우려고 했는데 아래와 같은오류가 발생했다. 결론부터 말하면 sqlite 의 의존성이 3.15 보다 버전이 더 커야 작동된다는말인데, centos 의 yum 을 통해 설치 가능한 버전은 sqlite는 3.7.17 버전이 가장 최신이다.
그래서 더 상위버전으로 업데이트해야 동작한다는 말이다. 해결방법은 소스를 다운로드 받아서 빌드하면 쉽게 해결된다.
$ airflow standalone
Traceback (most recent call last):
File "/home/airflow/py3/bin/airflow", line 5, in <module>
from airflow.__main__ import main
File "/home/airflow/py3/lib/python3.9/site-packages/airflow/__init__.py", line 35, in <module>
from airflow import settings
File "/home/airflow/py3/lib/python3.9/site-packages/airflow/settings.py", line 35, in <module>
from airflow.configuration import AIRFLOW_HOME, WEBSERVER_CONFIG, conf # NOQA F401
File "/home/airflow/py3/lib/python3.9/site-packages/airflow/configuration.py", line 1601, in <module>
conf.validate()
File "/home/airflow/py3/lib/python3.9/site-packages/airflow/configuration.py", line 314, in validate
self._validate_config_dependencies()
File "/home/airflow/py3/lib/python3.9/site-packages/airflow/configuration.py", line 418, in _validate_config_dependencies
raise AirflowConfigException(
airflow.exceptions.AirflowConfigException: error: sqlite C library version too old (< 3.15.0). See https://airflow.apache.org/docs/apache-airflow/2.3.2/howto/set-up-database.html#setting-up-a-sqlite-database
$ python -c "import sqlite3; print(sqlite3.sqlite_version)"
3.7.17
해결방법
sqlite 홈페이지의 download 에 가서 최신버전을 다운로드 받아서 빌드해서 설치하면 된다.
LD_LIBRARY_PATH 환경변수를 사용자가 빌드한 경로로 지정해야 최근 버전으로 동작됨을 주의하자.
https://www.sqlite.org/download.html
## sqlite 소스 다운로드 및 빌드
wget https://www.sqlite.org/2023/sqlite-autoconf-3410200.tar.gz
tar xzf sqlite-autoconf-3410200.tar.gz
cd sqlite-autoconf-3410200
./configure
sudo make
sudo make install
새버전으로 적용되었는지 확인하기
주의사항이 LD_LIBRARY_PATH 환경변수의 경로를 지정해줘야 빌드한 new 버전으로 동작한다.
사실 yum 으로 설치된 버전은 /usr/bin/sqlite3 , /usr/lib64/libsqlite3* 에 파일이 존재하고, 우리가 수동으로 빌드설치한 버전은 /usr/local/bin/sqlite3, /usr/local/lib/libsqlite3* 에 존재한다.
기본설치된 버전이 우선실행되는곳에 존재하기 때문에, 환경변수를 지정해서 우리가 별도로 설치한 버전이 더 우선권이 높게 환경변수를 지정해야 하는일이 필요할 수 있다. 만약, python 의 sqlite3 의존성 때문에 그런거라면 아래와 같이 LD_LIBRARY_PATH 를 지정후 실행하면 우리가 빌드한 버전을 바라보게 된다.
$ python -c "import sqlite3; print(sqlite3.sqlite_version)"
3.7.17
$ export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
$ python -c "import sqlite3; print(sqlite3.sqlite_version)"
3.41.2
당연하지만, 영구적으로 설정이 먹는건 아니므로 /etc/profile 혹은 ~/.bash_profile 같은곳에 해당 환경변수 지정값을 넣어줘야 매번 선언하는 불편함이 없다.
'데이터처리 > DBMS' 카테고리의 다른 글
[MySQL] The table does not comply with the requirements by an external plugin 문제 (0) | 2023.05.03 |
---|---|
[MySQL] Centos 에서 MySQL 원격접속하기 (0) | 2023.04.18 |
[MySQL] DBeaver 에서 Mysql 8.x 접속시 오류 해결 : Public Key Retrieval is not allowed (0) | 2022.10.17 |
Docker 를 이용해 MySQL 8 기동하는 방법 - user 생성 + 외부 접근 (0) | 2022.09.30 |
[PostgreSQL] javax.net.ssl.SSLHandshakeException 해결방법 (0) | 2022.01.24 |