데이터 파이프라인 구축해보기(1)
빗썸 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