워크플로 예약 및 오케스트레이션
Databricks 워크플로는 Azure Databricks에서 데이터 처리 태스크를 예약하고 오케스트레이션할 수 있는 도구를 보유하고 있습니다. Databricks 워크플로를 사용하여 Databricks 작업을 구성합니다.
이 문서에서는 Databricks 작업을 사용한 프로덕션 워크로드 관리와 관련된 개념 및 선택을 소개합니다.
Databricks 작업이란?
작업은 Azure Databricks에서 프로덕션 워크로드를 예약하고 오케스트레이션하기 위한 기본 단위입니다. 작업은 하나 이상의 태스크로 구성됩니다. 작업과 태스크를 함께 사용하면 다음을 구성하고 배포할 수 있습니다.
- Spark, SQL, OSS Python, ML 및 임의 코드를 포함한 사용자 지정 논리입니다.
- 사용자 지정 환경 및 라이브러리를 사용하여 리소스를 컴퓨팅합니다.
- 워크로드를 실행하기 위한 일정 및 트리거입니다.
- 태스크 간의 제어 흐름에 대한 조건부 논리입니다.
작업은 태스크 간의 관계를 정의하는 절차적 접근 방식을 제공합니다. Delta Live Tables 파이프라인은 데이터 세트와 변환 간의 관계를 정의하는 선언적 접근 방식을 제공합니다. Delta Live Tables 파이프라인을 작업에 작업으로 포함할 수 있습니다. 작업에 대한 Delta Live Tables 파이프라인 태스크를 참조하세요.
작업은 Databricks Notebook을 실행하는 단일 태스크에서 조건부 논리 및 종속성을 사용하여 실행되는 수천 개의 태스크에 이르기까지 복잡성이 달라질 수 있습니다.
작업을 구성하고 실행하는 방법
작업 UI, Databricks CLI를 사용하거나 작업 API를 호출하여 작업을 만들고 실행할 수 있습니다. UI 또는 API를 사용하여 실패하거나 취소된 작업을 복구하고 다시 실행할 수 있습니다. UI, CLI, API 및 알림(예: 이메일, 웹후크 대상 또는 Slack 알림)을 사용하여 작업 실행 결과를 모니터링할 수 있습니다.
작업을 구성하고 오케스트레이션하는 데 IaC(Infrastructure-as-code) 접근 방식을 선호하는 경우 DAB(Databricks Asset Bundles)를 사용합니다. 번들은 작업 및 태스크의 YAML 정의를 포함할 수 있고, Databricks CLI를 사용하여 관리되며, 다른 대상 작업 영역(예: 개발, 스테이징 및 프로덕션)에서 공유 및 실행할 수 있습니다. DAB를 사용하여 작업을 구성하고 오케스트레이션하는 방법에 대한 자세한 내용은 Databricks 자산 번들을 참조하세요.
Databricks CLI 사용에 대한 자세한 내용은 Databricks CLI란?을 참조하세요. 작업 API 사용에 대한 자세한 내용은 작업 API를 참조하세요.
작업에 필요한 최소 구성은 무엇인가요?
Azure Databricks의 모든 작업에는 다음이 필요합니다.
- 실행할 논리가 포함된 소스 코드(예: Databricks Notebook)입니다.
- 논리를 실행할 컴퓨팅 리소스. 컴퓨팅 리소스는 서버리스 컴퓨팅, 클래식 작업 컴퓨팅 또는 다목적 컴퓨팅일 수 있습니다. 작업용 컴퓨팅 구성을 참조하세요.
- 작업을 실행해야 하는 경우에 대해 지정된 일정. 필요에 따라 일정 설정을 생략하고 작업을 수동으로 트리거할 수 있습니다.
- 고유한 이름
참고 항목
Databricks Notebooks에서 코드를 개발하는 경우 예약 단추를 사용하여 해당 Notebook을 작업으로 구성할 수 있습니다. 예약된 Notebook 작업 만들기 및 관리를 참조하세요.
태스크란?
태스크는 작업의 단계적으로 실행해야 하는 논리 단위를 나타냅니다. 태스크는 복잡성 범위가 다양하며 다음을 포함할 수 있습니다.
- Notebook
- A JAR
- SQL 쿼리
- A DLT 파이프라인
- 다른 작업
- 제어 흐름 태스크
태스크 간의 종속성을 지정하여 태스크의 실행 순서를 제어할 수 있습니다. 태스크를 순서대로 또는 병렬로 실행하도록 구성할 수 있습니다.
작업은 태스크의 상태 정보 및 메타데이터와 상호 작용하지만 태스크 범위는 격리됩니다. 태스크 값을 사용하여 예약된 태스크 간에 컨텍스트를 공유할 수 있습니다. 태스크 간에 정보 전달을 위해 태스크 값 사용을 참조하세요.
작업에 사용할 수 있는 제어 흐름 옵션은 무엇인가요?
작업 내에서 작업 및 태스크를 구성할 때 전체 작업 및 개별 태스크가 실행되는 방식을 제어하는 설정을 사용자 지정할 수 있습니다. 이러한 옵션은 다음과 같습니다.
트리거 유형
작업을 구성할 때 트리거 유형을 지정해야 합니다. 다음과 같은 트리거 유형 중에서 선택할 수 있습니다.
작업을 수동으로 트리거하도록 선택할 수도 있지만, 주로 다음과 같은 특정 사용 사례에 대해 예약되어 있습니다.
- REST API 호출을 사용하여 작업을 트리거하기 위해 외부 오케스트레이션 도구를 사용합니다.
- 데이터 품질 문제를 확인하거나 해결하기 위해 수동 개입이 필요한 경우는 거의 실행하지 않는 작업이 있습니다.
- 마이그레이션과 같이 한 번 또는 몇 번만 실행해야 하는 워크로드를 실행하고 있습니다.
Databricks 작업에 대한 트리거 유형을 참조하세요.
재시도
다시 시도는 오류 메시지와 함께 태스크가 실패할 경우 특정 태스크를 다시 실행해야 하는 횟수를 지정합니다. 오류는 종종 일시적이며 다시 시작을 통해 해결됩니다. 구조적 스트리밍을 사용한 스키마 진화와 같은 Azure Databricks의 일부 기능은 환경을 재설정하고 워크플로를 계속 진행하기 위해 다시 시도로 작업을 실행한다고 가정합니다.
태스크에 대한 다시 시도를 지정한 경우 오류가 발생할 때 지정된 횟수까지 태스크가 다시 시작됩니다. 모든 작업 구성에서 태스크 다시 시도를 지원하는 것은 아닙니다. 다시 시도 정책 설정을 참조하세요.
연속 트리거 모드에서 실행하는 경우 Databricks는 지수 백오프를 사용하여 자동으로 다시 시도합니다. 연속 작업에 대한 오류 처리 방법을 참조하세요.
조건부 태스크인 경우 실행
실행 조건 태스크 유형을 사용하여 다른 태스크의 결과에 따라 이후 태스크에 대한 조건을 지정할 수 있습니다. 작업에 태스크를 추가하고 업스트림 종속 태스크를 지정합니다. 이러한 태스크의 상태에 따라 실행할 하나 이상의 다운스트림 태스크를 구성할 수 있습니다. 작업은 다음 종속성을 지원합니다.
- 모두 성공함
- 최소 한 번 성공함
- 실패 없음
- 모두 완료됨
- 한 번 이상 실패함
- 모두 실패함
작업 종속성 구성을 참조하세요.
If/else 조건부 태스크
If/else 태스크 유형을 사용하여 일부 값을 기반으로 조건을 지정할 수 있습니다. If/else 태스크를 사용하여 작업에 분기 논리 추가를 참조하세요.
작업은 논리 내에서 정의하고 태스크에서 작업 환경으로 일부 계산 또는 상태의 결과를 반환할 수 있도록 지원하는 taskValues
을(를) 지원합니다. taskValues
, 작업 매개 변수 또는 동적 값에 대해 If/else 조건을 정의할 수 있습니다.
Azure Databricks는 조건부에 대해 다음 피연산자를 지원합니다.
==
!=
>
>=
<
<=
다음을 참조하세요.
각 태스크의 경우
For each
태스크를 통해 다른 태스크를 루프에서 실행하여 태스크의 각 반복에 다른 매개 변수 집합을 전달합니다.
작업에 For each
태스크를 추가하려면 For each
태스크와 중첩된 태스크라는 두 가지 태스크를 정의해야 합니다. 중첩된 태스크는 For each
태스크의 각 반복에 대해 실행할 태스크이며 표준 Databricks 작업 태스크 유형 중 하나입니다. 중첩된 태스크에 매개 변수를 전달하기 위해 여러 메서드가 지원됩니다.
루프에서 매개 변수화 Azure Databricks 작업 태스크 실행을 참조하세요.
기간 임계값
지정된 기간을 초과하는 경우 경고를 보내거나 태스크 또는 작업을 중지하도록 기간 임계값을 지정할 수 있습니다. 이 설정을 구성하려는 경우의 예는 다음과 같습니다.
- 중단 상태에 갇히기 쉬운 태스크가 있습니다.
- 워크플로에 대한 SLA를 초과하는 경우 엔지니어에게 경고해야 합니다.
- 예상치 못한 비용을 방지하기 위해 대규모 클러스터로 구성된 작업을 실패시키려고 합니다.
예상 완료 시간 또는 작업에 대한 시간 제한 구성 및 예상 완료 시간 또는 태스크에 대한 시간 제한 구성을 참조하세요.
동시성
대부분의 작업은 1개의 동시 작업의 기본 동시성으로 구성됩니다. 즉, 새 작업이 트리거될 때까지 이전 작업 실행이 완료되지 않은 경우 다음 작업 실행을 건너뜁니다.
동시성을 높이기 위한 몇 가지 사용 사례가 있지만 대부분의 워크로드에서는 이 설정을 변경할 필요가 없습니다.
동시성 구성에 대한 자세한 내용은 Databricks 작업 큐 및 동시 실행 설정을 참조하세요.
작업을 모니터링하는 방법
작업 UI를 사용하면 진행 중인 실행을 포함하여 작업 실행을 볼 수 있습니다. Databricks 작업에 대한 모니터링 및 관찰 가능성을 참조하세요.
작업 또는 태스크가 시작, 완료 또는 실패할 때 알림을 받을 수 있습니다. 하나 이상의 이메일 주소 또는 시스템 대상으로 알림을 보낼 수 있습니다. 작업 이벤트에 대한 이메일 및 시스템 알림 추가를 참조하세요.
시스템 테이블에는 계정의 작업 활동과 관련된 레코드를 볼 수 있는 lakeflow
스키마가 포함되어 있습니다. 작업 시스템 테이블 참조를 참조하세요.
작업 시스템 테이블을 청구 테이블과 조인하여 계정 전체에서 작업 비용을 모니터링할 수도 있습니다. 시스템 테이블을 사용하여 작업 비용 모니터링을 참조하세요.
제한 사항
다음 제한 사항이 존재합니다.
- 작업 영역은 2000개의 동시 태스크 실행으로 제한됩니다. 즉시 시작할 수 없는 실행을 요청하면
429 Too Many Requests
응답이 반환됩니다. - 작업 영역에서 한 시간 내에 만들 수 있는 작업 수는 10000개로 제한됩니다("실행 제출" 포함). 이 제한은 REST API 및 Notebook 워크플로에 의해 만들어진 작업에도 영향을 줍니다.
- 작업 영역에는 최대 12000개의 저장된 작업이 포함될 수 있습니다.
- 작업에는 최대 100개의 태스크가 포함될 수 있습니다.
프로그래밍 방식으로 워크플로를 관리할 수 있나요?
Databricks는 다음을 포함하여 워크플로를 프로그래밍 방식으로 예약하고 오케스트레이션할 수 있는 도구와 API를 보유합니다.
개발자 도구에 대한 자세한 내용은 개발자 도구 참조하세요.
Apache AirFlow를 사용한 워크플로 오케스트레이션
Apache Airflow를 사용하여 데이터 워크플로를 관리하고 예약할 수 있습니다. Airflow를 사용하면 Python 파일에서 워크플로를 정의하고 Airflow는 워크플로 예약 및 실행을 관리합니다. Apache Airflow를 사용한 Azure Databricks 작업 오케스트레이션을 참조하세요.
Azure Data Factory를 사용한 워크플로 오케스트레이션
ADF(Azure Data Factory)는 데이터 스토리지, 이동 및 처리 서비스를 자동화된 데이터 파이프라인으로 구성할 수 있는 클라우드 데이터 통합 서비스입니다. ADF를 사용하여 ADF 파이프라인의 일부로 Azure Databricks 작업을 오케스트레이션할 수 있습니다.
ADF에서 Azure Databricks에 인증하는 방법을 포함하여 ADF 웹 활동을 사용하여 작업을 실행하는 방법을 알아보려면 Azure Data Factory에서 Azure Databricks 작업 오케스트레이션 활용을 참조하세요.
또한 ADF는 ADF 파이프라인에서 JAR로 패키지된 Databricks Notebooks, Python 스크립트 또는 코드를 실행하는 기본 제공 지원을 보유합니다.
ADF 파이프라인에서 Databricks Notebook을 실행하는 방법을 알아보려면 Azure Data Factory에서 Databricks Notebook 활동으로 Databricks Notebook 실행을 참조한 다음, Databricks Notebook을 실행하여 데이터 변환을 참조하세요.
ADF 파이프라인에서 Python 스크립트를 실행하는 방법을 알아보려면 Azure Databricks에서 Python 작업을 실행하여 데이터 변환을 참조하세요.
ADF 파이프라인의 JAR에 패키지된 코드를 실행하는 방법을 알아보려면 Azure Databricks에서 JAR 작업을 실행하여 데이터 변환을 참조하세요.