DataEngineering/Spark
spark ui 에서 병목찾는법
Image🔍 Spark UI 병목 찾는 순서 (이대로 보면 됨)0️⃣ 한 줄 요약👉 Stages → Tasks → Shuffle → Executors이 순서로 보면 90% 병목 찾음1️⃣ Jobs 탭 – “어디서 오래 걸렸나?”먼저 보는 것Job 실행 시간어떤 Job이 유독 김?👉 제일 오래 걸린 Job 하나를 고른다2️⃣ Stages 탭 – ⭐ 핵심여기서 거의 다 보인다체크 포인트Stage 실행 시간Shuffle Read / Write 있는 StageStage 개수 (너무 많거나 적은지)👉 시간 많이 먹는 Stage = 병목 후보⚠️ 흔한 Stage 병목 패턴Exchange, Sort, Aggregatejoin 직후 Stage👉 대부분 shuffle 문제3️⃣ Tasks 탭 – “몇 개가 느린..
Spark 최적화 체크리스트
1️⃣ 데이터 읽기 최적화👉 읽는 양을 줄이는 게 1순위CSV ❌ → Parquet / ORC ✅select("*") ❌ → 필요한 컬럼만filter는 최대한 앞에서partition 컬럼으로 조회2️⃣ Shuffle 최소화👉 Spark 느려지는 가장 큰 이유불필요한 groupBy, distinct 제거join 전에 row / 컬럼 줄이기작은 테이블은 broadcast join무분별한 repartition 금지3️⃣ Partition 전략👉 병렬 처리의 기본파티션 수 = 데이터 크기 / 128MB파티션 너무 많아도 ❌, 적어도 ❌줄일 땐 coalesce늘릴 땐 repartition4️⃣ Join 최적화👉 대부분 성능 이슈의 원인작은 테이블 broadcastjoin key null 제거join 전에 ..
Suffle이란?
한 줄 정의👉 Shuffle = 데이터가 네트워크를 타고 다른 Executor로 “재분배”되는 과정왜 shuffle이 생기냐?Spark는 원래 데이터를 **여러 조각(partition)**으로 나눠서 처리해.그런데 어떤 연산은 같은 키를 가진 데이터가 한 곳에 모여야 해.그때 발생하는 게 shuffle야.shuffle이 생기는 대표 연산아래 나오면 무조건 의심 👇groupByjoinorderBydistinctrepartition예:df.groupBy("user_id").count()👉 user_id가 같은 row들을 한 Executor로 모아야 함👉 그래서 데이터 이동 발생 = shuffle그림 없이 비유로 이해하기 🎒학생들이 교실 여러 곳에 흩어져 있음“같은 반끼리 모여!” 라고 지시함👉 학..
df.cache() 를 언제 써야하나?
한 줄 답👉 같은 DataFrame을 “여러 번 다시 쓸 때”만 cache 한다.왜 cache가 필요하냐면Spark는 lazy evaluation이라서DataFrame을 쓸 때마다 처음부터 다시 계산해.CSV → filter → join → groupBy이걸count()show()write()처럼 여러 번 호출하면👉 매번 다시 CSV부터 읽음 😱그래서 중간 결과를 메모리에 저장하는 게 cache().✅ cache 써야 하는 경우1️⃣ 같은 df를 여러 액션에서 사용df2 = df.filter(...)df2.count()df2.write.parquet(...)👉 df2.cache() 👍2️⃣ 비싼 연산 뒤의 중간 결과큰 joinaggregationUDF 적용 후👉 다시 계산하기 싫을 때3️⃣ 반..
Dataframe 이란?
📊 DataFrame 이란?한 줄 정의👉 행(row)과 열(column)로 이루어진 “표 형태의 데이터 구조”(엑셀·SQL 테이블 같은 개념)직관적인 비유DataFrame = 엑셀 표를수천 대 컴퓨터에 나눠서 동시에 계산하는 구조DataFrame의 핵심 특징1️⃣ 스키마가 있다컬럼 이름 + 타입 보유Spark가 데이터 구조를 이해함user_id : longevent_time : timestampprice : double👉 이게 RDD와 가장 큰 차이2️⃣ SQL처럼 다룬다df.filter(df.price > 100).groupBy("user_id").count()또는SELECT user_id, COUNT(*)FROM dfGROUP BY user_id👉 분석가·엔지니어 모두 친숙3️⃣ 자동 최적화 ..
Lazy Evaluation 이란?
한 줄 비유👉 “할 일 목록만 적어두고,진짜 일은 마지막에 한 번에 한다.”Lazy Evaluation 이란?👉 연산을 즉시 실행하지 않고,‘실행 계획(DAG)’만 쌓아두는 방식Spark에서는:filterselectjoin같은 건 바로 실행 안 함언제 진짜 실행되나?👉 Action을 만났을 때Action 예시count()show()collect()write()이 순간에 Spark가:지금까지 쌓인 연산을 보고실행 계획을 최적화하고한 번에 실행예제로 보면 바로 이해됨df2 = ( df .filter(df.price > 100) .select("user_id", "price"))👉 여기까지는 아무 일도 안 함df2.count()👉 이때서야 진짜 실행왜 이렇게 하냐?1️⃣ 최적화 가능불..
Spark 란?
한 줄 정의👉 **Spark는 “대용량 데이터를 빠르게 처리하기 위한 분산 데이터 처리 엔진”**이야.조금 풀어서 말하면한 대 컴퓨터로는 느린 작업을여러 대 컴퓨터(CPU, 메모리)를 동시에 써서한 번에 처리해주는 시스템👉 그게 바로 Apache SparkSpark는 뭘 잘하냐?✔️ 잘하는 것대용량 데이터 처리 (GB~TB~PB)로그 분석ETL 파이프라인집계 / 통계머신러닝 전처리❌ 안 맞는 것소량 데이터실시간 초저지연 트랜잭션 (OLTP)Spark vs 단일 서버 (차이 감각)❌ 일반 Python한 줄로 한 줄 처리CPU 1개메모리 한계✅ Spark데이터를 쪼개서여러 CPU / 여러 서버에서동시에 처리Spark의 핵심 특징 4가지1️⃣ 분산 처리데이터를 여러 조각(partition)으로 나눔동시에 ..