본문 바로가기

Data/Data Engineering

(37)
[Airflow] DagFileProcessorManager heartbeat 관련에러 Airflow작업중 webserver에 작성한 DAG이 보이지않아서, 혹시 scheduler에 문제가 생긴게 아닌지해서 docker 로그를 살펴보니 아래와같은 문구가 계속해서 출력중인 상태였음 Airflow Sechulder error ERROR - DagFileProcessorManager (PID=1234) last sent a heartbeat 50.72 seconds ago! Restarting it 해당 문제는 다음과같이 작업하면 해결이 가능함. 만약 로컬 airflow에서 작업한다면 dag_file_processor_timeout의 값을 조정이 필요함. default값으로 50초인데 약 60초로 키우면됨 만일 docker-compose airflow에서 작업한다면 AIRFLOW__CORE__D..
[Jenkins] Docker Jenkins 기본 포트 변경방법 업무에서 Jenkins를 좀 살펴보려는중에, Docker를 이용하여 Jenkins를 띄워보려고했는데 기존 Container에 8080포트를 사용중에 있어서 기본 Jenkins 포트를 바꿔줘야하는 일이 생겼다. 만약에 Docker가 아닌 Local에 Jenkins를 설치했을경우에는 "/etc/default/jenkins" 파일을 수정해야한다라는 정보는 인터넷에 많지만 뭐랄까 Docker안에서의 기본 Jenkins 포트를 변경하는 정보는 그렇게 많지않은것같다. 참고로 아래는 DockerHub에 Jenkins Documentation이다 https://hub.docker.com/_/jenkins jenkins - Official Image | Docker Hub DEPRECATION NOTICE This im..
[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] 간단한 명령어 정리 명령어 정리 docker image 리스트 docker images docker “실행중인” container 리스트 docker ps docker “실행 & 종료된” container 리스트 docker ps -a docker log확인 (마지막 로그의 50줄까지만, tail명령어가 없다면 과도하게 로그가 많이 나올수가있음) docker logs [CONTAINTER ID] --tail 50 docker image 삭제 docker rmi [IMAGE ID] docker container 삭제 docker rm [CONTAINER ID] #실행중이지않은 container만 삭제가 가능함 docker rm -f [CONTAINER ID] docker container 접속 docker exec -it [..
[Terraform] EKS삭제 시 "aws_auth" 에러 해결방법 │ Error: Get "http://localhost/api/v1/namespaces/kube-system/configmaps/aws-auth": dial tcp [::1]:80: connect: connection refused │ │ with module.eks.module.eks.kubernetes_config_map_v1_data.aws_auth[0], │ on .terraform/modules/eks.eks/main.tf line 431, in resource "kubernetes_config_map_v1_data" "aws_auth": │ 431: resource "kubernetes_config_map_v1_data" "aws_auth" { 로컬에서 terrafrom을 활용하여 EKS를 삭..