Google Cloud 아키텍처 프레임워크의 이 문서에서는 Google Cloud에서 분석 워크로드의 성능을 최적화하는 데 도움이 되는 권장사항을 제공합니다.
BigQuery
이 섹션에서는 BigQuery에서 쿼리 성능을 최적화하는 데 도움이 되는 권장사항을 제공합니다.
쿼리 설계 최적화
쿼리 성능은 쿼리가 읽고 쓰는 바이트 수, 슬롯 간에 전달되는 데이터 볼륨과 같은 요소에 따라 달라집니다. BigQuery에서 쿼리 성능을 최적화하려면 다음 문서에 설명된 권장사항을 적용합니다.
효율적인 구체화된 뷰 정의 및 사용
공통 및 반복 쿼리를 사용하는 워크로드 성능을 향상시키려면 구체화된 뷰를 사용하면 됩니다. 만들 수 있는 구체화된 뷰의 개수에는 한도가 있습니다. 쿼리의 모든 치환에 대해 개별적으로 구체화된 뷰를 만들지 마세요. 대신 여러 쿼리 패턴에 사용할 수 있는 구체화된 뷰를 정의합니다.
JOIN
성능 개선
구체화된 뷰를 사용하여 JOIN
위에서 집계를 수행하는 쿼리의 비용 및 지연 시간을 줄일 수 있습니다.
큰 팩트 테이블을 몇 개의 작은 차원 테이블과 조인하고 이 조인 위에서 집계를 수행하는 경우를 가정해보세요. 먼저 외래 키를 그룹화 키로 사용해서 팩트 테이블 위에서 집계를 수행하는 쿼리를 다시 작성하는 것이 실용적일 수 있습니다.
그런 다음 결과를 차원 테이블과 조인합니다. 마지막으로 집계 후 작업을 수행합니다.
Dataflow
이 섹션에서는 Dataflow 파이프라인의 쿼리 성능을 최적화하는 데 도움이 되는 권장사항을 제공합니다.
파이프라인을 만들고 배포할 때는 Dataflow 작업자 VM에 사용해야 하는 Compute Engine 머신 유형과 같이 실행 매개변수를 구성할 수 있습니다. 자세한 내용은 파이프라인 옵션을 참조하세요.
파이프라인을 배포한 후 Dataflow는 작업 실행에 필요한 Compute Engine 및 Cloud Storage 리소스를 관리합니다. 또한 Dataflow의 다음 기능은 파이프라인 성능을 최적화하는 데 도움이 됩니다.
- 동시 로드: Dataflow는 자동으로 데이터를 분할하고 작업자 코드를 Compute Engine 인스턴스에 배포하여 동시 처리합니다. 자세한 내용은 동시 처리 및 분산을 참조하세요.
- 최적화: Dataflow는 파이프라인 코드를 사용하여 PCollection 객체 및 파이프라인의 변환을 나타내는 실행 그래프를 만듭니다. 그런 다음 가장 효율적인 성능 및 리소스 사용을 위해 그래프를 최적화합니다. Cloud Dataflow는 또한 데이터 집계와 같이 많은 비용이 들 수 있는 작업을 자동으로 최적화합니다. 자세한 내용은 융합 최적화 및 결합 최적화를 참조하세요.
- 자동 조정: Dataflow는 수평 자동 확장, 수직 자동 확장, 동적 작업 재균등화를 사용하여 작업이 실행되는 동안 작업을 동적으로 최적화합니다.
웹 기반 모니터링 인터페이스 또는 Dataflow gcloud CLI를 사용하여 Dataflow 파이프라인 성능을 모니터링할 수 있습니다.
을 참조하세요.Dataproc
이 섹션에서는 Dataproc 클러스터 성능을 최적화하기 위한 권장사항에 대해 설명합니다.
클러스터 자동 확장
Dataproc 클러스터가 예측 가능한 성능을 제공하는지 확인하려면 자동 확장을 사용 설정하면 됩니다. Dataproc는 Hadoop YARN 메모리 측정항목 및 사용자가 정의한 자동 확장 정책을 사용하여 클러스터에서 작업자 VM 수를 자동으로 조정합니다. 자동 확장을 사용하고 구성하는 방법은 클러스터 자동 확장을 참조하세요.
적절한 스토리지 프로비저닝
성능 및 비용 요구사항에 따라 Dataproc 클러스터에 적합한 스토리지 옵션을 선택합니다.
- 최소한의 변경으로 Hadoop 및 Spark 작업이 읽고 쓰기를 수행할 수 있는 저비용 Hadoop 호환 파일 시스템(HCFS)이 필요한 경우 Cloud Storage를 사용합니다. Cloud Storage에 저장된 데이터는 영구적이며 다른 Dataproc 클러스터 및 BigQuery와 같은 다른 제품에서 액세스할 수 있습니다.
- Dataproc 클러스터에 지연 시간이 짧은 Hadoop 분산 파일 시스템(HDFS)이 필요한 경우 워커 노드에 연결된 Compute Engine 영구 디스크를 사용합니다. HDFS 스토리지에 저장된 데이터는 일시적이며 스토리지 비용이 Cloud Storage 옵션보다 높습니다.
- Compute Engine 영구 디스크의 성능 이점과 Cloud Storage의 비용 및 내구성 이점을 얻기 위해 두 스토리지 옵션을 조합할 수 있습니다. 예를 들어 소스 및 최종 데이터 세트를 Cloud Storage에 저장하고 중간 데이터 세트에 대해 제한된 HDFS 용량을 프로비저닝할 수 있습니다. HDFS 스토리지의 디스크 크기 및 유형을 결정할 때는 영구 디스크 및 로컬 SSD 섹션의 권장사항을 고려하세요.
Cloud Storage를 사용할 때 지연 시간 감소
Cloud Storage에 저장된 데이터에 액세스할 때 지연 시간을 줄이려면 다음이 권장됩니다.
- Dataproc 클러스터와 동일한 리전에 Cloud Storage 버킷을 만듭니다.
- Cloud Storage에 저장된 Apache Hive 관리형 테이블에 대해
auto.purge
를 사용 중지합니다. - Spark SQL을 사용할 때는 사용 가능한 최신 버전의 이미지를 사용하여 Dataproc 클러스터를 만드는 것이 좋습니다. 최신 버전을 사용하면 Spark 2.x의 느린
INSERT OVERWRITE
성능과 같이 이전 버전에 있을 수 있는 성능 문제를 방지할 수 있습니다. - Cloud Storage에 대해 서로 다른 크기 또는 작은 크기로 여러 파일을 기록할 가능성을 최소화하기 위해서는 Spark SQL 매개변수
spark.sql.shuffle.partitions
및spark.default.parallelism
또는 Hadoop 매개변수mapreduce.job.reduces
를 구성할 수 있습니다.
스토리지 부하 및 용량 모니터링 및 조정
Dataproc 클러스터의 워커 노드에 연결된 영구 디스크에는 셔플 데이터가 포함됩니다. 최적 성능을 위해 워커 노드에는 충분한 디스크 공간이 필요합니다. 노드에 디스크 공간이 부족하면 노드가 YARN NodeManager 로그에 UNHEALTHY
로 표시됩니다. 이 문제가 발생하면 영향을 받는 노드의 디스크 크기를 늘리거나 동시에 실행하는 작업 수를 줄입니다.
EFM 사용 설정
축소 또는 선점 등으로 인해 실행 중인 Dataproc 클러스터에서 워커 노드를 삭제하면 셔플 데이터가 손실될 수 있습니다. 이러한 시나리오에서 작업 지연을 최소화하기 위해서는 선점형 VM을 사용하는 클러스터 또는 보조 작업자 그룹만 자동 확장하는 클러스터에 대해 향상된 유연성 모드(EFM)를 사용 설정하는 것이 좋습니다.
다음 단계
컴퓨팅, 스토리지, 네트워킹, 데이터베이스 리소스의 성능 최적화를 위한 권장사항 검토: