상세 컨텐츠

본문 제목

데이터 엔지니어링 스타터 키트 - 5주차

Data Platform/데이터 엔지니어링

by leediz 2022. 5. 22. 23:03

본문

데이터 엔지니어링 스타터 키트 - 5주차

이번주차는 지난주차에 이어서 Airflow를 더 심화학습하는 주차였다. 그리고 언제나 그렇듯 세션 초반에는 이전 주차의 숙제를 리뷰하는 시간과 질문에 대해 리뷰하는 시간을 가졌다. 꽤 많은 시간을 리뷰에 사용하기 때문에 숙제를 열심히 한 만큼 얻어가는게 많을 것이고, 그렇지 않다면 아무래도 공감이 덜 될것이기 때문에 숙제를 소흘히 하면 안되겠다는 생각이 들었다. 오늘은 세션에서 새로 배운것보다는 Airflow를 설치하는 과제를 수행하는 과정에 대한 포스팅을 하겠다.

 

Ubuntu 서버에 Airflow 설치

AWS Instance 접속

프로그래머스에서 각각 스터디원들에게 Airflow를 설치하여 테스트를 할 수 있는 EC2 인스턴스를 제공해준다. OS는 Ubuntu 18.04 LTS 이다. 개인적으로 취업 후에는 CentOS나 Redhat 계열의 OS만 다뤄서 굉장히 오랜만에 Ubuntu 서버를 다뤄봤다. 디테일한 면은 차이가 좀 있지만 큰 틀에서는 대부분 유사하기 때문에 큰 문제는 없었다.

수업 자료에 설치에 대해 정리된 깃헙링크가 포함되어 있어 차근차근 잘 따라하면 된다. 리눅스를 많이 다뤄보지 않은 스터디원을 위해 자세한 설명과 vi수준의 명령어까지 잘 써주신 점이 굉장히 인상깊었다.

 

airflow 계정 생성 및 필요한 어플리케이션 설치

 

1. airflow 계정 생성

$ sudo groupadd airflow
$ sudo useradd -s /bin/bash airflow -g airflow -d /var/lib/airflow -m

AWS의 EC2는 처음 터미널에 접속하면 Default로 OS 이름을 따서 User가 생성되어 있다.
그래서 ubuntu라는 계정으로 처음에 접속할 수 있는데, 보안을 위해 airflow라는 별도의 계정을 만들고 해당 계정에 Airflow를 설치하도록 가이드가 되어있다. 특이하게도 /home/airflow 경로가 airflow의 home 디렉토리가 아닌 /var/lib/airflow 경로를 home 디렉토리로 지정했다.

2. Postgresql 설치

$ sudo apt-get install -y postgresql postgresql-contrib
$ sudo su postgres
$ psql
psql (10.12 (Ubuntu 10.12-0ubuntu0.18.04.1))
Type "help" for help.

postgres=# CREATE USER airflow PASSWORD 'airflow';
CREATE ROLE
postgres=# CREATE DATABASE airflow;
CREATE DATABASE
postgres=# \q
$ exit

$ sudo service postgresql restart

Airflow는 메타데이터를 저장할 저장소가 필요한데, 별도의 설정이 없다면 Sqlite를 Default로 설정한다. 하지만 맥스님의 표현으로는 테스트용도로 사용하기에도 매우 부족하기 때문에 MySQL 또는 PostgreSQL과 같은 DBMS를 설치하여 메타데이터 저장소로 사용한다.
이번에는 PostgreSQL을 메타데이터 저장소로 사용하므로 설치와 설치 후 필요한 스텝에 대한 가이드가 제공되었다.
개인적으로 PostgreSQL에 익숙하지 않았는데 설명이 잘 되어있어서 설치하고 필요한 계정을 만드는 등의 작업을 하는데 불편함이 없었다.

3. Python 설치

$ sudo add-apt-repository ppa:deadsnakes/ppa
$ sudo apt install -y python3.8
$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.8 1

