파이프라인 설계 원칙

이 페이지는 Google Cloud Dataflow 파이프라인을 설계하는 데 도움이 됩니다. 또한 파이프라인 구조를 결정하는 방법, 데이터에 적용할 변환을 선택하는 방법, 입력 및 출력 방식을 결정하는 방법에 대한 정보에 대해서도 설명합니다.

이 섹션을 읽기 전에 파이프라인, PCollection, 변환, 파이프라인 I/O를 포함한 Cloud Dataflow 프로그래밍 모델에 대한 정보를 익히는 것이 좋습니다.

파이프라인 설계 시 고려해야 할 사항

Cloud Dataflow 파이프라인을 설계할 때에는 몇 가지 기본적인 질문을 고려해야 합니다.

  • 입력 데이터는 어디에 저장되나요? 입력 데이터 세트가 얼마나 많이 있나요? 이러한 질문을 통해 파이프라인 시작 시 적용해야 할 읽기 변환 종류를 결정하게 됩니다.
  • 데이터는 어떤 모양인가요? 예를 들어 일반 텍스트, 형식이 지정된 로그 파일 또는 BigQuery 테이블의 행일 수 있습니다. 일부 Dataflow 변환은 PCollection 키/값 쌍에서 단독으로 작동하므로, 데이터가 키를 가져오는 조건 및 방법과 파이프라인의 PCollection에서 데이터를 가장 잘 표현하는 방법을 결정해야 합니다.
  • 데이터로 무엇을 하려고 하나요? Dataflow SDK의 핵심 변환은 범용이며, 데이터를 변경 또는 조작해야 하는 방법을 알고 있으면 ParDo와 같은 핵심 변환을 빌드하는 방법이나 Dataflow SDK와 함께 포함된 미리 작성된 변환을 사용해야 하는 시기를 결정할 수 있습니다.
  • 출력 데이터는 어떤 모양이며 어디로 가게 되나요? 이러한 질문을 통해 파이프라인 끝에 적용해야 할 쓰기 변환 종류를 결정하게 됩니다.

기본 파이프라인

가장 단순한 파이프라인은 아래의 그림 1과 같이 선형 흐름으로 작업을 나타냅니다.

그림 1: 선형 파이프라인

그러나 파이프라인은 훨씬 더 복잡해질 수 있습니다. 파이프라인은 단계의 방향성 비순환 그래프를 나타냅니다. 여러 입력 소스, 여러 출력 싱크를 가질 수 있으며 해당 작업(변환)은 여러 PCollection을 출력할 수 있습니다.

다양한 파이프라인 형태

다음 예는 다양한 형태의 파이프라인을 보여줍니다.

PCollection 분기

변환은 PCollection을 사용하지 않는다는 점을 이해하는 것이 중요합니다. 대신, PCollection의 각 개별 요소를 고려하여 새로운 PCollection을 출력으로 생성합니다. 이렇게 하면 동일한 PCollection에 있는 각 요소에 대해 서로 다른 작업을 수행할 수 있습니다.

여러 변환으로 동일한 PCollection 처리

입력을 사용하거나 변경하지 않고도 여러 변환에 대해 동일한 PCollection을 입력으로 사용할 수 있습니다.

아래의 그림 2에 표시된 파이프라인은 단일 소스인 Google BigQuery에서 해당 입력의 이름(문자열)을 읽고 BigQuery 테이블 행의 PCollection을 만듭니다. 그런 다음 파이프라인은 여러 변환을 같은 PCollection에 적용합니다. 변환 A는 PCollection에서 'A'로 시작하는 이름을 모두 추출하고, 변환 B는 PCollection에서 'B'로 시작하는 모든 이름을 추출합니다. 변형 A와 B 모두 동일한 입력 PCollection을 가집니다.

그림 2: 여러 변환이 있는 파이프라인. BigQuery 테이블 행의 PCollection이 두 개의 변환에 의해 처리됨

부차 출력을 사용하는 단일 변환

