티스토리 뷰

반응형

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 같은곳에 해당 환경변수 지정값을 넣어줘야 매번 선언하는 불편함이 없다.

 

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함