파이프라인

Dataflow SDK에서 파이프라인은 데이터 처리 작업을 나타냅니다. Dataflow SDK로 프로그램을 작성하여 파이프라인을 빌드합니다. 파이프라인은 입력 데이터 소스를 읽고 이 데이터를 변환한 후 결과 출력을 작성할 수 있는 일련의 작업으로 구성됩니다. 파이프라인의 데이터와 변환은 해당 파이프라인에 고유하고 이러한 파이프라인이 소유합니다. 프로그램이 파이프라인을 여러 개 만들 수 있지만 파이프라인이 데이터나 변환을 공유할 수 없습니다.

복잡성이 다양한 파이프라인을 만들 수 있습니다. 파이프라인은 변형 조합이 하나씩 실행되거나 파이프라인이 분기하고 병합할 수 있는 상대적으로 단순하고 선형적인 형태일 수 있습니다. 따라서 파이프라인은 단순한 단계의 선형성 시퀀스라기 보다는 단계의 방향성 그래프라고 생각할 수 있습니다. 파이프라인을 구성하면서 조건, 루프, 기타 공통 프로그래밍 구조를 사용하여 이러한 방향성 그래프를 만들 수 있습니다.

참고: Dataflow SDK로 프로그램을 작성하면 프로그램은 파이프라인 사양을 만듭니다. 이 사양은 Cloud Dataflow 서비스 또는 타사 실행기일 수 있는 파이프라인 실행기로 보내집니다. 파이프라인 실행기는 실제 파이프라인을 비동기적으로 실행합니다. 또한 파이프라인은 테스트와 디버깅용으로 로컬로 실행될 수 있습니다.

파이프라인 실행기가 분산된 실행을 위한 실제 파이프라인을 빌드하면 파이프라인이 최적화될 수 있습니다. 예를 들어, 특정 변환을 함께 실행하거나 다른 순서로 실행하면 계산적으로 더 효율적일 수 있습니다. Dataflow 서비스는 파이프라인 실행의 이러한 측면을 완벽하게 관리합니다.

파이프라인을 구성하는 요소

파이프라인은 데이터와 해당 데이터에 적용되는 변환 등 두 부분으로 구성됩니다. Dataflow SDK는 데이터와 변환을 모두 나타내는 클래스를 제공합니다. Dataflow SDK는 데이터 클래스와 변환 클래스를 결합하여 전체 파이프라인을 구성합니다. Dataflow SDK 클래스를 사용하여 파이프라인을 구성하는 방법에 대한 자세한 내용은 파이프라인 구성을 참조하세요.

파이프라인 데이터

Dataflow SDK에서 파이프라인은 PCollection이라고 하는 특수 컬렉션 클래스를 사용하여 해당 입력, 중간, 출력 데이터를 나타냅니다. PCollection은 거의 모든 크기의 데이터 세트를 나타내는 데 사용될 수 있습니다. 자바의 Collection과 같은 일반적인 컬렉션 클래스와 비교해 PCollection은 병렬화된 처리를 지원하도록 특별히 설계되었습니다.

파이프라인은 처리해야 하는 모든 데이터에 대해 PCollection을 만들어야 합니다. 외부 소스에서 PCollection으로 데이터를 읽거나 Dataflow 프로그램의 로컬 데이터에서 PCollection을 만들 수 있습니다. 그러면 파이프라인의 각 변환은 PCollection 한 개 이상을 입력으로 수용하여 PCollection 한 개 이상을 출력으로 생성합니다.

PCollection 작동 방식과 이를 사용하는 방법에 대한 자세한 내용은 PCollection을 참조하세요.

파이프라인 변환

변환은 파이프라인의 단계를 말합니다. 각 변환은 PCollection 한 개 이상을 입력으로 받아들이거나, 해당 PCollection의 요소를 변경 또는 조작하여 새 PCollection 한 개 이상을 출력으로 생성합니다.

핵심 변환

