같은 이름의 Airflow 타입 CDE Job 에 대해 생성은 "이미 있다", 삭제는 "없다" 는 상반된 오류가 동시에 난다.
cde job create \
--name dag-${CDE_PIPELINE} \
--type airflow \
--dag-file ${CDE_PIPELINE}/dag-${CDE_PIPELINE}.py \
--mount-1-resource ${CDE_RESOURCE}
# Error: create job failed: DAG with same ID already exists
cde job delete --name dag-${CDE_PIPELINE}
# Error: delete job failed: could not get job from storage: job not found
cde job list 와 CDE Web UI 의 Jobs 화면에도 해당 항목이 보이지 않는다. 네이밍 규칙을 지켜 이름 충돌이 없고 cde 명령만으로 생성·삭제를 해 온 환경에서도 발생한다.
CDE 의 Job 메타데이터와 Airflow 의 DAG 상태는 서로 다른 저장소에 있고 그 사이는 비동기로 맞춰진다. Job 정보는 CDE 컨트롤 플레인의 메타데이터에 있고, DAG 은 Resource 에 올라간 파일을 Airflow 스케줄러가 주기적으로 읽어 Airflow 메타데이터에 등록한다. 따라서 Job 삭제가 성공한 뒤 DAG 정리가 실패하거나 지연되면 Job 은 없는데 DAG 만 남은 상태가 만들어진다.
이 상태에서 각 명령이 보는 기준이 다르기 때문에 상반된 오류가 난다. 생성은 Airflow 의 DAG ID 를 기준으로 막히고, 삭제는 CDE 의 Job 메타데이터를 기준으로 대상을 찾지 못한다. CDE UI 와 cde job list 는 Job 기준이므로 이 DAG 은 어느 화면에도 나타나지 않는다.
Cloudera 는 이 상태를 "연결된 Job 이 없는 DAG" 로 문서화하고 전용 복구 명령을 제공한다. 즉 정상적인 사용 패턴만으로도 발생할 수 있는 예외 상태이며, 운영 규칙으로 완전히 예방하는 방법은 공식 문서에 제시돼 있지 않다.
고아 DAG 을 DAG ID 로 직접 지운 뒤 Job 을 다시 만든다.
cde airflow delete-dag --dag-id <DAG_ID>
cde job create --name dag-${CDE_PIPELINE} --type airflow \
--dag-file ${CDE_PIPELINE}/dag-${CDE_PIPELINE}.py \
--mount-1-resource ${CDE_RESOURCE}
DAG ID 는 DAG 파일 안의 dag_id 값이며 Job 이름과 다를 수 있다. CDE CLI 에는 DAG 목록을 조회하는 명령이 없으므로, 확실하지 않으면 DAG 파일의 dag_id 를 직접 확인한다.
정상 삭제 순서는 Job → Resource 파일 → (남았을 때만) DAG 이다. 자세한 순서는 CDE 운영 메모 — DAG 삭제 순서와 NAS 경로 파일 쓰기 에 있다.
cde resource delete 로 Resource 를 통째로 지워 강제 초기화하는 방식은 복구 수단이지 운영 패턴이 아니다. Resource 는 여러 Job 이 공유하는 코드 묶음이므로 삭제하면 다른 Job 까지 영향을 받는다. 표준 구조는 Resource 하나에 여러 Job 이고, DAG 코드 변경은 cde resource upload 로, DAG 수명 주기는 cde job create/cde job delete 로 다룬다.
완전 예방은 불가능하므로 운영 절차에 복구 단계를 넣어 둔다. 생성 실패와 삭제 실패가 함께 나타나면 고아 DAG 을 의심하고 cde airflow delete-dag 를 시도한 뒤 재생성하도록 배포 스크립트에 예외 처리를 넣는 방식이 현실적이다.
사용 중인 CDE 버전의 릴리스 노트도 함께 확인한다. Airflow Job 생성 시 기존 DAG 확인 과정에서 메타데이터가 손상되어 삭제 불가 상태가 되는 결함, 삭제 로직 때문에 Job 이 지워지지 않는 결함이 과거 릴리스에서 수정된 이력이 있다. 대화 원본에는 DEX-16232, DEX-14724 라는 이슈 번호가 언급됐으나 릴리스 노트 대조는 하지 못했다 — 확인 필요.
cde 명령을 쓰기 위한 인증 설정.