Data Engineering

Data Engineering/Spark

[Spark] Adaptive Query Execution

Adaptive Query ExecutionApache Spark 3.0부터 본격적으로 도입된 Adaptive Query Execution(AQE)는 런타임에 실행 계획을 동적으로 최적화함으로써, 기존의 정적(Static) 최적화가 갖는 한계를 보완하고 Spark SQL 성능을 크게 향상시키는 기술임.일반적으로 Spark SQL은 쿼리를 제출할 때 Catalyst 옵티마이저를 통해 논리적/물리적 계획을 최적화하지만, 쿼리 실행 이전에 추정된 통계 정보(Statistics) 를 기반으로 계획이 결정됨.그러나 빅데이터 환경에서는 데이터 분포가 매우 다양하여 사전에 추정된 통계가 실제와 많이 다를 수 있기 때문에, 기존 정적 최적화만으로는 완벽한 성능을 보장하기 어려움.이 문제를 해결하기 위해 AQE는 실행 ..

Data Engineering/Spark

[Spark] Apache Spark의 Job, Stage, Task 구조

Apache Spark의 Job, Stage, TaskApache Spark의 실행 모델에서 Job, Stage, Task는 분산 처리를 구조화해서 이해하는 핵심 개념임.Spark가 내부적으로 어떻게 작업을 쪼개고, 네트워크를 통해 데이터를 주고받으며, 실제 연산을 실행하는지 파악하기 위해서는 이 세 가지 개념을 명확히 이해해야 함. Job : Job이란 무엇인가?Job은 사용자가 Action을 호출했을 때 트리거되는, 물리적 실행 단위들의 묶음임.Spark에서 collect(), count(), save(), show() 등 Action 함수를 호출할 때마다 새로운 Job이 생성됨.단일 Spark 애플리케이션 안에서도 여러 Job이 순차적으로(또는 때때로 병렬적으로) 실행될 수 있음. Job : Job..

Data Engineering/Spark

[Spark] 스파크의 동작 원리

Apache Spark 동작 원리Apache Spark는 대규모 데이터 처리를 위해 메모리 기반의 빠른 연산을 제공하는 분산 컴퓨팅 엔진임.스파크가 내부적으로 어떻게 애플리케이션을 실행하고, 자원을 스케줄링하며, 데이터를 처리하는지 이해하는 것은 성능 최적화와 효율적인 운영을 위해 매우 중요함. 전체 아키텍처 개요1. Spark Application사용자가 작성한 스파크 애플리케이션(예: Scala, Python, R, Java 코드)임.SparkContext(Spark 1.x) 또는 SparkSession(Spark 2.x 이상)을 생성하여, Spark 클러스터에 작업을 제출함. 2. DriverSpark Application의 메인 프로세스로, 사용자가 작성한 코드를 해석하고, 스케줄링 및 실행을 제..

Data Engineering/Spark

[Spark] 스파크에서 Shuffle 개념

