Apache Spark를 사용하면서 Driver와 Executor의 역할을 명확히 이해하는 것은 매우 중요합니다. 특히 YARN을 클러스터 매니저로 사용할 때, Driver와 Executor가 어디에서 실행되는지, 어떤 코드가 어디에서 수행되는지 혼동하기 쉽습니다. 이번 글에서는 Driver와 Executor의 역할에 대해서 복습하고 Spark on YARN의 실행 구조와 환경변수를 올바르게 설정하는 방법까지 정리해보겠습니다. Spark의 핵심 컴포넌트: Driver와 ExecutorDriver란?Driver는 Spark 애플리케이션을 관리하는 컨트롤러 역할을 합니다. 사용자가 spark-submit을 실행하면 Driver가 시작되며, 다음과 같은 역할을 수행합니다.SparkSession (SparkCo..
데이터 엔지니어링에서 dbt (Data Build Tool)는 데이터 변환과 모델링을 자동화하는 강력한 도구입니다. 특히 SQL 기반의 데이터 모델링을 체계적으로 관리하고, 변환 파이프라인을 효율적으로 구축할 수 있도록 돕습니다. 이번 포스트에서는 sql 모델, 검증을 구현하는 예시와 데이터 처리 방식과 연관된 몇가지 설정을 소개합니다.필요한 파일1. YAML 파일 (.yml)모델 설정: 모델의 메타데이터 및 설정을 정의합니다.테스트: 데이터 무결성을 검증하는 테스트를 추가할 수 있습니다.2. SQL 파일 (.sql)최종 SELECT 절을 반드시 포함해야 합니다.models 하위 디렉토리에 테이블명과 동일한 SQL 파일을 생성하여 관리합니다.모델 명세모델 파일({model}.sql) 상단에서 config..
대용량 데이터 처리에 쓰일 수 있는 분산 SQL 엔진 중 대표적인 Trino에 대해서 알아봅니다.Trino는 Facebook에서 개발된 Presto SQL에서 파생된 프로젝트입니다. 대규모 데이터셋에 대한 분산 SQL 쿼리를 제공하는 아키텍처이며 코디네이터-워크 노드로 구성되어 있습니다.아키텍처Trino 아키텍처는 크게 두 핵심 요소가 있습니다.코디네이터워커 노드코디네이터(Coordinator)쿼리 수신, 계획 수립, 작업 분배 및 전체적인 쿼리 진행을 관리하는 중심 역할을 합니다.1. 쿼리 파싱 및 분석사용자가 실행한 SQL 쿼리를 수신한 후, 이를 파싱 하여 구문을 분석합니다.쿼리 문법과 구조를 분석하여 쿼리 실행이 가능한지 확인하고, 최적화된 실행 계획을 수립합니다.2. 실행 계획(Execution..
이번 포스트에서는 Spark 작업을 최적화하여 성능을 향상시키는 방법에 대해서 다룹니다. Spark 성능 튜닝은 시스템이 사용하는 메모리, 코어와 인스턴스를 대상으로 기록할 설정을 조정하는 프로세스를 가리킵니다. Spark 튜닝을 통해 편의성과 성능 사이의 균형을 맞추고 리소스 병목 현상을 예방하는 효과를 얻을 수 있습니다. Data Serialization 객체를 직렬화하는 부분에서 성능에 영향이 크기 때문에 Spark 어플리케이션 최적화를 위해 가장 먼저 조정합니다. 여기서 직렬화를 다루는 이유는 직렬화는 spark은 네트워크로 데이터를 전송하거나 디스크에 쓸 때 바이너리 포맷으로 변환하기 위한 과정이나 셔플과정에서 쓰이기 때문에 이부분 튜닝이 성능에 큰 영향을 줄 수 있습니다. spark에서는 ja..
이전까지 spark 스크립트를 배치로 돌리면서 클러스터에서 spark-submit커맨드를 보내기 급급했는데 어플리케이션이 클러스터에서 어떻게 실행되는지 설명할 수 있어야겠다고 생각이 들었습니다. 이번 포스트에서는 spark-submit으로 클러스터에 띄운 어플리케이션이 어떻게 실행되는지 공식 문서 내용을 정리합니다. 용어 설명 Task executor에 전달되는 작업 단위 Job Spark action에 대한 응답으로 생성되는 여러 태스크로 구성된 병렬 연산. 각각의 작업을 실행하여 전체적인 처리 과정을 분산시킵니다. Stage 개별의 job은 stage라고 불리는 소규모 태스크 세트로 분할됩니다. Application Spark 스크립트로 빌드된 프로그램. 클러스터에 driver와 executor로 구..
하나의 오퍼레이터는 Airflow에서 완수해야하는 하나의 기본 단위이다. 이번 포스트에서는 가장 많이 쓰이는 오퍼레이터인 BashOperator, PythonOperator, KubernetesPodOperator 등 모든 오퍼레이터가 상속받는 BaseOperator 내용을 보면서 필수 인자와 각 오퍼레이터별 별도 필요 인자를 살펴본다.BaseOperator Abstract base class for all operators. 모든 오퍼레이터들을 위한 추상 클래스 오퍼레이터들은 DAG 내의 노드가 되는 객체들을 생성하기 때문에, BaseOperator는 DAG 크롤링 행동을 위한 많은 재귀 메서드들을 포함하고 있다. 이 클래스에서 파생되기 위해서는, 생성자와 'execute' 메서드를 재정의하면 된다. ..