목록Spark (7)
엔지니어 블로그
Spark의 대표적인 장애인 Spill을 알아보고 어떤 설정을 통해 성능 튜닝이 가능한지 알아보려고 합니다. Spill을 알아보기 전에 Shuffle,Partition의 개념을 먼저 알아보겠습니다.PartitionPartition은 RDD를 구성하는 최소 단위 객체입니다. Spark의 성능,리소스 사용을 좌우하는 중요한 개념입니다. Partition은 여러 물리 노드에서 나누어 작업합니다. Spark의 최소 작업 단위를 Task라고 하고, 1개의 Task는 1개의 Partition에서 처리합니다. 또 1개의 Task는 1Core가 처리합니다. 즉, 1Task = 1Core = 1Partition입니다.Partition의 수는 Spark 성능을 크게 좌우합니다. Partition의 수가 Core수를 결정하..

Lazy Evaluation 이란?Spark에는 Lazy Evaluation이라는 기능이 있습니다. Transformation 작업을 실행하더라도 실제 변환은 Action 작업이 진행될 때 까지 미루는 기능입니다. 예를 들어 df.filter() 작업을 수행하더라도 실제 데이터 변환 작업은 진행되지 않고, df.show()를 수행할 때 변환이 진행됩니다.Lazy Evaluation을 사용하는 이유Lazy Evaluation을 사용하는 이유는 효율적인 자원 활용을 위함입니다. 데이터 변환을 미루는 행위를 통해 전체 DataFrame을 메모리에 올리는 작업을 피할 수 있습니다. 조금 더 자세히는 매 변환 작업마다 DataFrame을 메모리로 가져오는 것을 피하여 자원 활용의 효율성을 높이기 위함입니다.또 다..
PartitionSpark는 작업할 때 RDD 혹은 DataFrame,DataSet을 사용하게 된다. 내부에서는 Partition이라는 최소 단위로 구성되어있다. 이 Partition 때문에 서로 다른 노드에서 분산 처리가 가능한 것이다.Partition은 리소스와도 깊은 연관이 있다. 우선 Spark에서 최소 연산 단위를 taks라고 하는데, 1 task 는 1 Partition을 처리한다. 또 1 Task는 1 Core가 처리하게 된다. 즉 1 task = 1 core = 1 partition 이라고 보면 된다. 이처럼 Partition의 수는 작업에 할당 할 core의 수를 결정한다. 또 개별 Partition의 크기는 core당 필요한 메모리 사이즈를 결정하게 된다. Partition의 수가 적다..

1. RDD란?RDD는 Resilient Distributed Dataset의 약자로 탄력적인 분산 데이터셋이라는 의미다. 데이터를 클러스터 내에 분산 저장하고, 하나의 파일처럼 읽고 쓰는 것이 가능하다. 물리적으로 분산저장 되는 것이 아닌, 내부에 Logical Partition이 있고 해당 파티션 기준으로 물리적 노드에서 나누어 처리가 가능하다.RDD는 불변하는 특징을 가지고있다. RDD에 작업을 하게 되면 하나 혹은 다수의 RDD를 결과 값으로 받게 된다. 즉, 작업한 RDD는 변함없이 존재하고 작업이 반영된 새로운 RDD만 생성되는 것이다.2. Transformation / ActionRDD로 수행하는 동작은 Transformation / Action 으로 나누어 볼 수 있다. 먼저 Transfo..

파케이는 데이터 엔지니어링을 하다보면 굉장히 자주 접하는 포맷이다. ㅇ케이는 데이터 엔지니어링을 하다보면 굉장히 자주 접하는 포맷이다. 무엇인지는 알고있지만 정확히 알고 넘어가기 위해 따로 공부를 진행했다.Parquet란?파케이는 아파치에서 관리하는 오픈 소스 데이터 파일 형식이다. 자세히 알기 위해 공식문서의 내용을 참고했다.Apache Parquet is an open source, column-oriented data file format designed for efficient data storage and retrieval. It provides high performance compression and encoding schemes to handle complex data in bulk and..

1. Spark의 기본적인 아키텍처Spark은 기본적으로 3 부분으로 나누어 볼 수 있다.1.Driver2.Cluster Manager3.Executor1.DriverDirver는 Spark Application을 실행하는 역할이다. main 함수를 실행하고 SparkContext 객체를 생성하게 된다.2.Cluster ManagerDriver로 부터 실행계획을 전달 받아 필요한 만큼의 Worker를 생성하게 된다. YARN,K8S가 사용되며 Worker의 failover도 담당하게 된다.3. Executor다수의 Worker 노드에서 실행되는 프로세스로 Spark Driver가 할당한 작업을 수행하여 결과를 반환한다.2. Spark 작동 과정 1.Spark SumitDriver에게 작업 내용 전달 2...

1.Spark란 무엇인가Spark는 Data Engineering, Science, ML 등의 작업을 수행할 수 있는 Muilti-Language 엔진/프레임워크다. 단일 노드 및 cluster 형태로 대량의 컴퓨팅 자원을 사용할 수 있고, 대량의 데이터에 대해 분산퇸 컴퓨팅 처리를 신뢰성 있게 처리할 수 있다.2.Spark 주요 기능Batch/Streaming단일 모델과 프레임워크로 Batch,Streaming을 통합 개발 할 수 있다.SQL AnalyticsANSI SQL로 빠른 분산 처리 결과를 얻을 수 있다. 기존의 DW 솔루션보다 빠르게 결과를 얻을 수 있다.Data Sciencepetabyte-scale 데이터에 대해 Downsampling 없이도 EDA가 가능하다MLML 알고리즘 학습이 가능..