Dataflow SDK에는 다수의 핵심 변환이 포함되어 있습니다. 핵심 변환은 파이프라인 데이터에 대해 수행되는 기본적이거나 공통 처리 작업을 나타내는 일반 작업입니다. 대부분의 핵심 변환은 처리 패턴을 제공하며 사용자에게 PCollection 입력에 적용되는 실제 처리 논리를 만들어 공급하도록 요구합니다.

예를 들어, ParDo 핵심 변환은 일반 처리 패턴을 제공합니다. PCollection 입력의 각 요소에 대해 해당 요소에서 사용자 지정 처리 함수를 실행합니다. Dataflow SDK는 ParDoGroupByKey와 같은 핵심 변환과 데이터 세트를 결합, 병합, 분할하기 위한 기타 핵심 변환을 제공합니다.

파이프라인에서 변환을 사용하는 방법에 대한 자세한 설명은 변환을 참조하세요.

복합 변환

Dataflow SDK는 여러 변환을 보다 큰 복합 변환으로 결합하는 기능을 지원합니다. 복합 변환의 경우, 더욱 복잡한 데이터 처리 작업을 수행하기 위해 데이터 세트에 여러 변환이 적용됩니다. 복합 변환은 유용한 기능을 수행하는 모듈형의 재사용할 수 있는 변환 조합을 빌드하는 좋은 방법입니다.

Dataflow SDK에는 일반적인 데이터 사용 사례를 처리하는 사전 작성된 복합 변환 라이브러리가 포함되어 있습니다. 여기에는 다음이 포함되며 이에 국한되지는 않습니다.

  • 수치 데이터 합산 또는 평균 계산과 같은 데이터 결합
  • 컬렉션에서 고유한 요소 카운트와 같은 맵/셔플/축소 스타일 처리
  • 컬렉션에서 상위 N 요소 찾기와 같은 통계 분석

또한 고유한 재사용할 수 있는 복합 변환을 만들 수 있습니다. 자세한 내용은 복합 변환 만들기를 참조하세요.

루트 변환

Dataflow SDK는 초기 PCollection을 만들기 위해 파이프라인 시작에 루트 변환을 사용하는 경우가 종종 있습니다. 루트 변환은 주로 외부 데이터 소스에서 데이터를 읽습니다. 자세한 내용은 파이프라인 I/O를 참조하세요.

단순 예제 파이프라인

다음 예는 세 가지 변환을 사용하여 파이프라인을 구성하고 실행하는 과정을 보여줍니다. 이 세 가지 변환은 일부 데이터에서 읽기를 수행하는 변환, 데이터를 카운트하는 변환, 카운트 결과를 작성하는 변환입니다.

참고: Dataflow SDK에서 클래스를 사용하여 파이프라인을 구성하는 방법에 대한 자세한 내용은 파이프라인 구성을 참조하세요.

파이프라인을 구성하기 위한 일반적인 스타일은 변환을 함께 '묶는' 것입니다. 다음 예와 같이 변환을 묶기 위해 새로운 각 변환을 이전 변환의 결과 PCollection에 직접 적용합니다.

자바

  public static void main(String[] args) {
    // Create a pipeline parameterized by commandline flags.
    Pipeline p = Pipeline.create(PipelineOptionsFactory.fromArgs(args));

    p.apply(TextIO.Read.from("gs://..."))   // Read input.
     .apply(new CountWords())               // Do some processing.
     .apply(TextIO.Write.to("gs://..."));   // Write output.

    // Run the pipeline.
    p.run();
  }

예에서 apply에 대한 첫 번째 호출은 루트 변환을 호출하여 PCollection을 만듭니다(이 경우, 파일에서 데이터를 읽음). apply에 대한 이후의 각 호출은 각 반환되는 PCollection을 순서대로 호출합니다.

참고: 전체 체인의 반환 값은 저장되지 않습니다. 이는 Write 변환에 대한 최종 apply 호출이 PCollection 대신 간단한 PDone 유형 값을 반환하기 때문입니다. PDone은 일반적으로 무시됩니다.

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

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

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