Spark 오류 ‘Unsupported class file major version 55’ — Java 11 / Spark 2.4 버전 호환성 문제
검증 환경
본 절은 원문 사례·문서에 등장한 버전/도구를 정리한 것이다. 별도 실험실 재현이 명시되지 않은 항목은 일반화하지 않는다.
| 항목 | 본문·원문에서 확인된 범위 |
|---|---|
| 런타임/도구 | Java 11 |
| 런타임/도구 | Java 8 |
| 런타임/도구 | Java 9 |
| 런타임/도구 | Java 10 |
| 런타임/도구 | Java 17 |
| 런타임/도구 | Python 2.7 |
| 런타임/도구 | Spark 2.4 |
| 런타임/도구 | Spark 2.4. |
| 문서 정리일 | 2026-08-31 |
- OS/CI 세부 값은 프로젝트마다 다르므로, 적용 전 로컬에서 동일 오류 메시지를 재확인한다.
1. 문제 정의
Mac에서 Homebrew로 Spark 2.4.0과 Scala를 설치하고, Anaconda 환경에 PySpark를 설치한 뒤 rdd.collect()를 실행하면 다음과 같은 오류가 발생합니다.
| |
에러 메시지에서 가장 중요한 단서는 **major version 55**입니다. 이 숫자 하나가 뒤에서 설명할 버전 충돌의 핵심 지표입니다.
발생 단계는 PySpark의 collect()처럼 JVM 쪽 작업(RDD 실행)을 호출하는 순간입니다. 즉 스파크 드라이버 JVM이 Spark 내부 클래스 파일을 로딩할 때 실패하며, 그 직전에 파이썬 레벨 오류는 보이지 않습니다.
2. 영향을 받는 버전
| Spark 버전 | 공식 지원 Java | 지원 Python |
|---|---|---|
| Spark 2.4.x | Java 8 | Python 2.7 / 3.4+ |
| Spark 3.0+ | Java 8 / 11 | Python 2.7+ / 3.4+ |
- Spark 2.4.x는 공식적으로 Java 8만 지원합니다. (Scala API는 Spark 2.4.4 기준 Scala 2.12 사용, 호환 Scala 2.12.x가 필요)
- Spark 3.0 이상에서 Java 11을 공식 지원합니다 (단, Java 8의 8u92 이전 버전은 Spark 3.0.0부터 deprecated).
- 이 글의 원본 사례는 Java 11 + Spark 2.4.0 조합에서 발생했습니다.
3. 버전별 원인 차이 — 왜 major version 55가 문제인가
증상 fingerprint
- 에러 메시지:
java.lang.IllegalArgumentException: Unsupported class file major version 55 - 발생 단계: PySpark의
collect(),count(),saveAs...등 JVM 파이프라인으로 보내는 첫 실행 지점 - 관련 도구: PySpark / Spark 2.4.x + Java 11(Mac 기준 Homebrew 기본 JDK가 Java 11인 경우 흔함)
- 흔한 오해: “스파크나 PySpark를 다시 설치하면 되지 않을까?“라고 생각하지만, 문제는 소스도 파이썬 코드도 아닌 JVM의 Java 버전입니다.
Java의 major version은 각 Java 메이저 버전마다 하나씩 증가합니다.
| Java 메이저 버전 | class 파일 major version |
|---|---|
| Java 8 | 52 |
| Java 9 | 53 |
| Java 10 | 54 |
| Java 11 | 55 |
| Java 17 | 61 |
Java 컴파일러는 대상 버전의 major version으로 클래스 파일을 생성합니다. Java 11로 빌드된 클래스 파일은 major version이 55입니다. 하지만 Spark 2.4.x의 JVM은 Java 8 시절 규격(major 52)까지만 인식하므로, 55짜리 클래스를 만나면 “지원하지 않는 클래스 파일 major version"이라며 실행을 거부합니다.
즉 **표면 증상은 “지원 불가 클래스"지만 근본 원인은 “Java 런타임 버전이 Spark가 요구하는 버전보다 높다”**는 버전 호환성 문제입니다. 일반적으로 업그레이드가 해결이지만, 이 경우엔 Spark가 아닌 Java의 버전을 낮추거나(임시), Spark를 올리거나(장기) 둘 중 하나입니다.
4. 임시 해결책 — Java 8로 전환 (Spark 2.4.x 유지)
Spark를 그대로 두고 JVM만 Java 8로 맞추는 방법입니다. 프로젝트를 빠르게 살리기 좋지만, Java 8을 추가로 설치해야 합니다.
4.1 Mac에서 현재 Java 버전 확인
| |
4.2 Java 8 설치 (asdf-java / Homebrew 예시)
버전 관리로 다양한 JDK를 설치·전환할 수 있습니다.
| |
4.3 JAVA_HOME을 Java 8로 전환
.bashrc(또는 .zshrc)에 다음을 추가하거나 현재 세션에서 실행합니다.
| |
주의: 이 설정은 JAVA_HOME을 전역 프로필에 남기므로, Java 11이 필요한 다른 프로젝트(예: 최신 Gradle/Spring)에 영향을 줄 수 있습니다. 환경이 섞여 있다면 전역 프로필 대신 spark-env.sh에서만 Java 버전을 바꾸는 것을 권장합니다. (일반적인 점검 기준이며, 프로젝트 환경에 따라 달라질 수 있습니다.)
5. 권장 해결책 — Spark 3.0+ 업그레이드
Java 11을 유지해야 하는 환경이라면 Spark를 Java 11을 공식 지원하는 3.0 이상으로 업그레이드하는 것이 안정장기 해결책입니다.
| |
업그레이드 후 spark-shell --version으로 버전을 확인합니다.
6. 검증 명령 (해결 후 성공 여부)
해결 후 실제로 Spark가 문제없이 동작하는지 아래로 확인합니다.
| |
또한 PySpark 환경에서는 아래 검증을 권합니다.
| |
spark-submit로 로컬에서 실제 연산이 성공하면 클래스 major version 충돌이 해소된 것입니다.
7. 향후 예방 조치
- JDK 버전을 프로젝트 단위로 관리 : asdf, sdkman, 또는 프로젝트별
JAVA_HOME스크립트로 관리합니다. - Spark 버전과 Java 버전을 표로 명시 : 팀 문서 /
README에 “이 프로젝트는 Spark 2.4.x + Java 8” 처럼 명시합니다. - CI에서 Java 버전 고정 :
actions/setup-java또는 빌드 Matrix에서 Spark 지원 버전만 지정합니다. - 업그레이드 시 호환성 확인 : Spark 메이저 업그레이드 전에 공식 문서의 지원 Java/Python/Scala 버전을 확인합니다.
8. DevTrace Verdict
이 문제의 핵심은 PySpark 코드도 Spark 소스도 아니라 JVM이 읽는 Java 버전과 Spark 2.4.x의 지원 버전 불일치다. Spark 2.4.x에는 Java 8(major 52)을, Java 11(major 55) 환경에는 Spark 3.0+을 쓰면 해결됩니다.
- 증상 fingerprint:
Unsupported class file major version 55+collect()호출 시점 실패 - 검증 명령:
java -version,spark-shell --version,spark-submit실제 연산
DevTrace 결론
이 문제의 핵심은 소스 코드가 아니라 JVM의 Java 버전 불일치다. Spark 2.4.x에는 Java 8을, Java 11 환경에는 Spark 3.0+를 써야 한다.
원문 출처는 문제 발견의 단서이며, 위 판단과 점검 항목은 DevTrace의 독자 분석이다.
출처
- StackOverflow 원문: https://stackoverflow.com/questions/53583199/spark-error-unsupported-class-file-major-version (질문/채택 답변 기준)