처음에는 Default Python3를 설치하도록 가이드가 되어 있어서 python 3.6 버전을 설치했었다. Airflow설치 후에 Airflow의 버전과 Python의 버전이 호환되지 않아서 python 3.8로 다시 설치하여 진행했다. 버전 호환성은 수업자료에 있던 Google Composer의 버전을 참고했다.

4. Airflow 설치

$ sudo pip3 install apache-airflow==2.2.5
$ sudo pip3 install apache-airflow-providers-postgres==2.2.0
$ sudo pip3 install apache-airflow-providers-mysql==2.2.0
$ sudo pip3 install apache-airflow-providers-amazon==2.3.0
$ sudo pip3 install apache.airflow.providers.slack
$ sudo pip3 install apache.airflow.providers.google
$ sudo pip3 install SQLAlchemy==1.3.23
$ sudo pip3 install oauth2client
$ sudo pip3 install gspread
$ sudo pip3 install typing_extensions

Airflow는 Python을 설치한 후 python의 모듈로써 설치해야 한다. 그래서 pip를 사용하여 airflow를 설치하고 그 외에 필요한 모듈들도 같이 설치하는 작업을 진행했다. airflow의 경우에는 설치 시에 버전까지 명시하여 설치를 진행했다.

 

Airflow 설정

$ sudo su airflow
$ cd ~/
$ mkdir dags
$ AIRFLOW_HOME=/var/lib/airflow airflow db init
$ ls /var/lib/airflow
airflow.cfg  airflow.db  dags   logs  unittests.cfg
  • 먼저 airflow 계정으로 접속한 다음 Airflow를 실행하여 기본환경을 만든다.
  • Airflow_Home 디렉토리에 airflow.cfg라는 파일이 생성되는데, 이 파일은 Airflow의 환경을 설정하는 파일로 다음 4가지를 수정했다.
    • “executor”를 SequentialExecutor에서 LocalExecutor로 수정
    • DB 연결스트링(”sql_alchemy_conn”)을 앞서 설치한 Postgres로 수정
    • “load_examples” 설정을 False로 수정 - Airflow웹에 예제 Dag들을 로드하지 않는 설정
    • timezone을 서울 시간으로 변경
  • 위와 같이 설정을 수정했으면 다시 Airflow를 실행하여 설정을 초기화한다.

 

Airflow 서비스 구동

Airflow의 웹서버와 스케줄러를 구동해야 하는데 매번 수동으로 구동할 수는 없으니 이를 백그라운드 서비스로 등록했다. 웹서버 서비스와 스케줄러 서비스를 각각 만들어 백그라운드 서비스로 구동시켰다.

 

Airflow webserver 로그인 어카운트 생성

AIRFLOW_HOME=/var/lib/airflow airflow users  create --role Admin --username admin --email admin --firstname admin --lastname admin --password admin1234

웹서버 접속을 위해서 admin user가 있어야 하는데 명령어를 통해 admin role을 가진 Airflow 계정을 생성했다.

설치가 완료된 Airflow다.

 

5주차 소감

제공된 Airflow EC2 인스턴스와 Airflow 설치 가이드문서를 참고하여 Airflow 설치를 과제로 수행했다. 바로 얼마 전에 업무상 Airflow를 설치할일이 있어 검색하며 설치를 진행했기에 크게 어려움은 없었다. 다만, 공식문서에서의 가이드 문서에 대해 제대로 이해하고 설치를 진행하지 않았기에 이번에 다시 맥스님이 제공한 가이드 문서를 보며 어떤 점이 부족했고 어떤 점을 수정해야 하는지에 대해 알게된 것이 가장 큰 수확이다. 주차가 지날수록 스터디가 끝나가는 것이 아쉽다. 그래도 배운 것을 바로바로 실제 프로젝트에도 적용하고 있어서 매우 유익한 스터디가 되고 있다.

 

참고자료

관련글 더보기

댓글 영역