동적 작업 재균등화

Dataflow 서비스의 동적 작업 재균등화 기능을 사용하면 서비스에서 런타임 조건에 따라 동적으로 다시 작업 파티션을 나눌 수 있습니다. 이러한 조건에는 다음이 포함될 수 있습니다.

  • 작업 할당의 불균형
  • 작업자의 완료 시간이 예상보다 오래 걸림
  • 작업자가 예상보다 빨리 완료

Dataflow 서비스는 이러한 조건을 자동으로 감지하여 사용되지 않거나 사용량이 적은 작업자에게 작업을 동적으로 할당하여 작업의 전체 처리 시간을 줄일 수 있습니다.

제한사항

동적 작업 재균등화는 Cloud Dataflow 서비스가 입력 데이터 일부를 동시에 처리 중인 경우에만 발생합니다. 즉, 외부 입력 소스에서 데이터를 읽는 경우, 구체화된 중간 PCollection으로 작업하는 경우, GroupByKey와 같은 집계의 결과에 대해 작업하는 경우에만 발생합니다. 작업의 많은 단계가 융합되면 작업의 중간 PCollection이 줄어들고 동적 작업 재균등화는 소스의 구체화된 PCollection의 요소 수로 제한됩니다. 동적 작업 재균등화를 파이프라인의 특정 PCollection에 적용할 수 있도록 하려면 몇 가지 동적 동시 처리 방법으로 융합을 방지하면 됩니다.

동적 작업 재균등화는 데이터를 단일 레코드보다 더 미세하게 다시 동시 처리할 수 없습니다. 데이터에 처리 시간을 크게 지연시키는 개별 레코드가 포함된 경우에도 작업이 지연될 수 있습니다. Dataflow는 개별 '핫' 레코드를 세분화하여 여러 작업자에게 재배포할 수 없습니다.

Java

파이프라인의 최종 출력에 고정된 수의 샤드를 설정하면(예: TextIO.Write.withNumShards를 사용하여 데이터 작성) Dataflow는 선택한 샤드 수에 따라 동시 처리를 제한합니다.

Python

파이프라인의 최종 출력에 고정된 수의 샤드를 설정하면(예: beam.io.WriteToText(..., num_shards=...)를 사용하여 데이터 작성) Dataflow는 선택한 샤드 수에 따라 동시 처리를 제한합니다.

Go

파이프라인의 최종 출력에 고정된 수의 샤드를 설정하면 Dataflow는 선택한 샤드 수에 따라 동시 처리를 제한합니다.

커스텀 데이터 소스 작업

자바

파이프라인에서 사용자가 제공한 커스텀 데이터 소스를 사용하는 경우 소스가 동적 작업 재균등화 기능을 사용하여 작업할 수 있도록 하려면 splitAtFraction 메서드를 구현해야 합니다.

splitAtFraction을 잘못 구현하면 소스의 레코드가 복제되거나 삭제된 것으로 보일 수 있습니다. splitAtFraction 구현에 대한 도움말과 팁은 RangeTracker에 대한 API 참조 정보를 참조하세요.

Python

파이프라인에서 사용자가 제공한 커스텀 데이터 소스를 사용하는 경우 소스가 동적 작업 재균등화 기능을 사용하여 작업할 수 있도록 하려면 RangeTracker에서 try_claim, try_split, position_at_fraction, fraction_consumed 메서드를 구현해야 합니다.

자세한 내용은 RangeTracker에 대한 API 참조 정보를 참조하세요.

Go

파이프라인에서 사용자가 제공한 커스텀 데이터 소스를 사용하는 경우 소스가 동적 작업 재균등화 기능을 사용하여 작업할 수 있도록 하려면 유효한 RTracker를 구현해야 합니다.

자세한 내용은 RTracker API 참조 정보를 확인하세요.

동적 작업 재균등화는 커스텀 소스의 getProgress() 메서드의 반환 값을 사용하여 활성화됩니다. getProgress()의 기본 구현은 null을 반환합니다. 자동 확장을 활성화하려면 커스텀 소스가 getProgress()를 재정의하여 적절한 값을 반환해야 합니다.