자주 묻는 질문(FAQ)

다음 섹션에는 Cloud Dataflow와 관련하여 자주 묻는 질문(FAQ)에 대한 답변이 포함되어 있습니다.

일반적인 질문

어디에서 추가 지원을 받을 수 있나요?

Google Cloud Platform(GCP) 지원을 방문하여 Cloud Dataflow를 포함한 GCP 지원 패키지를 얻을 수 있습니다.

StackOverflow를 사용하여 질문을 검색하거나 새로운 질문을 제출할 수 있습니다. 질문 제출 시 질문에 google-cloud-dataflow 태그를 사용하세요. Google 엔지니어링 직원들이 이 그룹을 모니터링하며 사용자 질문에 답변합니다.

또한 질문, 기능 요청, 버그 또는 결함 신고, 기타 의견을 UserVoice 포럼에 제출할 수 있습니다.

파이프라인 인스턴스 간에 데이터를 공유할 수 있나요?

Cloud Dataflow에는 파이프라인 간에 데이터를 공유하거나 컨텍스트를 처리하기 위한 파이프라인 간 통신 메커니즘은 없습니다. Cloud Storage 같은 저장소나 App Engine 같은 메모리 내 캐시를 사용하여 파이프라인 인스턴스 간에 데이터를 공유할 수 있습니다.

지정된 시간 또는 간격으로 파이프라인을 실행하는 예약 메커니즘이 기본으로 제공되나요?

다음 방법으로 파이프라인 실행을 자동화할 수 있습니다.

내 환경에서 어떤 버전의 Cloud Dataflow SDK가 설치/실행되고 있는지 어떻게 알 수 있나요?

설치 세부 사항은 사용자 개발 환경에 따라 다릅니다. Maven을 사용하는 경우, 한 개 이상의 로컬 Maven 저장소에 여러 버전의 Cloud Dataflow SDK가 '설치'되어 있을 수 있습니다.

자바

DataflowPipelineRunner 또는 BlockingDataflowPipelineRunner로 실행 시 콘솔 출력을 살펴보면 특정 파이프라인이 실행 중인 Cloud Dataflow SDK 버전을 확인할 수 있습니다. 콘솔에는 Cloud Dataflow SDK 버전 정보를 포함하는 다음과 같은 메시지가 포함됩니다.

Python

DataflowRunner로 실행 시 콘솔 출력을 살펴보면 특정 파이프라인이 실행 중인 Cloud Dataflow SDK 버전을 확인할 수 있습니다. 콘솔에는 Cloud Dataflow SDK 버전 정보를 포함하는 다음과 같은 메시지가 포함됩니다.

  INFO: Executing pipeline on the Dataflow Service, ...
  Dataflow SDK version: <version>

Cloud Dataflow 작업과 상호작용

파이프라인이 실행되는 동안 작업의 작업자 머신(Compute Engine VM)에 액세스할 수 있나요?

Google Cloud Platform Console을 사용하여 특정 파이프라인의 VM 인스턴스를 확인할 수 있습니다. 그런 다음 SSH를 사용하여 각 인스턴스에 액세스할 수 있습니다. 단, 작업이 완료되거나 실패하면 Cloud Dataflow 서비스가 자동으로 VM 인스턴스를 종료하고 삭제합니다.

Cloud Dataflow 모니터링 인터페이스에서 스트리밍 작업에 예약된 CPU 시간이 표시되지 않는 이유는 무엇인가요?

Cloud Dataflow 서비스는 작업이 완료된 후에 예약된 CPU 시간을 보고합니다. 따라서 제한되지 않은 작업의 경우 작업이 취소되거나 실패한 후에만 예약된 CPU 시간이 보고됩니다.

Cloud Dataflow 모니터링 인터페이스에서 최근에 업데이트된 스트리밍 작업의 작업 상태와 워터마크 정보를 사용할 수 없는 이유는 무엇인가요?

업데이트 작업은 일부 내용을 변경하며, 이러한 변경 사항이 Cloud Dataflow 모니터링 인터페이스로 전파되는 데 몇 분 정도 걸립니다. 작업을 업데이트하고 5분 후에 모니터링 인터페이스를 새로 고쳐보세요.

Cloud Dataflow 모니터링 인터페이스에서 내 커스텀 복합 변환이 확장된 상태로 나타나는 이유는 무엇인가요?

파이프라인 코드에서 다음과 같이 복합 변환을 호출했을 수 있습니다.

result = transform.apply(input);

이런 방식으로 호출된 복합 변환은 예상되는 중첩을 생략하므로 Cloud Dataflow 모니터링 인터페이스에서 확장된 상태로 나타날 수 있습니다. 파이프라인 실행 시 안정적인 고유 이름에 대한 경고 또는 오류가 발생될 수도 있습니다.

