2015-01-13 1 views
2

내 작업에서 처리량 (기록 된 레코드 수/초)이 "그룹화 기준"단계 후에 크게 느려졌습니다. 워크 플로 단계가 실행되면 일부 인스턴스는 유휴 상태 인 것처럼 보이지만 일부 인스턴스는 ~ 30 %의 CPU 사용률을가집니다.그룹 후 처리량이 느림

데이터 흐름 문제입니까? 아니면이 단계의 병렬 처리를 높이기 위해 어떻게 든 워크 플로에 지시해야합니까?

감사합니다, G

답변

1

그것의 파이프 라인이 무엇을하고 있는지에 대한 자세한 세부 사항을 모르고 무슨 일이 일어나고 있는지 확실히 알고 어렵다. 일반적으로 처리량 (레코드 수/초)에서

는 기록의

  • 크기 등 여러 가지 요인에 따라 달라집니다. 일반 정보 GroupByKey에서에서의 파르

의한 처리

  • 양은 키 이루어진 큰 레코드와 그 키의 모든 값을 구성하는 단계; 즉, 입력 KV < K의 집합이고, V>를 출력 KV < 컬렉션은 K, Iterable을 < V >> I의 레코드가 GroupByKey에서 의해 출력 기대할 일반적 결과

    가있다 입력 레코드보다 훨씬 큽니다. 기록이 더 커지므로 처리하는 데 더 오래 걸리므로 기록/초는 줄어들 것입니다.

    데이터 흐름의 알파 릴리스에서 CPU 사용률이 낮지는 않습니다. 현재 Dataflow는 모든 VM 코어를 완전히 처리하지 못하고 있습니다. 이를 개선하기위한 많은 성능 향상이 이루어졌습니다.

    데이터 흐름은 현재

    --numWorkers=<integer> 
    --workerMachineType=<Name of GCE VM Machine Type> 
    

    --numWorkers 당신이 병렬로 데이터를 처리하는 데 사용 근로자의 수를 늘리거나 줄일 수있는 플래그를 통해 병렬 처리의 양을 조정하기위한 두 개의 손잡이를 제공합니다. 일반적으로 작업자 수를 늘리면 더 많은 데이터를 병렬로 처리 할 수 ​​있습니다.

    --workerMachineType을 사용하면 더 많거나 적은 CPU 또는 RAM이있는 시스템을 선택할 수 있습니다.

    VM의 CPU가 제대로 활용되지 않는 경우 CPU 수가 적은 컴퓨터를 선택할 수 있습니다. 기본적으로 Dataflow는 VM 당 4 개의 CPU를 사용합니다. 시스템 당 CPU를 줄이지 만 numWorkers를 늘려 총 CPU 수가 거의 같으면 작업 비용을 높이 지 않고 병렬 처리 수준을 높일 수 있습니다.

    지금 데이터 흐름은 글로벌 수준 (단 단계 수준이 아니라)에서 병렬 처리량을 제어하는 ​​매우 거친 노브를 제공합니다. 이것은 미래에 바뀔 수도 있습니다. 그러나 일반적으로 우리의 목표는 병렬 처리의 양을 자동으로 조정하여 사용자가하지 않아도되도록하는 것입니다.

  • 0

    낮은 처리량은 "바로 가기 키"또는 매우 자주 발생하는 키의 결과 일 수 있습니다. 이렇게하면 단일 작업자가 단일 코어로 처리하는 매우 큰 콜렉션이 생성됩니다.

    Here은 단축키에 대한 Google의 공식 문서 및이를 처리하는 방법입니다.내 경험상, Combine.PerKeyWithHotKeyFanout을 사용하여 선택적으로 팬 아웃 팩터를 적용하면 좋은 결과가 나타납니다.

    관련 문제