<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>How-To Guide on Advanced Beginner</title><link>https://advanced-beginner.github.io/ko/docs/spark/howto/</link><description>Recent content in How-To Guide on Advanced Beginner</description><generator>Hugo</generator><language>ko-KR</language><managingEditor>d8lzz1gpw@mozmail.com (kimbenji)</managingEditor><webMaster>d8lzz1gpw@mozmail.com (kimbenji)</webMaster><lastBuildDate>Mon, 23 Mar 2026 19:08:15 +0900</lastBuildDate><atom:link href="https://advanced-beginner.github.io/ko/docs/spark/howto/index.xml" rel="self" type="application/rss+xml"/><item><title>OutOfMemoryError 해결하기</title><link>https://advanced-beginner.github.io/ko/docs/spark/howto/oom-troubleshooting/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/howto/oom-troubleshooting/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 약 15분
&lt;/blockquote&gt;

&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Driver OOM&lt;/strong&gt;: &lt;code&gt;collect()&lt;/code&gt; 결과 크기 줄이기, &lt;code&gt;spark.driver.memory&lt;/code&gt; 증가&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Executor OOM&lt;/strong&gt;: 파티션 수 증가 (&lt;code&gt;repartition&lt;/code&gt;), &lt;code&gt;spark.executor.memory&lt;/code&gt; 증가&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;진단 우선&lt;/strong&gt;: Spark UI에서 어디서 OOM이 발생하는지 먼저 확인&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="문제-정의"&gt;문제 정의&lt;a class="anchor" href="#%eb%ac%b8%ec%a0%9c-%ec%a0%95%ec%9d%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Spark 애플리케이션 실행 중 다음과 같은 오류가 발생합니다:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;java.lang.OutOfMemoryError: Java heap space&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;또는:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Container killed by YARN for exceeding memory limits&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이 가이드에서는 OOM 오류의 원인을 진단하고 해결하는 방법을 단계별로 설명합니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="전제-조건"&gt;전제 조건&lt;a class="anchor" href="#%ec%a0%84%ec%a0%9c-%ec%a1%b0%ea%b1%b4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;요구 사항&lt;/th&gt;
 &lt;th&gt;확인 방법&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spark 버전&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;2.4 이상 (3.x 권장)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;spark-submit --version&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Java 버전&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;8, 11, 또는 17&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;java -version&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spark UI&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;접근 가능&lt;/td&gt;
 &lt;td&gt;브라우저에서 &lt;code&gt;http://localhost:4040&lt;/code&gt; 열기&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;권한&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;Spark 설정 변경 가능&lt;/td&gt;
 &lt;td&gt;spark-submit 실행 권한 확인&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;지원 환경&lt;/strong&gt;: Linux, macOS, Windows (WSL2 권장)&lt;/p&gt;</description></item><item><title>데이터 스큐 해결하기</title><link>https://advanced-beginner.github.io/ko/docs/spark/howto/data-skew/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/howto/data-skew/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 약 20분
&lt;/blockquote&gt;

&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;진단&lt;/strong&gt;: Spark UI Stages 탭에서 Task Duration Min/Max 비교 (10배 이상 차이 = 스큐)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;AQE 활성화&lt;/strong&gt;: &lt;code&gt;spark.sql.adaptive.skewJoin.enabled=true&lt;/code&gt; (Spark 3.0+)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;수동 해결&lt;/strong&gt;: Salting 기법으로 핫 키 분산&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="문제-정의"&gt;문제 정의&lt;a class="anchor" href="#%eb%ac%b8%ec%a0%9c-%ec%a0%95%ec%9d%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Spark 작업이 대부분 빠르게 완료되지만 &lt;strong&gt;일부 Task만 오래 걸리는&lt;/strong&gt; 현상이 발생합니다:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;Stage 3: 199/200 tasks completed... (마지막 1개가 수십 분째 실행 중)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이는 &lt;strong&gt;데이터 스큐(Data Skew)&lt;/strong&gt; - 특정 키에 데이터가 집중되어 해당 파티션만 과부하 상태가 됩니다.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="전제-조건"&gt;전제 조건&lt;a class="anchor" href="#%ec%a0%84%ec%a0%9c-%ec%a1%b0%ea%b1%b4"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;항목&lt;/th&gt;
 &lt;th&gt;요구 사항&lt;/th&gt;
 &lt;th&gt;확인 방법&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spark 버전&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;2.4+ (AQE는 3.0+)&lt;/td&gt;
 &lt;td&gt;&lt;code&gt;spark-submit --version&lt;/code&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;Spark UI&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;접근 가능&lt;/td&gt;
 &lt;td&gt;브라우저에서 &lt;code&gt;http://localhost:4040&lt;/code&gt; 열기&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;데이터&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;조인/그룹화에 사용되는 키 컬럼 존재&lt;/td&gt;
 &lt;td&gt;스키마에서 키 컬럼 확인&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;지원 환경&lt;/strong&gt;: Linux, macOS, Windows (WSL2 권장)&lt;/p&gt;</description></item><item><title>셔플 최적화하기</title><link>https://advanced-beginner.github.io/ko/docs/spark/howto/shuffle-optimization/</link><pubDate>Fri, 16 Jan 2026 00:00:00 +0000</pubDate><author>d8lzz1gpw@mozmail.com (kimbenji)</author><guid>https://advanced-beginner.github.io/ko/docs/spark/howto/shuffle-optimization/</guid><description>&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;예상 소요 시간&lt;/strong&gt;: 약 20분
&lt;/blockquote&gt;

&lt;blockquote class="book-hint info"&gt;&lt;strong&gt;TL;DR&lt;/strong&gt;&lt;br&gt;&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;셔플 확인&lt;/strong&gt;: &lt;code&gt;df.explain()&lt;/code&gt;에서 &lt;code&gt;Exchange&lt;/code&gt; 노드 = 셔플 발생&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;불필요한 셔플 제거&lt;/strong&gt;: 같은 그룹에서 여러 집계 한 번에 수행&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;브로드캐스트 조인&lt;/strong&gt;: 작은 테이블(수십 MB)은 &lt;code&gt;broadcast()&lt;/code&gt; 사용&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;셔플 파티션 수&lt;/strong&gt;: &lt;code&gt;spark.sql.shuffle.partitions&lt;/code&gt; 조정 (기본 200)&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;

&lt;h2 id="문제-정의"&gt;문제 정의&lt;a class="anchor" href="#%eb%ac%b8%ec%a0%9c-%ec%a0%95%ec%9d%98"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;다음과 같은 증상이 나타나면 셔플 최적화가 필요합니다:&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;증상&lt;/th&gt;
 &lt;th&gt;확인 위치&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Stage 간 전환이 10초 이상 걸림&lt;/td&gt;
 &lt;td&gt;Spark UI → Jobs 탭&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Shuffle Read/Write가 수십 GB 이상&lt;/td&gt;
 &lt;td&gt;Spark UI → Stages 탭&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;네트워크 I/O로 인한 타임아웃&lt;/td&gt;
 &lt;td&gt;애플리케이션 로그&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;code&gt;explain()&lt;/code&gt;에서 &lt;code&gt;Exchange&lt;/code&gt; 노드 다수&lt;/td&gt;
 &lt;td&gt;실행 계획 출력&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;셔플은 Spark에서 가장 비용이 큰 연산입니다. 아래 연산은 셔플을 발생시킵니다:&lt;/p&gt;</description></item></channel></rss>