반응형

보통 이 ERROR는 LOGS 폴더에 대한 권한 문제이거나 메모리 사용량 문제일 경우도 있는데 나는 그 두 케이스에 해당되지 않았다.

 

테스트를 위해 짧은 간격으로 스케줄을 걸어 확인했을 때는 정상 작동하는 경우도 있고 작동하지 않고 LOGS 하위 폴더에 log 파일도 생성하지 않는 경우도 있다.

 

 

Airflow UI 내 log

*** Could not read served logs: Request URL is missing an 'http://' or 'https://' protocol.

 

Airflow_Webserver.log

[2024-03-27 09:33:32 +0900] [3098307] [WARNING] Invalid request from ip=192.168.21.145: [SSL: SSLV3_ALERT_CERTIFICATE_UNKNOWN] sslv3 alert certificate unknown (_ssl.c:2633)
[2024-03-27T09:33:32.142+0900] {file_task_handler.py:568} ERROR - Could not read served logs
Traceback (most recent call last):
  File "/app/airflow/httpx/_transports/default.py", line 60, in map_httpcore_exceptions
    yield
  File "/app/airflow/httpx/_transports/default.py", line 218, in handle_request
    resp = self._pool.handle_request(req)
  File "/app/airflow/httpcore/_sync/connection_pool.py", line 208, in handle_request
    raise UnsupportedProtocol(
httpcore.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/app/airflow/airflow/utils/log/file_task_handler.py", line 546, in _read_from_logs_server
    response = _fetch_logs_from_service(url, rel_path)
  File "/app/airflow/airflow/utils/log/file_task_handler.py", line 92, in _fetch_logs_from_service
    response = httpx.get(
  File "/app/airflow/httpx/_api.py", line 189, in get
    return request(
  File "/app/airflow/httpx/_api.py", line 100, in request
    return client.request(
  File "/app/airflow/httpx/_client.py", line 821, in request
    return self.send(request, auth=auth, follow_redirects=follow_redirects)
  File "/app/airflow/httpx/_client.py", line 908, in send
    response = self._send_handling_auth(
  File "/app/airflow/httpx/_client.py", line 936, in _send_handling_auth
    response = self._send_handling_redirects(
  File "/app/airflow/httpx/_client.py", line 973, in _send_handling_redirects
    response = self._send_single_request(request)
  File "/app/airflow/httpx/_client.py", line 1009, in _send_single_request
    response = transport.handle_request(request)
  File "/app/airflow/httpx/_transports/default.py", line 218, in handle_request
    resp = self._pool.handle_request(req)
  File "/usr/lib64/python3.9/contextlib.py", line 137, in __exit__
    self.gen.throw(typ, value, traceback)
  File "/app/airflow/httpx/_transports/default.py", line 77, in map_httpcore_exceptions
    raise mapped_exc(message) from exc
httpx.UnsupportedProtocol: Request URL is missing an 'http://' or 'https://' protocol.

 

 


 

개발 환경은 서버 1개, DB 1개라 문제가 없는데

지금 문제는 프로덕션 환경에서 서버 2개, DB 1개일 때에 해당된다.

 

서버 1번 ) webaserver 및 scheduler 기동 중 DAG 생성 완료

서버 2번 ) 서버 1과 같은 세팅 완료. DAG만 없음 ( webaserver 및 scheduler 기동 중 )

 

AIRFLOW는 서버가 다르더라도 DB 메타 데이터 기준으로 WORKER들을 생성한다.

 

1번 서버에 5분 간격으로 실행하는 DAG를 업로드하였으나

2번에는 DAG는 없이 WORKER만 보내진 격이니 에러를 뱉어낼 수 밖에!

 

생각도 못했던 2번 서버 LOGS 하위 폴더에 log 파일이 생성되어 있었다.

[2024-03-27T13:02:00.691+0900] {scheduler_job_runner.py:781} ERROR - 
Executor reports task instance <TaskInstance: scheduled__2024-03-27T04:00:00+00:00 
[queued]> finished (failed) although the task says it's queued. (Info: None) Was the task killed externally?

 

 

2번 서버 스케줄러 중단하니 말끔하게 처리ㅠ

혹은 2번 서버에도 DAG를 넣어주면 된다.

 

요약) 서버는 달라도 DB 기준으로 실제 WORK가 작동하고 DAG는 각각의 서버에서 관리된다.

반응형
반응형

오랜만의 블로그 포스팅..나는 요즘 AIRFLOW로 잡 스케줄링하는 업무를 맡았다.

 

airflow.cfg

# Whether to load the DAG examples that ship with Airflow. It's good to
# get started, but you probably want to set this to ``False`` in a production
# environment
#
# Variable: AIRFLOW__CORE__LOAD_EXAMPLES
#
#load_examples = True
load_examples = False

 

처음 세팅할 때 load_examples = False로 세팅

 

예시 사용 후 삭제할 때는?

 

airflow.cfg에  load_examples = False로 세팅 후 데이터베이스에 남아있는 이력들을 지워야 한다.

(혹은 UI에서 삭제하라는데 너무 많아서 개발 중이니 이 방법 씀)

$ airflow db init

 

속 시원.. 내가 만든 DAG만 있다!

반응형
반응형

1. cd 디렉터리 변경

2. pwd 현재 디렉터리 절대 경로 표시

3. ls 디렉터리 정보 조사

ls -l 상세정보

ls -a 숨긴 파일까지 보기

 

4. cat 파일 열기

5. grep 여러 파일 중 문자열 검색

grep abc test : test파일의 abc문자열이 포함된 것 검색

 

6. vi

실행 vi sample.txt

종료 esc키 > :q!

 

i - insert 모드 (esc)

: - ex모드

 

:w @저장

:w 파일명  @다름이름으로 저장

:w! @강제 저장

:q @파일 저장하지 않고 저장

:wq @파일 저장 후 종료

 

7. 현재 디렉토리의 모든 폴더, 파일을 755로 권한 변경

chmod 755 ./*

 

1. sort test.txt 텍스트 파일 내용 정렬 

-r 역순

 

2. find namelist 현재 디렉터리의 파일 검색(닷 파일도 가능)

find data namelist : 지정 디렉터리 아래를 대상으로 검색

 

*와일드 카드 사용 가능 (find a*, find a?)

 

3. which / whereis

반응형
반응형

netstat -ano | findstr 8080

taskkill /f /pid 1234

 

 

 

netstat -a -o

netstat network status (네트워크 상태)를 의미합니다.
-a (all) 프로토콜(TCP, UDP 등)과 상태(LISTENING, ESTABLISHED 등)와 상관없이 모두 표시합니다.
-o PID(Process ID)를 표시합니다.

 

반응형
반응형

C언어

1. 열혈강의 C

2. 독하게 시작하는 C 프로그래밍

 

알고리즘

1. 뇌를 자극하는 알고리즘

2. 열혈강의 자료구조

 

프로그래머적으로 사고하는 것 / 개발적으로 사고하는 것

1. 대체 뭐가 문제야 (제럴드 와인버그 / 도널 고즈)

2. 조엘 온 소프트웨어

3. 읽기 좋은 코드가 좋은 코드다

4. 코드 컴플리트

5. 실용주의 프로그래머

6. 생각하는 프로그래밍

7. 해커와 화가

 

 

 

하나하나 씹어먹짜

반응형
반응형

 사실은 스프링 입문은 8월에 완강을 하였다. 유료 강의를 구매한게 아마 수박씨 닷컴이 마지막이었는데 커리큘럼을 다 따라가면 스프링은 60만원대, JPA까지하면 일백만원이 훌쩍 넘어가는 금액이 나에게는 큰 지출이어서 꽤나 오랜 시간동안 고민을 해왔다. 그리고 나와 같은 고민을 하는 분들도 더러 많을 것 같다.

 

 사람마다 다르겠지만 일단 무료 강의를 들으면 유료 강의를 살지 말지 바로 결정이 지어질거라고 생각된다. 개인 프로젝트를 하며 얻는 것도 귀중하지만 김영한님 강의를 통하여 쉽게 얻을 수 없는 것들을 많이 얻게 되고 또 그 지식의 단단한 힘과 신뢰성을 보고 믿고 따라 가게 된다. 이제 생각해보면 조금 더 빨리 수강할걸 이라는 짧은 후회가 있지만, 지금이라도 시작해서 다행이다. 내 개발 커리어에 유의미한 배움이 되길 원하며 하루를 더 나은 내일, 일주일로 만들어 나갈 것이다!

 

 추석 할인 기간까지 꼬박 기다려 (사실 기본 원리 이후 지금까지 너무 정신이 없어서 강의를 구매해도 수강하지 못했을 것 같다.)   무려 25%나 할인받아 강의를 구매했다. 스프링 커리큘럼은 모두 구매하고 JPA 강의는 기본편만 일단 구매했다. (다 들으면 설날할인으로 구매 예정)

 

객체지향을 더 객체지향답게 개발하는 개발자가 되도록.

수강하며 열심히 기록해나가야지

 

반응형
반응형

1. 프로그래밍 기본 문법 공부

 

2. 알고리즘 기본100제 (코드업:기초100제)

 

3. 백준 문제풀기(50문제씩)

 1. 그리디 알고리즘

 2. 탐색 알고리즘(완전탐색, BFS, DFS)

 3. 기초 동적 프로그래밍

ref. DP 공부법(이건 내가 찾아본거)

좋은 DP 문제들 추천 https://stonejjun.tistory.com/24 

DP 공부법 https://stonejjun.tistory.com/48

=========

(순서 상관 X)

4. 그래프 이론

5. 중급 고급 동적 프로그래밍 

6. 문자열 

 

4. 기출문제 풀기

 

반응형