728x90
반응형
발단.
- Airflow 에서 Engine 의 Job 종료에 대한 Pooling 진행,
- Airflow 에서 HTTP Client 로는 requests 모듈 사용
- Engine 내부 Hazelcast OutOfMemory 로 인해 다운
- Engine 의 WAS 프로세스는 살아있음 (unhealthy)
- Airflow Pooling Task 무한정 진행
원인
- Python 의 request 모듈의 기본 설정에는 Connection TimeOut 설정과 Read TimeOut 에 대한 기본값이 None 이다.
- 즉, Connection 을 맺는 것과 응답을 기다리는 것을 무한정 기다리게 된다.
- 위 처럼 Engine 이 응답을 주지 못할 경우에는 정말 무한정 기다리게 된다.
- 공식문서 내용
- TCP 3 way 통신 시간의 3배수로 설정하는 것이 제일 좋다.
- It’s a good practice to set connect timeouts to slightly larger than a multiple of 3, which is the default TCP packet retransmission window.
- 만약, 원격 서버가 매우 느릴 경우 None 으로 설정하고 커피 한잔 해라.
- If the remote server is very slow, you can tell Requests to wait forever for a response, by passing None as a timeout value and then retrieving a cup of coffee.
https://myeongdev.tistory.com/109
해결
response=requests.post(engine_submit_url, headers=headers, json=data, timeout=(10, 30))
- 현재 ETL 프로젝트 특성 상 처리 시간이 김.
- 또한, Engine 의 Hazelcast Down 에 대한 방어로직 혹은 Docker 컨테이너 자체 컨테이너 재실행에 따른 추가 시간 소요될 것으로 예상.
- 따라서, Connection TimeOut 10초, Read TimeOut 30초로 임시로 지정.
- 추후 진행 결과에 따른 조정 예정
728x90
반응형
'1.프로그래밍 > Python' 카테고리의 다른 글
비전공자의 주니어 개발자가 되기 위한 움직임 : 2. PyCharm 설치! (2) | 2020.08.29 |
---|---|
비전공자의 주니어 개발자가 되기 위한 움직임 : 1. 두근두근파이썬 Chapter 1 Python에 대해 알아보기. (2) | 2020.08.29 |