AirFlow 설치(Stand Alone)

Q·2022년 12월 6일
0

전제 조건 (Prerequisites)

1. 지원되는 버전

  • Python: 3.6, 3.7, 3.8
  • Databases:
    • PostgreSQL: 9.6, 10, 11, 12, 13
    • MySQL: 5.7, 8
    • SQLite: 3.15.0+
  • Kubernetes: 1.16.9, 1.17.5, 1.18.6

※ MySQL 5.x 버전은 여러 스케줄러를 실행할 수 없거나 제한이 있다. 자세한 내용은 스케줄러 를 참조 . MariaDB는 테스트/권장되지 않는다.

※ SQLite는 Airflow 테스트에 사용됩니다. 생산에 사용X 로컬 개발에는 최신 안정 버전의 SQLite를 사용하는 것이 좋다.

※ Python 3 지원과 관련하여 Airflow 2.0.0은 Python 3.6, 3.7 및 3.8에서 테스트되었지만 아직 Python 3.9를 지원하지 않는다.

2. 설치한 버전

  • Airflow : 2.5.0
  • Python : Python3.8
  • Airflow 경로 : ~/airflow
  • Centos7.4

설치 도구

Airflow를 설치하는 공식적인 방법은 pip도구를 사용하는 것입니다. 최근(2020년 11월) 변경 사항이 있었으므로 현재 공식적으로는 20.2.4 버전만 지원되지만 20.3.3+ 버전에서 성공할 수도 있습니다( pip20.3.0 릴리스 의 모든 초기 문제가 해결되었는지 확인해야 함) 20.3.3에서 수정됨). Airflow를 설치하려면 pip를 버전 20.2.4로 다운그레이드 하거나 Pip 20.3을 사용하는 경우 pip 설치 명령에 옵션을 추가해야 합니다.
pip install --upgrade pip==20.2.4--use-deprecated legacy-resolver

Airflow 설치 및 기본 셋팅

1. 경로 및 환경 변수 설정

  • Airflow 공식 문서에 나와 있듯이 Airflow는 기본 경로를 '~/airflow' 즉, 사용자 계정 path를 선호

    $ sudo mkdir ~/airflow
    $ sudo vim ~/.bashrc
    export AIRFLOW_HOME=~/airflow
  • Airflow 버전을 어떠한 것으로 설치할 것인지, Python 버전은 무엇인지 등을 셋팅하고 Airflow 설치

    $ AIRFLOW_VERSION=2.5.0
    $ PYTHON_VERSION="$(python --version | cut -d " " -f 2 | cut -d "." -f 1-2)"
  • 그 후 공식 문서에 나와 있는대로 설치

    $ CONSTRAINT_URL="https://raw.githubusercontent.com/apache/airflow/constraints-${AIRFLOW_VERSION}/constraints-${PYTHON_VERSION}.txt"
    $ pip install "apache-airflow==${AIRFLOW_VERSION}" --constraint "${CONSTRAINT_URL}"

2. Airflow 실행 전 셋팅

  • Airflow DB 초기화 (DB는 Airflow와 DAG와 Task 등을 관리하기 때문에 셋팅이 필요)
    $ airflow db init

    설치 도중 Error가 생긴 경우 아래의 트러블 슈팅 참고

    ※ sqlite3 버전 error
    airflow.exceptions.AirflowConfigException: error: sqlite C library version too old (< 3.15.0). See https://airflow.apache.org/docs/apache-airflow/2.0.2/howto/set-up-database.rst#setting-up-a-sqlite-database

    ※ ld-linux.so.2 Error
    /lib/ld-linux.so.2:bad ELF interpreter: 그런 파일이나 디렉터리가 없습니다.

    ※ pip Permission denied
    ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/bin/pip3.8' Consider using the --user option or check the permissions.

  • 잘 진행이 되었으면 Airflow가 설치된 경로(~/airflow)에 다음과 같은 구성으로 파일과 디렉토리가 구성됩니다.

    • airflow.cfg
      • airflow의 환경 설정 파일
    • airflow.db
      • DB 관련된 정보를 담고 있다.
    • logs
      • airflow의 각종 로그 관리
    • dags
      • airflow에서 dag를 관리하는 디렉토리
  • 다음으로 airflow를 관리할 사용자 계정을 만듭니다.

    $ airflow users create \
        --username admin \
        --firstname Peter \
        --lastname Parker \
        --role Admin \
        --email spiderman@superhero.org

