Cloud Storage에서 Dataflow에 읽기

Cloud Storage에서 Dataflow로 데이터를 읽으려면 Apache Beam TextIO 또는 AvroIO I/O 커넥터를 사용합니다.

Google Cloud 라이브러리 종속 항목 포함

Cloud Storage에 TextIO 또는 AvroIO 커넥터를 사용하려면 다음 종속 항목을 포함합니다. 이 라이브러리는 "gs://" 파일 이름에 대한 스키마 핸들러를 제공합니다.

자바

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-io-google-cloud-platform</artifactId>
  <version>${beam.version}</version>
</dependency>

Python

apache-beam[gcp]==VERSION

Go

import _ "github.com/apache/beam/sdks/v2/go/pkg/beam/io/filesystem/gcs"

자세한 내용은 Apache Beam SDK 설치를 참조하세요.

동시 로드

TextIOAvroIO 커넥터는 두 가지 수준의 동시 로드를 지원합니다.

  • 여러 작업자가 읽을 수 있도록 개별 파일에 별도로 키가 지정됩니다.
  • 파일이 압축되지 않은 경우 커넥터가 각 파일의 하위 범위를 개별적으로 읽을 수 있으므로 매우 높은 수준의 동시 로드가 발생합니다. 이 분할은 파일의 각 줄이 의미 있는 레코드인 경우에만 가능합니다. 예를 들어 JSON 파일에는 기본적으로 사용할 수 없습니다.

성능

다음 표에는 Cloud Storage에서 읽기의 성능 측정항목이 나와 있습니다. 워크로드는 자바용 Apache Beam SDK 2.49.0을 사용해 하나의 e2-standard2 작업자에서 실행되었습니다. Runner v2를 사용하지 않았습니다.

레코드 1억 건 | 1KB | 열 1개 처리량(바이트) 처리량(요소)
Read 320MBps 초당 요소 320,000개

이러한 측정항목은 단순 배치 파이프라인을 기반으로 합니다. 이러한 측정항목은 I/O 커넥터 사이의 성능 비교를 위해 사용되며 반드시 실제 파이프라인을 나타내지는 않습니다. Dataflow 파이프라인 성능은 복잡하며 VM 유형, 처리 중인 데이터, 외부 소스 및 싱크의 성능, 사용자 코드와 상관관계가 있습니다. 측정항목은 Java SDK 실행을 기반으로 하며 다른 언어 SDK의 성능 특성을 나타내지 않습니다. 자세한 내용은 Beam IO 성능을 참조하세요.

권장사항

  • Cloud Storage에서 watchForNewFiles를 사용하지 마세요. 커넥터가 표시된 파일 목록을 메모리에 유지해야 하기 때문에 이 방법은 대규모 프로덕션 파이프라인의 경우 제대로 확장되지 않습니다. 목록을 메모리에서 플러시할 수 없으므로 시간이 지남에 따라 작업자의 작업 메모리가 줄어듭니다. 대신 Cloud Storage용 Pub/Sub 알림을 사용하세요. 자세한 내용은 파일 처리 패턴을 참조하세요.

  • 파일 이름과 파일 콘텐츠 모두 유용한 데이터라면 FileIO 클래스를 사용하여 파일 이름을 읽습니다. 예를 들어 파일 이름에 파일의 데이터를 처리할 때 유용한 메타데이터가 포함되어 있을 수 있습니다. 자세한 내용은 파일 이름 액세스를 참조하세요. FileIO 문서에도 이 패턴의 예시가 나와 있습니다.

다음 단계