Apache Spark는 정형, 반정형, 비정형 데이터를 대규모로 처리하도록 설계된 분산 처리 엔진입니다. 개발자는 Spark API를 사용하여 엔진과 상호작용하고 분산 데이터 작업을 정의합니다.
최신 Spark 개발의 핵심은 Spark DataFrame API입니다. DataFrame은 관계형 데이터베이스의 테이블이나 스프레드시트와 마찬가지로 분산 데이터를 이름이 지정된 열로 구성하고 처리합니다. 구조화된 선언적 인터페이스를 제공하여 대규모 데이터 세트를 분석하는 동시에 백그라운드에서 물리적 실행을 자동으로 최적화합니다.
Spark API가 분산 네트워크에서 코드를 실행하는 방식을 이해하려면 런타임 아키텍처의 기본 구성요소를 이해하는 것이 중요합니다.
분산 데이터 파이프라인을 설계할 때 개발자는 두 가지 기본 프로그래밍 인터페이스 중에서 선택합니다.
거의 모든 데이터 엔지니어링 및 데이터 과학 사용 사례에서 DataFrame API가 선호됩니다. RDD는 커스텀 Java 객체를 사용하여 원시 비정형 데이터(예: 바이너리 파일 또는 미디어 스트림)를 조작해야 하는 시나리오를 위해 예약되어 있습니다. DataFrame은 더 적은 코드를 필요로 하고, 자동으로 더 빠르게 실행되며, 오프힙 바이너리 메모리 관리를 활용하여 JVM 가비지 컬렉션 병목 현상을 우회합니다.
Spark DataFrame API는 대량의 데이터를 처리, 정리, 준비하는 계산 집약적인 작업을 간소화합니다.
Spark DataFrame API는 Spark의 고급 처리 라이브러리를 위한 프로그래매틱 기반 역할을 합니다.
선언적 최적화
DataFrame은 Catalyst Optimizer라는 기본 제공 쿼리 옵티마이저를 사용합니다. DataFrame 코드를 작성하면 옵티마이저가 필터 푸시다운, 프로젝션 가지치기, 조인 재정렬을 적용하는 물리적 실행 계획을 자동으로 다시 작성하여 수동 조정 없이 최대한 빠르게 실행합니다.
언어 유연성
팀에서 Python(PySpark), Scala, Java, R 중 어떤 언어로 코드를 작성하든 DataFrame API는 동일한 성능을 보장합니다. 기본 실행 계획은 동일한 JVM 독립 실행 레이어 내에서 컴파일되고 최적화됩니다.
효율적인 메모리 관리
DataFrame은 Tungsten 실행 엔진을 활용하여 데이터를 고도로 압축된 오프힙 바이너리 형식으로 저장합니다. 이렇게 하면 JVM 객체 생성 오버헤드가 제거되고 가비지 컬렉션 일시중지로 인해 실행자 스레드가 정지되는 것을 방지할 수 있습니다.
기존에는 오픈소스 Spark를 실행하려면 수동 클러스터 구성, 소프트웨어 버전 관리, 복잡한 네트워크 피어링이 필요했습니다. Google Cloud는 Managed Service for Apache Spark를 제공하여 분산 실행을 완전 관리형 엔터프라이즈급 데이터 플랫폼으로 전환함으로써 이 과정을 간소화합니다.
데이터팀은 다음 기능을 사용하여 Google Cloud에서 Spark DataFrame 워크로드를 실행합니다.