데이터 엔지니어링

데이터 파이프라인 구축해보기(1)

오준돌 2023. 10. 24. 18:08

빗썸 api를 이용하여 수집한 데이터를 어떻게 처리를 하고 시각화할지에 대해 생각해 보았다. 

우선 수집한 데이터들은 한번 스케줄 될 때 300개의 코인종목과 26가지의 컬럼정보들을 가져올 수 있다. 칼럼 정보가 많기 때문에 차원을 줄여서 따로 데이터웨어하우스를 구축해야겠다고 생각했다. 또한 원데이터의 손실을 막기 위하여 데이터 레이크를 만들어 필요한 데이터를 추출하여 필요시 전처리 할 수 있게 만들어야겠다고 생각했다. 

이후, 레이크에 있는 json파일들을 spark로 전처리를 하여 최종 데이터를 산출해 내고 그 데이터를 이용하여 시각화툴을 사용하여 인사이트를 도출할 수 있도록 하고 시계열 데이터를 pytorch를 사용하여 모델링할 수 있었으면 좋겠다고 생각했다. 또한 더 생각해 볼 수 있는 것이 데이터 레이크에서 데이터 웨어하우스로 데이터가 이동할 때 데이터 유실이나 손상이 없는지에 대한 모니터링에 대해 생각해 보았다. 

 

환경 : GCP(debian)
데이터 레이크 : Google storage bucket
데이터 웨어하우스 : BigQuery 
시각화 : Tableau
시작하기 앞서 각각의 환경설정들을 해주었다. 
airflow는 gcp vm에서 docker compose를 사용하여 구축하였고 , 주피터노트북은 k-ict에서 제공해주는 gpu컨테이너에서 실행하였다. tableau는 cloud무료배포판을 사용할 예정이다. 

 

 

1. 인스턴스 만들어 준다. 

 

2. docker-compose.yml, Dockerfile작성 

 

docekr-compse.yml파일

version: '3'
services:
  airflow:
    build: .
    command: >
      bash -c '
      airflow db init &&
      airflow users create --username <user> --password <비번> --firstname Anonymous --lastname Admin --role Admin --email test@test.com &&
      (airflow webserver & airflow scheduler & wait)'
    ports:
      - 8080:8080
    volumes:
      - ./dags:/opt/airflow/dags/
      - ./data:/opt/airflow/data
      - ./secrets.json:/etc/airflow/secrets.json

command에 airflow 컨테이너가 시작될 때 실행할 명령어를 정의하였다. 

또한 8080으로 포트매핑과 볼륨 마운트를 설정하였고, 로컬과 연결시켜주었다. 

 

Dockerfile

FROM apache/airflow:2.6.1
USER root
RUN apt-get update \
  && apt-get install -y --no-install-recommends \
        vim \
  && apt-get autoremove -yqq --purge \
  && apt-get clean \
  && rm -rf /var/lib/apt/lists/*
USER "${AIRFLOW_UID:-50000}:0"

# requirements.txt 복사
COPY requirements.txt .

# 필요한 Python 패키지 설치
RUN pip install --no-cache-dir -r requirements.txt

airflow이미지는 2.6.1를 사용하였고 root권한을 수행할 수 있도록 하였다. 

autoremove 명령어는 더 이상 필요하지 않은 의존성 패키지들을 자동으로 제거한다. -qq옵션은 상세한 정보대신 필요한 최소한의 출력만 보여준다. --purge옵션은 패키지를 완전히 제거할 대 사용된다. 

USER "${AIRFLOW_UID:-50000}:0" 명령은 Airflow 컨테이너 내에서 실행되는 프로세스에 대해 제한된 권한과 호스트 시스템과 일치하는 파일 소유권을 제공하기 위해 사용된다.

 

3. 실행 

docker 설치) 해당 os에 맞춰서 설치하면 된다. 

https://docs.docker.com/engine/install/debian/

 

-d 옵션으로 백그라운 실행을 해준다. 

sudo docker compose up -d 

 

vm에 외부ip와 dockercompose파일을 구성할 때 마운트한 포트로 들어가 준다. 

 

!! airflow 에러발생 !!

 

여기서 마주한 문제점 dag파일들을 실험할 때 data내의 자료에 대한 permission denied 에러에 대한 처리를 해줘야 했다. 

 

컨테이너 내부로 들어가서 data폴더에 대한 소유권을 확인해 보았다. ls -al 명령어로 파일의 권한을 확인해 보니 소유자와 그룹 root가 아닌 나로 돼있었다. 그래서 폴더 안에서 아무 파일이나 만들어서 테스트했을 때 permission denied가 떴다. 

해결하기 위해 소유자를 바꿔야만 했고 data의 소유자와 그룹을 변경하고 권한도 부여해 주었다. 

sudo chown -R 50000:1003./data

sudo chmod -R 755./data