Cloudera Data Engineering(CDE) 은 DAG · Spark job 의 실행 이력을 장기 보관하는 저장소를 따로 제공하지 않는다. Virtual Cluster 에 내장된 Airflow 의 metastore(PostgreSQL) 를 직접 조회하는 방식은 공식적으로 지원되지 않고 업그레이드 호환도 보장되지 않는다. 각 DAG 의 수행 시간 이력을 효율적으로 남기려면 CDE Jobs REST API 의 /job-runs 를 시간 필터로 증분 추출해 외부 Iceberg(또는 Hive) 테이블에 적재하는 구성이 공식 권장 경로에서 벗어나지 않는 방법이다.
CDE API 를 우회해 Airflow 네이티브 API 나 DB 에 직접 붙는 것은 지원 대상이 아니다. 릴리스 노트에는 runtime-api pod 가 재시작될 때 RunDagMonitor 가 모든 DAG run 을 다시 가져오고, 한 Virtual Cluster 에 약 40만 건 이상의 DAG Run 이 누적된 경우 jobs-api 재시작 후 airflow-api 가 crash 한 사례가 보고돼 있다. 자체 DB 에 이력을 무한정 쌓는 구성은 위험하다.
Spark event log(spark.eventLog.enabled) 는 run 마다 <CDP env storage location>/dex/<Service ID>/<VC ID>/eventlog/ 아래에 쌓이고 자동 삭제되지 않는다. 정리하지 않으면 Spark History Server 가 과도한 read I/O 를 발생시키므로 라이프사이클 정책으로 오래된 로그를 지워야 한다.
CDE Jobs API(v1.25.2 기준) 의 JobRuns 그룹에 listJobRuns / getJobRun 엔드포인트가 있다. CLI 로도 같은 데이터를 받을 수 있고, 응답에는 id · job · type · status · user · started · ended · mounts · sparkAppID · sparkAppURL 등 증분 적재에 필요한 필드가 포함된다.
cde run list --filter 'started[gte]2023-11-29' --filter 'ended[lte]2023-11-30'
필터 연산자는 eq noteq lte lt gte gt in notin like rlike is isnot 를 지원하고 다중 필터는 AND 로 결합된다.
| 단계 | 방식 | 비고 |
|---|---|---|
| 추출 | GET /api/v1/job-runs?filter=ended[gte]<last_checkpoint> |
마지막 체크포인트 이후만 증분 추출 |
| 변환 | started/ended 로 duration_sec 계산, status · type 정규화 | airflow / spark run 을 같은 스키마로 |
| 적재 | Iceberg 테이블(파티션 dt=ended_date) |
CDE/CDW 에서 바로 조회 가능 |
| 정리 | Iceberg expire_snapshots + 보존 기간 지난 파티션 삭제 |
스토리지 효율 |
Iceberg 를 쓰는 이유는 CDE 가 Iceberg 를 기본 지원하므로 추가 인프라 없이 같은 클러스터의 Spark job 으로 수집 · 조회 · 압축 · 만료를 모두 처리할 수 있기 때문이다.
cde run list --filter) — 가장 단순. cron 또는 별도 Airflow DAG 에서 실행한다./job-runs) — 자체 ETL · 관측 백엔드에 통합할 때. JWT 토큰은 /gateway/authtkn/knoxtoken/api/v1/token 으로 발급받는다.listJobRuns() 로 Python 에서 직접 호출한다.수집 자체를 CDE 안의 작은 Airflow DAG(예: 1시간 주기, BashOperator + cde run list 또는 PythonOperator + cdepy) 로 만들면 외부 인프라 없이 CDE 가 자기 이력을 자기 테이블에 적재한다.
/admin/export 엔드포인트에 exportruns=true 를 주면 jobs · resources 와 함께 run 이력을 zip 으로 받을 수 있다. 분석용 포맷이 아니므로 주기 백업 보조 수단으로만 쓴다.
메타데이터(수행 시간 이력) 는 Iceberg 에 길게, 상세 event log 는 오브젝트 스토리지에 짧게 두는 분리 전략이 비용과 성능 모두에 유리하다. S3 Lifecycle 또는 Azure lifecycle management 로 eventlog 자동 삭제를 구성한다.