Apache Spark ShuffleApache Spark에서 Shuffle은 매우 중요한 핵심 메커니즘 중 하나임.대규모 데이터를 분산 환경에서 처리할 때 발생하는 ‘데이터 재분배(Data Redistribution) 또는 재파티셔닝(Shuffle)’ 과정을 의미함.Shuffle 단계에서는 특정 Transformation(예: reduceByKey, groupByKey, join 등)을 실행하기 위해, 클러스터의 여러 노드에 분산되어 있던 데이터를 필요한 형태로 재배치해야 함.이때 대규모 네트워크 I/O와 디스크 I/O가 발생하므로, Spark 성능과 자원 활용도에 큰 영향을 미침. Shuffle의 기본 개념1. 데이터 재분배(Partition Shuffling)Spark는 RDD(혹은 Dataset/..

Data Engineering/Spark

[Spark] 클러스터 매니저 종류

Apache Spark Cluster Manager 종류Apache Spark는 다양한 환경에서 유연하게 동작할 수 있도록 여러 종류의 클러스터 매니저(Cluster Manager)를 지원함.클러스터 매니저는 Spark 응용 프로그램이 실행되는 물리적/가상 자원을 효과적으로 관리하고, Executor(작업 실행 프로세스)를 스케줄링하는 핵심 역할을 담당함.전문가 수준으로 이해하기 위해서는 각각의 클러스터 매니저가 어떤 원리로 자원을 할당하고, Spark가 어떤 방식을 통해 이들과 상호작용하는지 살펴봐야 함. Standalone Cluster Manager : 동작 방식1. Master-Slave 구조Spark Standalone 클러스터는 하나의 Master 프로세스와 여러 Worker 노드(노드마다 W..

Data Engineering/Spark

[Spark] Executor 개념

Apache Spark의 ExecutorApache Spark에서 “Executor”는 클러스터 환경에서 실제로 작업(Task)을 실행하고, 데이터 처리를 담당하는 프로세스를 의미함.즉, Spark Driver가 분산 처리 계획을 세우고 Task를 스케줄링하면, 실제 연산은 Executor가 수행함.Spark 애플리케이션이 실행되는 동안, 각 Executor는 애플리케이션에 할당된 자원을 사용하여 RDD나 DataFrame, Dataset 등을 메모리에 적재하고 계산을 수행함. Executor의 생성 및 배포 방식Spark 애플리케이션이 시작되면, 다음과 같은 흐름으로 Executor가 배포됨. 1. Driver 시작사용자가 Spark Application(예: spark-submit)을 제출하면, 클러..

Data Engineering/Spark

[Spark] Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession

intellij 에서 Spark를 Scala로 실행하는 도중 만난 에러Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession$ at ReadCsvGzExample$.main(ReadCsvGzExample.scala:6) at ReadCsvGzExample.main(ReadCsvGzExample.scala)Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession$ at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java..

Data Engineering/Zeppelin

[Zeppelin] Maven 의존성

Maven 의존성Maven에서 의존성은 프로젝트를 빌드, 테스트, 배포할 때 필요한 외부 라이브러리, 프레임워크, 플러그인 등을 의미함.Maven은 이러한 의존성을 자동으로 관리하여 개발자가 직접 라이브러리를 다운로드하고 설정하는 수고를 덜어줌.의존성 관리는 Maven의 핵심 기능 중 하나로, 특히 대규모 프로젝트에서 개발의 생산성을 높이고 유지보수를 용이하게 만듦. Maven 의존성의 기본 개념Maven에서 의존성은 pom.xml 파일에 dependencies 섹션을 통해 정의됨.각 의존성은 GAV 형태로 관리됨.1. Group ID라이브러리나 프로젝트의 소속을 나타내는 식별자 2. Artifact ID특정 라이브러리를 구분하는 이름 3. Version해당 라이브러리의 버전 기본 의존성 설정 ..

Data Engineering/Zeppelin

[Zeppelin] Realm

Realm 개요 및 정의Realm은 모바일 애플리케이션용 데이터베이스로, 특히 iOS와 Android 환경에서 효율적으로 사용될 수 있도록 설계된 NoSQL 기반 데이터베이스 엔진임.Realm은 로컬 데이터베이스를 지원하며, SQLite와 Core Data를 대체할 수 있는 대안으로 널리 사용됨.Realm의 주요 목표는 빠른 성능, 간결한 API, 데이터의 동기화 및 보안을 제공함.Realm은 오픈 소스 프로젝트로 시작되었으며, 현재 MongoDB가 이를 인수하여 관리하고 있음.Realm의 클라우드 기능과 Realm Sync를 활용하면 클라이언트 간에 데이터를 자동으로 동기화할 수 있임.Realm의 주요 특징1. 고성능 및 빠른 속도Realm은 SQLite보다 최대 10배 빠른 성능을 제공할 수 있음.데..

Data Engineering/Zeppelin

[Zeppelin] Neo4j

Neo4jNeo4j는 그래프 데이터베이스의 대표적인 솔루션임.노드와 관계를 이용해 데이터를 저장하고 쿼리하는 데이터베이스임.관계형 데이터베이스와 달리, 데이터의 연결성을 자연스럽게 모델링하고 빠르게 탐색할 수 있도록 설계됨.이를 통해 복잡한 관계형 데이터를 다루는 데 효율적이며, 특히 소셜 네트워크 분석, 추천 시스템, 공급망 관리, 사기 탐지 등에서 뛰어난 성능을 발휘함. Neo4j의 기본 개념Neo4j의 데이터 구조는 그래프 모델을 기반으로 함. 1. 노드데이터를 표현하는 기본 단위임.예를 들어, 사람, 장소, 제품 등이 노드로 표현됨.각 노드는 속성을 가질 수 있음.예를 들어, name, age, location과 같은 키값 쌍 형태의 속성임.노드는 레이블을 사용해 카테고리화할 수 있음.예를 들어 ..

박경태
'Data Engineering' 카테고리의 글 목록