Apache Spark에 대한 메모리 사용량 최적화

이 문서에서는 Azure HDInsight에서 최상의 성능을 위해 Apache Spark 클러스터 메모리 관리를 최적화하는 방법을 설명합니다.

개요

Spark는 데이터를 메모리에 두고 작업하기 때문에 Spark 작업 실행을 최적화하려면 메모리 리소스 관리가 중요합니다. 클러스터 메모리를 효율적으로 사용하기 위해 적용할 수 있는 여러 가지 기술이 있습니다.

  • 더 작은 데이터 파티션을 선호하고 분할 전략에서 데이터 크기, 유형 및 배포를 고려합니다.
  • 기본 Java serialization보다 더 새롭고 효율적인 Kryo data serialization을 고려합니다.
  • YARN은 배치별로 spark-submit를 구분하므로 YARN을 사용하는 것이 좋습니다.
  • Spark 구성 설정을 모니터링하고 조정합니다.

참조용으로 Spark 메모리 구조와 일부 핵심 실행기 메모리 매개 변수가 다음 이미지에 표시됩니다.

Spark 메모리 고려 사항

Apache Hadoop YARN을 사용하는 경우 YARN은 각 Spark 노드에서 모든 컨테이너에 의해 사용되는 메모리를 제어합니다. 다음 다이어그램에서는 주요 개체 및 해당 관계를 보여 줍니다.

YARN Spark Memory Management.

'메모리 부족' 메시지를 해결하려면 다음을 시도합니다.

  • DAG 관리 순서 섞기를 검토합니다. 맵 쪽에서 원본 데이터를 줄이거나 사전 분할(또는 버킷화)하여 줄이고 단일 순서 섞기로 최대화하여 전송된 데이터 양을 줄입니다.
  • 집계, 창 작업 및 기타 함수를 제공하지만 메모리 제한은 없는 GroupByKey보다 고정된 메모리 제한이 있는 ReduceByKey을 선호합니다.
  • 드라이버에서 모든 작업을 수행하는 Reduce보다 실행기 또는 파티션에서 더 많은 작업을 수행하는 TreeReduce를 선호합니다.
  • 하위 수준의 RDD 개체가 아닌 데이터 프레임을 사용합니다.
  • "상위 N개", 다양한 집계 또는 창 작업 같이 작업을 캡슐화하는 ComplexTypes를 만듭니다.

추가 문제 해결 단계는 Azure HDInsight의 Apache Spark에 대한 OutOfMemoryError 예외를 참조하세요.

다음 단계