Dataflow는 오픈소스 Apache Beam 프로젝트를 기반으로 합니다. 이 문서에서는 Apache Beam 프로그래밍 모델을 설명합니다.
개요
Apache Beam은 일괄 및 스트리밍 파이프라인을 모두 정의할 수 있는 오픈소스 통합 모델입니다. Apache Beam 프로그래밍 모델을 사용하면 대규모 데이터 처리 방식이 간단해집니다. Apache Beam SDK 중 하나를 사용하여 파이프라인을 정의하는 프로그램을 빌드합니다. 그런 다음 Dataflow와 같은 특정 플랫폼에서 파이프라인을 실행합니다. 이 모델을 사용하면 병렬 처리의 조정 관리가 아닌 데이터 처리 작업의 논리적 구성에 집중할 수 있습니다.
Apache Beam은 사용자가 개별 작업자 조정, 데이터 세트 샤딩 등과 같은 분산 처리의 세밀한 부분에 신경 쓸 필요가 없도록 만듭니다. Dataflow가 이러한 세밀한 부분을 완벽하게 관리합니다.
파이프라인은 데이터 컬렉션에 적용되는 변환 그래프입니다. Apache Beam에서는 컬렉션을 PCollection
이라고 하고 변환을 PTransform
이라고 합니다. PCollection
은 제한되거나 제한되지 않을 수 있습니다.
제한된 PCollection
은 알려진 고정 크기를 가지며 일괄 파이프라인을 사용하여 처리될 수 있습니다. 제한되지 않은 PCollections
는 데이터가 도착할 때 처리되므로 스트리밍 파이프라인을 사용해야 합니다.
Apache Beam은 Google Cloud 서비스 및 Apache Kafka와 같은 서드 파티 기술을 포함하여 여러 시스템에서 읽고 쓸 수 있는 커넥터를 제공합니다.
다음 다이어그램은 Apache Beam 파이프라인을 보여줍니다.
임의의 로직을 수행하는 PTransforms
를 작성할 수 있습니다. 또한 Apache Beam SDK는 다음을 포함한 유용한 PTransforms
라이브러리를 즉시 제공합니다.
- 조건자를 충족하지 않는 모든 요소를 필터링합니다.
- 각 요소에 일대일 매핑 함수를 적용합니다.
- 키별로 요소를 그룹화합니다.
- 컬렉션의 요소 수를 계산합니다.
- 키-값 컬렉션에서 각 키와 연결된 요소 수를 계산합니다.
Dataflow를 사용하여 Apache Beam 파이프라인을 실행하려면 다음 단계를 수행하세요.
- Apache Beam SDK를 사용하여 파이프라인을 정의하고 빌드합니다. 또는 Dataflow 템플릿을 사용하여 사전 빌드된 파이프라인을 배포할 수 있습니다.
- Dataflow를 사용하여 파이프라인을 실행합니다. Dataflow는 작업을 실행할 VM 풀을 할당하고 VM에 코드를 배포하며 작업 실행을 조정합니다.
- Dataflow는 백엔드에서 최적화를 수행하여 파이프라인이 효율적으로 실행되도록 하고 동시 로드를 활용합니다.
- 작업이 실행되고 완료된 후 Dataflow 관리 기능을 사용해서 진행 상태를 모니터링하고 문제 해결합니다.
Apache Beam 개념
이 섹션에서는 기본 개념을 간략하게 설명합니다.
기본 개념
- 파이프라인
- 파이프라인은 입력 데이터 읽기, 데이터 변환, 출력 데이터 쓰기와 관련된 일련의 계산 전체를 캡슐화합니다. 입력 소스와 출력 싱크는 같은 유형이거나 서로 다른 유형일 수 있으며 개발자가 데이터를 한 형식에서 다른 형식으로 변환할 수 있습니다. Apache Beam 프로그램은
Pipeline
객체를 생성한 후 이 객체를 파이프라인의 데이터 세트를 만드는 기초로 사용하는 것부터 시작합니다. 각 파이프라인은 반복 가능한 단일 작업을 나타냅니다. - PCollection
PCollection
은 파이프라인의 데이터 역할을 하는 잠재적으로 분산된 다중 요소 데이터 세트를 나타냅니다. Apache Beam은PCollection
객체를 파이프라인의 각 단계에서 입력 및 출력으로 사용합니다.PCollection
은 지속적으로 업데이트되는 데이터 소스에서 고정된 크기의 데이터 세트 또는 제한되지 않은 데이터 세트를 보관할 수 있습니다.- 변환
- 변환은 데이터를 변환하는 처리 작업을 나타냅니다. 변환은
PCollection
한 개 이상을 입력으로 사용하고, 컬렉션의 각 요소에 지정된 작업을 수행하고,PCollection
한 개 이상을 출력으로 생성합니다. 변환은 데이터에서 수학적 계산 수행, 데이터를 한 형식에서 다른 형식으로 변환, 데이터 그룹화, 데이터 읽기 및 쓰기, 원하는 요소만 출력하도록 데이터 필터링, 데이터 요소를 단일 값으로 결합 등을 포함한 거의 모든 종류의 처리 작업을 수행할 수 있습니다. - ParDo
ParDo
는 Apache Beam SDK의 핵심 동시 처리 작업으로, 입력PCollection
의 각 요소에 사용자 지정 함수를 호출합니다.ParDo
는 출력PCollection
에서 출력 요소를 0개 이상 수집합니다.ParDo
변환에서는 요소를 독립적으로 동시에 처리할 수 있습니다.- 파이프라인 I/O
- Apache Beam I/O 커넥터를 사용하면 파이프라인에서 데이터를 읽고 파이프라인의 출력 데이터를 쓸 수 있습니다. I/O 커넥터는 소스와 싱크로 구성됩니다. 모든 Apache Beam 소스 및 싱크는 여러 데이터 스토리지 형식의 데이터로 파이프라인을 작동시키는 변환입니다. 커스텀 I/O 커넥터를 작성할 수도 있습니다.
- 집계
- 집계는 여러 입력 요소에서 일부 값을 계산하는 과정입니다. Apache Beam 집계의 기본 계산 패턴은 모든 요소를 공통 키와 기간으로 그룹화하는 것입니다. 그런 다음 연결 및 가환 작업을 통해 각 요소 그룹이 결합됩니다.
- 사용자 정의 함수(UDF)
- Apache Beam 내 일부 작업에서는 사용자 정의 코드를 실행하여 변환을 구성할 수 있습니다.
ParDo
의 경우 사용자 정의 코드는 각 요소에 적용할 작업을 지정하고,Combine
의 경우에는 값 조합 방법을 지정합니다. 파이프라인에 실행기 언어와 다른 언어로 작성된 UDF가 있을 수 있습니다. 여러 언어로 작성된 UDF도 있을 수 있습니다. - 실행기
- 실행기는 파이프라인을 수락하고 실행하는 소프트웨어입니다. 대부분의 실행기는 빅데이터 처리 시스템을 대규모로 동시 처리하는 번역기 또는 어댑터입니다. 다른 실행기는 로컬 테스트 및 디버깅 용입니다.
- 소스
- 외부 스토리지 시스템에서 읽는 변환입니다. 파이프라인은 일반적으로 소스에서 입력 데이터를 읽습니다. 소스 유형은 싱크 유형과 다를 수 있으므로 파이프라인을 통과하는 데이터의 데이터 형식을 변경할 수 있습니다.
- 싱크
- 파일 또는 데이터베이스와 같은 외부 데이터 스토리지 시스템에 쓰는 변환입니다.
- TextIO
- 텍스트 파일을 읽고 쓰기 위한 PTransform입니다. TextIO 소스와 싱크는
gzip
및bzip2
로 압축된 파일을 지원합니다. TextIO 입력 소스는 JSON을 지원합니다. 예. 그러나 Dataflow 서비스가 입력과 출력을 동시에 로드하려면 소스 데이터를 줄 바꿈으로 구분해야 합니다. TextIO 소스에서 정규 표현식을 사용하여 특정 파일을 대상으로 지정할 수 있습니다. Dataflow는 일반적인 와일드 카드 패턴을 지원합니다. glob 표현식은 경로의 어느 곳에나 나타날 수 있습니다. 그러나 Dataflow는 재귀적 와일드 카드(**
)를 지원하지 않습니다.
고급 개념
- 이벤트 시간
- 데이터 이벤트가 발생한 시간으로, 데이터 요소 자체의 타임스탬프로 결정됩니다. 이는 파이프라인의 임의 단계에서 실제 데이터 요소가 처리되는 시간과 다릅니다.
- 윈도우
- 윈도우에서는 개별 요소의 타임스탬프에 따라 컬렉션을 유한 컬렉션의 기간으로 나눠 제한되지 않은 컬렉션에서 그룹화 작업을 수행할 수 있습니다. 윈도우 함수는 요소를 최초 기간에 할당하는 방법과 그룹화된 요소의 기간을 병합하는 방법을 실행기에 알려줍니다. Apache Beam에서는 여러 종류의 기간을 정의하거나 사전 정의된 윈도우 함수를 사용할 수 있습니다.
- 워터마크
- Apache Beam은 특정 기간의 모든 데이터가 파이프라인에 도착했다고 예측할 수 있는 시점에 대한 시스템 표기법인 워터마크를 추적합니다. 데이터가 시간 순서대로 또는 예측 가능한 간격으로 파이프라인에 도착하지 않을 수도 있으므로 Apache Beam은 워터마크를 추적합니다. 또한 데이터 이벤트가 생성된 순서와 동일한 순서로 파이프라인에 나타나지 않을 수도 있습니다.
- 트리거
- 트리거는 데이터가 도착할 때 집계된 결과를 내보낼 시점을 결정합니다. 제한된 데이터의 경우 모든 입력이 처리된 후에 결과가 내보내기됩니다. 제한되지 않은 데이터의 경우 시스템이 해당 기간의 모든 입력 데이터가 처리되었다고 판단했음을 나타내는 워터마크의 기간 끝 통과 시점에 결과가 내보내기됩니다. Apache Beam에서는 사전 정의된 몇 가지 트리거가 제공되며, 개발자는 이러한 트리거를 결합할 수 있습니다.
다음 단계
- Apache Beam SDK를 사용하여 파이프라인을 빌드하는 기본 개념에 대한 자세한 내용은 Apache Beam 문서의 Apache Beam 프로그래밍 가이드를 참조하세요.
- Dataflow에서 지원하는 Apache Beam 기능에 대한 자세한 내용은 Apache Beam 기능 행렬을 참조하세요.