2017-12-11 5 views
1

Apache Beam 2.1.0은 BigQuery에서 읽은 템플릿 파이프 라인에 버그가있어 한 번만 실행할 수있었습니다. 자세한 내용은 여기 https://issues.apache.org/jira/browse/BEAM-2058BigQueryIO withTemplateCompatibility를 사용하여 성능 읽기

이 빔 2.2.0의 출시와 함께 수정되었습니다, 당신은 지금 withTemplateCompatibility 옵션을 사용하여 BigQuery를 읽을 수, 템플릿 파이프 라인은 이제 여러 번 실행할 수 있습니다.

pipeline 
    .apply("Read rows from table." 
     , BigQueryIO.readTableRows() 
        .withTemplateCompatibility() 
        .from("<your-table>") 
        .withoutValidation()) 

이 구현은 지금 일관되게 완료 45~50분을 복용 8-11분에 달렸다 무엇을 일괄 처리 파이프 라인을 가지고 BigQueryIO 작업을 읽기에 엄청난 성능의 비용으로 올 것으로 보인다. 두 파이프 라인 간의 유일한 차이점은 .withTemplateCompatibility()입니다.

성능이 크게 떨어지는 이유와 성능을 향상시킬 방법이 있는지 이해하려고합니다.

감사합니다.

해결책 :은 jkff의 입력을 기반으로합니다.

pipeline 
    .apply("Read rows from table." 
     , BigQueryIO.readTableRows() 
        .withTemplateCompatibility() 
        .from("<your-table>") 
        .withoutValidation()) 
    .apply("Reshuffle", Reshuffle.viaRandomKey()) 

답변

1

나는이 withTemplateCompatibility이 읽기 ​​단계에 dynamic rebalancing를 해제의 비용으로 제공한다는 사실에 기인한다 생각한다.

작거나 중간 정도의 데이터를 읽었을 때만 큰 영향을 미칠 것으로 예상됩니다. 이 경우 에 Reshuffle.viaRandomKey()을 추가하십시오. 데이터의 임시 사본을 구체화하지만 다운 스트림 처리를 훨씬 더 잘 병렬 처리합니다.

+0

감사합니다. jkff. 이 방법으로 문제가 해결되지만 내부 변환을 위해 재편성 변환이 사용 중지 된 것으로 표시되어 있습니다. – Ken

+0

우리가 교체가 필요하다는 것을 알 수있는 불행한 장소에 있지만, 우리는 아직 그것을 가지고 있지 않습니다. (지금은 안전하게 사용할 수 있습니다. – jkff