이러한 문제를 방지하려면 다음과 같은 권장 형식을 사용하여 변환을 호출해야 합니다.

result = input.apply(transform);

이전에 나타난 것처럼 Cloud Dataflow 모니터링 인터페이스에서 진행 중인 작업 정보가 더 이상 표시되지 않는 이유는 무엇인가요?

현재 한 달 이상 실행된 일부 Cloud Dataflow 작업에 영향을 줄 수 있는 알려진 문제가 있습니다. 이러한 작업은 이전에 표시되었더라도 Cloud Dataflow 모니터링 인터페이스에 로드되지 않거나 오래된 정보가 표시될 수 있습니다.

Cloud Dataflow 모니터링 인터페이스 또는 Cloud Dataflow 명령줄 인터페이스를 사용하면 작업 목록에서 작업 상태를 계속 얻을 수 있습니다. 하지만 이 문제가 있으면 작업에 대한 세부정보를 볼 수 없습니다.

자바용 Apache Beam SDK를 사용한 프로그래밍

기존의 ParDo 작업에 추가(대역 외) 데이터를 전달할 수 있나요?

예. 사용 사례에 따라 다음과 같은 몇 가지 패턴이 있습니다.

  • 정보를 DoFn 하위 클래스의 필드로 직렬화할 수 있습니다.
  • 익명의 DoFn에서 메소드로 참조하는 변수는 자동으로 직렬화됩니다.
  • DoFn.startBundle() 내부의 데이터를 계산할 수 있습니다.
  • ParDo.withSideInputs를 통해 데이터를 전달할 수 있습니다.

자세한 내용은 ParDo 문서, 특히 DoFn 만들기 및 부차 입력 섹션과 ParDo를 위한 자바용 API 참조 문서를 참조하세요.

Cloud Dataflow에서 자바 예외는 어떻게 처리되나요?

데이터를 처리하는 동안 파이프라인에서 예외가 발생할 수 있습니다. 이러한 오류의 일부는 일시적(예: 외부 서비스 액세스 시의 일시적인 어려움)이지만 일부는 영구적(예: 계산 중 null 포인터 또는 손상되거나 파싱할 수 없는 입력 데이터로 인한 오류)입니다.

Cloud Dataflow는 임의 번들에서 요소를 처리하고, 해당 번들의 요소에 대한 오류가 발생하는 경우 전체 번들을 다시 시도합니다. 일괄 모드에서 실행하는 경우, 실패 항목이 포함된 번들은 4번 다시 시도됩니다. 단일 번들이 4번 실패하면 파이프라인이 완전히 실패합니다. 스트리밍 모드에서 실행하는 경우, 실패 항목이 포함된 번들이 무제한으로 다시 시도되므로, 파이프라인이 영구적으로 중단될 수 있습니다.

사용자 코드(예: DoFn 인스턴스)의 예외는 Cloud Dataflow 모니터링 인터페이스에 보고됩니다. BlockingDataflowPipelineRunner로 파이프라인을 실행하면 콘솔이나 터미널 창에 오류 메시지가 표시됩니다.

예외 핸들러를 추가하여 코드에서의 오류를 방지할 수 있습니다. 예를 들어 ParDo에서 수행된 일부 커스텀 입력 유효성 검사에 실패한 요소를 삭제하려면 ParDo 내의 try/catch 블록을 사용하여 예외를 처리하고 요소를 삭제합니다. 또한 Aggregator를 사용하여 오류 수를 추적할 수 있습니다.

Python용 Cloud Dataflow SDK를 사용한 프로그래밍

NameError는 어떻게 처리되나요?

Cloud Dataflow 서비스를 사용하여 파이프라인을 실행하지만 로컬로 실행하지 않을 때(예: NameError를 사용) DirectRunner가 발생하는 경우, DoFn이 Cloud Dataflow 작업자에서 사용할 수 없는 전역 네임스페이스 값을 사용하고 있을 수 있습니다.

기본적으로 기본 세션에 정의된 전역 가져오기, 함수, 변수는 Cloud Dataflow 작업 직렬화 중에 저장되지 않습니다. 예를 들어 DoFn이 기본 파일에서 정의되고 참조 가져오기와 함수가 전역 네임스페이스에서 정의되어 있으면 --save_main_session 파이프라인 옵션을 True로 설정할 수 있습니다. 이렇게 하면 전역 네임스페이스 상태가 피클링되어 Cloud Dataflow 작업자에 로드됩니다.

전역 네임스페이스에 피클링할 수 없는 객체가 있으면 피클링 오류가 발생합니다. Python 배포판에서 사용할 수 있어야 하는 모듈과 관련된 오류가 발생하면 모듈을 로컬(사용되는 곳)로 가져와 이 문제를 해결할 수 있습니다.

예를 들어 다음을 사용하지 않습니다.

import re
…
def myfunc():
  # use re module

대신 다음을 사용합니다.

def myfunc():
  import re
  # use re module

또는 DoFn이 여러 파일에 걸쳐 있는 경우에는 다른 방법을 사용하여 워크플로를 패키징하고 종속 항목을 관리해야 합니다.

파이프라인 I/O

TextIO 소스와 싱크가 GZip과 같은 압축 파일을 지원하나요?

예. Cloud Dataflow 자바는 gzipbzip2로 압축된 파일을 읽을 수 있습니다. 자세한 내용은 TextIO 문서를 참조하세요.

TextIO 소스에서 정규 표현식을 사용하여 특정 파일을 대상으로 지정할 수 있나요?

Cloud Dataflow는 일반적인 와일드 카드 패턴을 지원합니다. glob 표현식은 파일 경로의 어느 곳에나 나타날 수 있습니다. 그러나 Cloud Dataflow는 재귀적 와일드 카드(**)를 지원하지 않습니다.

TextIO 입력 소스가 JSON을 지원하나요?

예. 그러나 Cloud Dataflow 서비스가 입력과 출력을 병렬화하려면 소스 데이터를 줄 바꿈으로 구분해야 합니다.

커스텀 소스로 동적 작업 리밸런스가 활성화되지 않는 이유는 무엇인가요?

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

다른 Google Cloud Platform 프로젝트(즉, Cloud Dataflow를 사용하는 프로젝트가 아닌 프로젝트)가 소유한 BigQuery 데이터세트, 게시/구독 주제, 구독에 어떻게 액세스할 수 있나요?

Cloud Dataflow를 사용하는 프로젝트가 아닌 다른 GCP 프로젝트의 BigQuery 또는 Cloud Pub/Sub 데이터에 액세스하는 방법은 Cloud Dataflow의 보안 및 권한 가이드를 참조하세요.

스트리밍

스트리밍 모드에서 내 파이프라인을 실행하려면 어떻게 해야 하나요?

파이프라인을 실행할 때 명령줄에서 --streaming 플래그를 설정할 수 있습니다. 파이프라인을 구성하면 프로그래매틱 방식으로 스트리밍 모드를 설정할 수도 있습니다.

스트리밍 모드에서 어떤 데이터 소스와 싱크가 지원되나요?

Cloud Pub/Sub의 스트리밍 데이터를 읽을 수 있으며, Cloud Pub/Sub 또는 BigQuery에 스트리밍 데이터를 쓸 수 있습니다.

현재 스트리밍 모드에는 어떤 제한 사항이 있나요?

Cloud Dataflow의 스트리밍 모드에는 다음과 같은 제한 사항이 있습니다.

  • 아직 스트리밍 모드에서 배치 소스가 지원되지 않습니다.
  • Cloud Dataflow 서비스의 자동 확장 기능은 베타 버전에서 지원됩니다.

게시/구독에서 읽는 내 스트리밍 파이프라인이 느려지는 것 같습니다. 어떻게 해야 하나요?

프로젝트에서 Cloud Pub/Sub 할당량이 부족할 수 있습니다. 429 (Rate limit exceeded) 클라이언트 오류를 검사하여 프로젝트에서 할당량이 부족한지 확인할 수 있습니다.

  1. Google Cloud Platform Console로 이동합니다.
  2. 왼쪽의 메뉴에서 API 및 서비스를 선택합니다.
  3. 검색창에서 Cloud Pub/Sub를 검색합니다.
  4. 사용량 탭을 클릭합니다.
  5. 응답 코드를 확인하고 (4xx) 클라이언트 오류 코드를 찾습니다.

대규모 작업자 풀로 내 파이프라인을 업데이트할 때 스트리밍 작업이 제대로 확장되지 않는 이유는 무엇인가요?

Cloud Dataflow 작업을 업데이트하고 새 작업에 다수의 작업자를 지정할 때는 원래 작업에 지정한 --maxNumWorkers와 동일한 작업자 수만 지정할 수 있습니다. 원래 작업 시작 시 할당된 원래 작업자 수(및 Persistent Disk 리소스)를 초과하여 확장할 수 없습니다.

이는 Cloud Dataflow 서비스의 알려진 문제로, 현재 이 문제를 적극적으로 조사하고 있습니다.

스트리밍 자동 확장

참고: Python용 Cloud Dataflow SDK는 현재 스트리밍 자동 확장을 지원하지 않습니다.

고정된 작업자 수를 원하면 어떻게 해야 하나요?