파이프라인을 분기하는 또 다른 방법은 부차 출력을 사용하여 단일 변환을 여러 PCollection으로 출력하는 것입니다. 부차 출력을 사용하는 변환은 입력의 각 요소를 한 번씩 처리하고 0개 이상의 PCollection으로 출력할 수 있게 해 줍니다.

아래의 그림 3은 위에서 설명한 예와 같지만 부차 출력을 사용하는 1개의 변환을 사용한다는 점이 다릅니다. 'A'로 시작하는 이름은 출력 PCollection에 추가되고, 'B'로 시작하는 이름은 부차 출력 PCollection에 추가됩니다.

그림 3: 여러 개의 PCollection을 출력하는 변환이 포함된 파이프라인

그림 2의 파이프라인은 동일한 입력 PCollection에서 요소를 처리하는 2개의 변환을 포함합니다. 하나의 변환은 다음과 같은 논리 패턴을 사용합니다.

if (starts with 'A') { outputToPCollectionA }

다른 하나는 다음 변환을 사용합니다.

if (starts with 'B') { outputToPCollectionB }

각각의 변환이 전체 입력 PCollection을 읽기 때문에 입력 PCollection의 각 요소는 두 번 처리됩니다.

그림 3의 파이프라인은 논리를 사용하는 변환이 하나만 있다는 점을 제외하고 동일한 방식으로 작업을 수행합니다.

if (starts with 'A') { outputToPCollectionA } else if (starts with 'B') { outputToPCollectionB }

여기서 입력 PCollection의 각 요소는 한 번 처리됩니다.

둘 중 하나의 메커니즘을 사용하여 여러 출력 PCollection을 생성할 수 있습니다. 그러나 요소당 변환 계산에 많은 시간이 소요되는 경우 부차 출력을 사용하는 것이 좋습니다.

PCollection 병합

종종 여러 개의 변환을 통해 PCollection을 여러 PCollection으로 분기한 후에 PCollection 결과물의 일부 또는 모두를 병합해야 하는 경우가 있습니다. 다음 중 하나를 수행하여 병합할 수 있습니다.

  • Flatten - Dataflow SDK에서 Flatten 변환을 사용하면 같은 유형PCollection을 여러 개 병합할 수 있습니다.
  • Join - Dataflow SDK에서 CoGroupByKey 변환을 사용하면 PCollection 두 개에서 관계형 조인을 수행할 수 있습니다. 이 PCollection에는 키가 지정(키/값 쌍 컬렉션이어야 함)되어야 하며 동일한 키 유형을 사용해야 합니다.

아래의 그림 4에 표시된 예는 위 섹션의 그림 2의 설명과 이어지는 내용입니다. 'A'로 시작하는 이름과 'B'로 시작하는 이름을 가진 두 개의 PCollection으로 분기한 후에 파이프라인이 이 두 개를 단일 PCollection으로 병합하면 여기에 포함된 모든 이름은 'A' 또는 'B'로 시작하게 됩니다. 여기서 병합되는 모든 PCollection에는 동일한 유형이 포함되어 있기 때문에 Flatten을 사용하는 것이 좋습니다.

그림 4: 여러 PCollection을 병합하는 파이프라인의 일부

여러 소스

파이프라인은 한 개 이상의 소스로부터 입력을 읽을 수 있습니다. 파이프라인이 여러 소스에서 입력을 읽은 경우 해당 소스의 데이터가 관련되어 있으면 입력을 조인하는 것이 도움이 될 수 있습니다. 아래 그림 5의 예에서 파이프라인은 BigQuery의 이름과 주소, Google Cloud Storage의 이름과 주문 번호를 읽습니다. 그런 다음 파이프라인은 CoGroupByKey를 사용하여 이 정보를 결합합니다. 여기서 키는 이름이고, 결과로 생성된 PCollection에는 이름, 주소, 주문의 모든 조합이 포함됩니다.

그림 5: 여러 입력 소스가 있는 파이프라인

다음 과정

이 페이지가 도움이 되었나요? 평가를 부탁드립니다.

다음에 대한 의견 보내기...

도움이 필요하시나요? 지원 페이지를 방문하세요.