본문 바로가기

Data

(184)
[Docker+Airflow] Airflow로 인해 너무 커져버린 Docker Container용량 Airflow를 운영하다가, 갑자기 모든 Task가 터지기 시작해서 아무것도 안되고있는 상태였다. 확인해보니 용량부족이라고 떳고, 현재 서버에 장착된 크기는 100GB였다. 그래도 아무리 무거워도 이것보다는 많이 나가지 않을것이다라고 생각했는데, 갑자기 용량부족이라고 떠서 당황스러웠다. df -h명령어로 현재 용량을 쳐보니 아래와같이 나타나고있었다. 현재 docker의 파일시스템 경로는 /data에 있다 확인해보니 /data경로는 이미 98GB 다썻다고 쓰여져있다. 근데 Airflow안에서는 데이터 관리를해서 아무리 커져도 35GB를 넘을수가 없는데 의아했다. 추가로 더 확인해보니 docker의 container크기가 너무 컷다. 4번째 줄을보니 95GB, 5번째 줄은 심지어 98GB가 나왔다. 일단은 ..
[Docker] Docker 기본 파일시스템 경로 변경 업무 작업중에 docker의 기본 파일시스템 경로에 용량이 부족하여 부득이하게 docker 기본 파일 시스템 경로를 바꿔야했다. 제일 먼저 현재 docker의 기본 파일 시스템 저장경로를 알아보자 docker info | grep "Docker Root Dir" 이제 해당 경로를 바꿔줘야하는데, 제일 먼저 /etc/docker/daemon.json 파일 수정이 필요하다 해당 파일에 "data-root" : "지정하고싶은 파일 경로" { "data-root" : "/data/docker/" } 이후 docker system 재부팅 systemctl daemon-reload systemctl stop docker systemctl start docker 다시 위와같이 docker의 기본 파일시스템 경로를 확..
[Airflow] DAG안에서 병렬 실행시 특정 Task가 완료될때까지 기다려야하는 경우 아래와 같은 DAG이 존재했다고 할때 나는 "꼭" Task 1 -> Task 2가 실행이 완료되고나서, Task 3 -> Task 4가 실행되게끔 만들고싶었다. 사실 위와같이 단순한 DAG에서는 그냥 Task들을 한개로 합쳐서 concurrency를 1로해두면 될것같긴하지만, 실제 작업환경에서는 이러한 구조를 쉽게 바꿀수가 없었다. 따라서, 위와같은 상황을 해결해야했는데, 자료를 찾고 찾다보니 Airflow의 ExternalTaskSensor라는 Operator를 발견했다. https://airflow.apache.org/docs/apache-airflow/stable/_api/airflow/sensors/external_task/index.html#module-airflow.sensors.externa..
[Airflow] 다중 클러스터에서 Airflow Celery Worker 환경 구성하기 이번에 다중 클러스터(즉, 여러대의 컴퓨터)에서 Airflow Celery Worker환경을 세팅해야하는 업무가 생겨서 작업을했다. 과정중에 무수히 많은 시행착오가 있었고, 다음에는 이를 방지하기위해 글을 남깁니다.또한, 다른분들도 이러한 환경을 세팅할때 참고하시면 좋을것같습니다. 일단 모든 Airflow는 Docker로 구축하였습니다. 또한 Master Node와 Worker Node를 아래와 같이 구성했습니다. 버전은 다음과 같습니다 Airflow - 2.3.3 Python - 3.8 Master Node airflow worker airflow scheduler airflow webserver airflow trigger postgresql redis Worker Node airflow worker..
[Docker] MacOS Docker-compose설치하기 아래와 같이 docker-compose 파일 다운로드 sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose docker-compose를 터미널에서 사용할수있도록, 위치를 이동하고 권한을 수정 sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose chmod +x /usr/bin/docker-compose 잘 실행되는지 --version 옵션을 통해 확인 docker-compose -v # >>> docker-compose version 1...
[Python] 변수를 다른 파일에서 가져오기 이번에 Python코드를 작업하면서, 코드안에 긴 정보를 가지고있는 변수가 존재했고 이로인해서 전체적인 코드라인이 많이 증가하게되었다. 따라서, 해당 변수들을 다른 파일에 저장시켜놓고 매번 실행할때마다 가져오는 형식으로 바꿔보려고한다. 예시는 다음과같다. config.py파일이라는 곳에 아래와 같이(내가 불러오고싶은 변수들) 적어두고 # config.py 파일명은 자유 a = [1,2,3,4,5] b = "Hello! config.py!" 실제 실행하려는 파일에는 다음과같이 위 두개 변수를 불러읽을수 있다 # from 형식 from config import a from config import b print(a) print(b) # import 형식 import config print(config.a) ..
[Python] multiprocessing 작업시 배열 공유 방법 import psutil import os import time from multiprocessing import Process, Pool shared_list = [1,2,3,4,5] def count_step(temp): p = psutil.Process(os.getpid()) time.sleep(shared_list.pop(0)) print(shared_list) num_cores = 5 pool = Pool(processes=num_cores) pool.map(count_step, shared_list) pool.close() pool.join() print("DONE") 이번에 python으로 코딩하면서 Multiprocessing을 활용해야하는 일이 생겼다. 작업과정중에 특정 배열을 모든 프로..
[Python] ssh로 원격 conda python실행시 주의할 점 ssh로 원격 PC에서 python으로 특정 코드를 실행해야할때 주의해야할점이 있다. ssh로 python명령어를 날리면 "conda"의 python이 실행되는것이 아니고, 기본 환경에서의 python이 실행이된다. 따라서, conda환경의 python을 실행하기 위해서는 해당 conda경로의 python으로 실행시켜줘야한다. 아래는 예시이다 # as-is ssh ec2-1 'python test.py' # to-be ssh ec2-1 '/home/ubuntu/.conda/envs/pytorch/bin/python test.py'