스트리밍 자동 확장 사용을 설정하려면 이 기능을 선택해야 합니다. 이 기능은 기본적으로 사용하지 않도록 설정되어 있습니다. 현재 옵션의 시맨틱스는 변경되지 않으므로 고정된 작업자 수를 계속 사용하려면 아무것도 할 필요가 없습니다.

자동 확장으로 인해 요금이 늘어날까 걱정됩니다. 어떻게 제한할 수 있나요?

--maxNumWorkers를 지정하면 작업을 처리하는 데 사용할 확장 범위가 제한됩니다.

스트리밍 자동 확장 파이프라인의 확장 범위는 어떻게 되나요?

스트리밍 자동 확장 파이프라인에 사용되는 작업자 수 범위는 N/15~N 작업자 사이이며, 여기서 N은 --maxNumWorkers 값입니다. 예를 들어 파이프라인에 안정 상태인 작업자가 3개 또는 4개 필요한 경우, --maxNumWorkers=15를 설정할 수 있으며 파이프라인은 작업자 1~15개 사이에서 자동으로 확장됩니다.

--maxNumWorkers는 최대 1,000개까지 가능합니다.

자동 확장에 사용할 수 있는 최대 작업자 수는 얼마인가요?

Cloud Dataflow는 프로젝트의 Compute Engine 인스턴스 개수 할당량 또는 maxNumWorkers 중 낮은 값 제한 내에서 작동합니다.

스트리밍 파이프라인의 자동 확장을 사용 중지할 수 있나요?

예. --autoscalingAlgorithm=NONE을 설정합니다. 수동 확장 문서의 설명대로 고정 클러스터 사양으로 파이프라인을 업데이트합니다. 여기서 numWorkers는 확장 범위 내에 있습니다.

스트리밍 파이프라인의 확장 범위를 변경할 수 있나요?

예. 하지만 업데이트로는 이를 수행할 수 없습니다. 취소 또는 드레이닝을 사용하여 파이프라인을 중지하고 원하는 새 maxNumWorkers로 파이프라인을 다시 배포해야 합니다.

Cloud Dataflow를 사용하도록 Google Cloud Platform 프로젝트 설정

Cloud Dataflow에서 사용 중인 프로젝트에서 읽고 쓰고 싶은 Cloud Storage 버킷을 소유하고 있는지 어떻게 확인하나요?

다음 콘솔 명령어를 사용하여 GCP 프로젝트가 특정 Cloud Storage 버킷을 소유하고 있는지 확인할 수 있습니다.

gsutil acl get gs://<your-bucket>

이 명령어는 다음과 유사한 JSON 문자열을 출력합니다.

[
  {
    "entity": "project-owners-123456789",
    "projectTeam": {
      "projectNumber": "123456789",
      "team": "owners"
    },
    "role": "OWNER"
  },
  ....
]

관련 항목은 '역할'이 소유자인 항목입니다. 연결된 projectNumber를 통해 해당 버킷을 소유하고 있는 프로젝트를 알 수 있습니다. 프로젝트 번호가 사용자 프로젝트 번호와 일치하지 않으면 다음 중 하나를 수행해야 합니다.

  • 프로젝트가 소유하는 새 버킷을 만듭니다.
  • 적절한 계정에 버킷에 대한 액세스 권한을 부여합니다.

내 Cloud Dataflow 프로젝트가 소유하는 새 버킷을 어떻게 만드나요?

다음 콘솔 명령어를 사용하여 Cloud Dataflow를 사용 중인 GCP 프로젝트에서 새 버킷을 만들 수 있습니다.

gsutil mb -p <Project to own the bucket> <bucket-name>

Cloud Dataflow를 통해 사용 중인 Google Cloud Platform 프로젝트에 대해 다른 프로젝트가 소유한 버킷을 읽고 쓸 수 있으려면 어떻게 해야 하나요?

Cloud Dataflow 파이프라인이 다른 GCP 프로젝트가 소유한 GCP 리소스에 액세스하는 방법에 대해서는 Cloud Dataflow의 보안 및 권한 가이드를 참조하세요.

Cloud Dataflow 작업을 실행하려 하면 'Cloud Dataflow가 이 작업을 실행하려면 프로젝트에 대해 일부 Cloud API 사용을 설정해야 합니다'라는 오류가 나타납니다. 어떻게 해야 하나요?

Cloud Dataflow 작업을 실행하려면 프로젝트에서 다음 GCP API를 사용 설정해야 합니다.

  • Compute Engine API(Compute Engine)
  • Cloud Logging API
  • Cloud Storage
  • Cloud Storage JSON API
  • BigQuery API
  • Cloud Pub/Sub
  • Cloud Datastore API

자세한 안내는 GCP API 사용 설정 시작하기 섹션을 참조하세요.

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

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

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