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
라이브러리를 즉시 제공합니다.
- 조건자를 충족하지 않는 모든 요소를 필터링합니다.
- 각 요소에 1대1 매핑 함수를 적용합니다.
- 키별로 요소를 그룹화합니다.
- 컬렉션의 요소 수를 계산합니다.
- 키-값 컬렉션에서 각 키와 연결된 요소를 셉니다.
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 기능 행렬을 참조하세요.