목록2025/03 (21)
엔지니어 블로그
작업 내용Spark에서 MinlO의 csv를 읽음에러 내용java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found해결 방법에러 내용을 보니 Spark가 S3A 파일 시스템을 인식할 수 있는 JAR가 없다는 내용이다. 따라서 Spark Container내에 JAR파일을 추가하여 해결할 수 있을 것 같다. 그리고 Spark 세션에 jar 파일들을 config 해주면 해결된다. .config("spark.jars", "/root/metastore/hadoop-aws-3.3.4.jar") \ .config("spark.jars","/root/metastore/aws-java-sdk-bundle-1.1..

데이터 레이크(Data Lake)란?데이터가 폭발적으로 증가하면서, 이를 효율적으로 저장하고 분석하기 위한 새로운 아키텍처가 필요해졌습니다. 그중 대표적인 방법 중 하나가 바로 데이터 레이크(Data Lake)입니다.데이터 레이크는 이름 그대로 "호수"처럼 다양한 형태의 데이터를 한 곳에 담을 수 있는 저장소입니다. 기존 데이터 웨어하우스(DW)가 정형 데이터를 중심으로 정제된 데이터를 저장했다면, 데이터 레이크는 정형, 반정형, 비정형 데이터를 가공하지 않은 원시 형식(raw format) 그대로 저장할 수 있는 유연한 구조입니다.데이터 레이크의 장점1. 스토리지와 컴퓨팅의 분리 (Separation of Storage and Compute)데이터 레이크의 가장 큰 장점 중 하나는 저장소와 컴퓨팅 자원..
1. Elasticsearch에서 Full GC가 자주 발생하는 이유Elasticsearch는 Java 기반 애플리케이션이기 때문에 JVM의 Heap 메모리 관리가 성능에 큰 영향을 미칩니다. 특히 다음과 같은 이유로 Old 영역에 많은 객체가 쌓여 Full GC가 자주 발생할 수 있습니다.대량의 장기 유지 객체(캐시 데이터, Lucene 인덱스 구조 등) 누적잘못된 메모리 설정(과도한 Heap 크기 설정)비효율적인 인덱싱 작업이나 높은 빈도의 검색 요청으로 인한 객체 생성 증가2. 분산 환경에서의 STW(Stop-The-World) 대응 방식ES는 분산 환경에서 운용되므로, 한 노드에서 STW가 발생하더라도 전체 서비스 중단을 방지할 수 있습니다. 이를 가능하게 하는 주요 설계는 다음과 같습니다.샤딩(..

1. GC(가비지 컬렉션)란?GC란 힙(Heap) 메모리에 동적으로 할당된 객체 중 사용되지 않는 객체를 자동으로 식별하고 제거하는 프로세스를 의미합니다. GC 덕분에 개발자는 메모리 누수와 같은 메모리 관리 문제에 신경 쓰지 않고 프로그래밍에 집중할 수 있게 되었습니다.그러나 GC는 다음과 같은 단점도 존재합니다.객체의 메모리가 정확히 언제 해제되는지 알 수 없어, 개발자가 메모리 관리를 직접 제어하기 어렵습니다.GC가 실행되는 동안 모든 애플리케이션의 동작이 일시적으로 중단되는 Stop-The-World(STW) 현상이 발생하여 오버헤드가 생길 수 있습니다.2. GC 대상은 어떻게 식별할까?GC는 객체의 도달성(Reachability) 개념을 이용해 제거 대상을 식별합니다.객체에 유효한 참조(refe..
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..

k9s는 k8s를 사용할 때 굉장히 유용하다. k8s 클러스터 관리를 편리하게 하기 위해 터미널 기반의 UI를 제공하는 오픈소스 프로젝트다. 설치간단하다. github에 k9s 릴리즈를 들어가서 필요한 설치 파일을 다운 받으면 된다. https://github.com/derailed/k9s/releases Releases · derailed/k9s🐶 Kubernetes CLI To Manage Your Clusters In Style! - derailed/k9sgithub.com위 링크로 들어가면 이런 화면이 나오는데, tar.gz 파일로 설치해보겠다.설치가 완료되면 압축을 푼 후에 k9s 실행 파일을 적절한 위치에 놓으면 된다. sudo mkdir -p ~/.local/binsudo mv ./k9s..

파케이는 데이터 엔지니어링을 하다보면 굉장히 자주 접하는 포맷이다. ㅇ케이는 데이터 엔지니어링을 하다보면 굉장히 자주 접하는 포맷이다. 무엇인지는 알고있지만 정확히 알고 넘어가기 위해 따로 공부를 진행했다.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..