Airflow web server 실행

  • airflow webserver를 실행기켜 airflow web ui를 확인
    $ airflow webserver --port 8080

Airflow Scheduler 실행

  • webserver를 띄웠다면 해당 터미널을 그대로 남겨두고, 새로운 터미널에서 scheduler를 실행
    $ airflow scheduler

실행 결과

  • (설치한 서버 IP):8080 링크를 통해 들어가면 아래와 같은 페이지가 뜰 것이고, 아까 생성한 계정으로 로그인
  • 많은 예제 DAG들이 존재 하는 것을 볼 수 있다.

Example Dags 삭제

  • Airflow 설정을 해주는 airflow.cfg 파일이 존재하는지 확인

    # airflow 경로로 이동
    $ cd ~/airflow
    
    # airflow.cfg 있는지 확인
    $ ls airflog.cfg
  • airflow.cfg 파일을 열어 load_examples 부분을 찾아 True -> False 로 수정

  • load_examples = False로 변경하고 다시 Airflow Webserver 새로고침하면 Example DAGs 들이 모두 사라졌을 것이다.

  • 만약, 새로고침을 해도 Exmaple DAGs 들이 남아있다면 airflow scheduler 를 실행했던 터미널을 열어 ctrl+c를 통해 종료 한 후, 다시 airflow scheduler 를 실행시켜보자

트러블 슈팅

1. sqlite3 버전 error

airflow.exceptions.AirflowConfigException: error: sqlite C library version too old (< 3.15.0). See https://airflow.apache.org/docs/apache-airflow/2.0.2/howto/set-up-database.rst#setting-up-a-sqlite-database

  • 만약 위의 문제가 발생하였다면 sqlite3의 버전이 최신이 아닌 것이다.
  • sqlite3의 버전이 최소 3.15.0 이상이어야 한다.
  • sqlite3의 버전이 아마 3.7.X 이거나 최신버전을 설치하였어도 Python에 sqlite3 최신버전이 반영되지 않았을 확률이 높다.
  • 따라서 다음과 같이 sqlite3의 최신버전을 설치해준다.
  1. SQLite의 공식 웹사이트로 이동. https://sqlite.org

  2. Source Code의 tar.gz 표시가 있는 것을 찾아 링크를 복사한다.

  3. 다음 명령어를 실행 시킨다.

    # Install Depandency Program
    yum -y install gcc
    
    # Sqlite update
    wget 복사한 링크 [ EX) https://www.sqlite.org/2020/sqlite-autoconf-3310100.tar.gz]
    tar -xzvf sqlite-autoconf-3310100.tar.gz
    cd sqlite-autoconf-3310100
    ./configure --prefix=/usr/local
    # ./configure --prefix=$HOME/opt/sqlite
    # ./configure --prefix=/usr/local
    
    make && make install
  4. 설치 후 환결설정값에 export LD_LIBRARY_PATH="/usr/local/lib" 를 추가하면 제대로 작동이 됩니다.

    $ vi /root/.bashrc 
    export LD_LIBRARY_PATH="/usr/local/lib"
    
    $ /usr/bin/sqlite3 
    SQLite header and source version mismatch
    2020-01-27 19:55:54 3bfa9cc97da10598521b342961df8f5f68c7388fa117345eeb516eaa837bb4d6
    2013-05-20 00:56:22 118a3b35693b134d56ebd780123b7fd6f1497668
  5. Python에 적용이 되었는지 확인합니다.

  • 적용 전
    Python 3.7.7 (default) 
    >>> import _sqlite3
    >>> _sqlite3.sqlite_version
    '3.7.17'
  • 적용 후
    Python 3.31.1 (default) 
    >>> import _sqlite3
    >>> _sqlite3.sqlite_version
    '3.31.1'
  1. 그 후 다시 Airflow DB 초기화를 진행 합니다.
    $ airflow db init

2. ld-linux.so.2 Error

/lib/ld-linux.so.2:bad ELF interpreter: 그런 파일이나 디렉터리가 없습니다.

  • 만약 위의 문제가 생겼다면 ld-linux.so.2를 설치해줍니다.
    $ yum install ld-linux.so.2

3. pip Permission denied

ERROR: Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: '/usr/local/bin/pip3.8'
Consider using the --user option or check the permissions.

  • 위의 문제가 생겼다면 그냥 pip install 할때 뒤에 --user 붙여주면 된다.
profile
Data Engineer

0개의 댓글