Apache Hadoop 위키의 Java 버전 표가 기준이다.
| Hadoop 계열 | 실행(runtime) | 빌드(compile) |
|---|---|---|
| 3.3.x · 3.4.x | Java 8, Java 11 | Java 8 만. Java 11 빌드는 지원하지 않는다 |
| 3.5 이상 | 서버는 JDK 17, 클라이언트는 JDK 17 · 21 | JDK 17 |
3.4 계열에서 Java 17 이나 21 이 "검증됐다"는 설명은 공식 문서와 맞지 않는다. 3.4.x 의 공식 실행 지원은 Java 8 과 11 이며, 그보다 높은 JDK 는 동작할 수 있으나 지원 범위 밖이다.
릴리스 현황은 3.5.0 이 2026-04-02, 3.4 계열 최신은 3.4.3 이 2026-02-24 에 나왔다[1].
Java 17 이상은 모듈 시스템의 강한 캡슐화가 기본이다. Hadoop 내부가 리플렉션으로 JDK 내부 클래스에 접근하는 부분이 막혀 다음과 같은 오류가 난다.
java.lang.reflect.InaccessibleObjectException: Unable to make ... accessible
java.lang.IllegalAccessError
우회하려면 --add-opens 를 준다. 어디까지나 임시 조치이며 공식 지원을 대체하지 않는다.
export HADOOP_OPTS="$HADOOP_OPTS \
--add-opens=java.base/java.lang=ALL-UNNAMED \
--add-opens=java.base/java.io=ALL-UNNAMED \
--add-opens=java.base/java.util=ALL-UNNAMED \
--add-opens=java.base/java.net=ALL-UNNAMED \
--add-opens=java.base/java.nio=ALL-UNNAMED"
네이티브 라이브러리(libhadoop.so, snappy, zlib)와 Kerberos 관련 코드도 JDK 버전에 민감하다. 보안이 켜진 클러스터에서 JDK 를 올리기 전에는 반드시 시험 환경에서 확인한다.
HDFS 와 YARN 이 뜬다고 끝이 아니다. Hive · HBase · Spark 는 각자 지원 JDK 가 다르다. 예를 들어 Spark 4.0.0 은 JDK 8 과 11 지원을 끊고 JDK 17 을 기본으로 삼았으며 Scala 2.12 도 제외했다. 반면 같은 시점의 Hadoop 3.4.x 는 여전히 Java 8/11 기준이다. 한 클러스터에 두 제품을 함께 올린다면 각 프로세스가 쓰는 JAVA_HOME 을 분리해야 한다.
java -version
hadoop version
hdfs version
hdfs dfs -ls /
Cloudera 배포판처럼 벤더가 조합을 고정한 환경에서는 해당 배포판의 지원 매트릭스를 우선한다.
Apache Hadoop Releases - 2026-09-20 확인. https://hadoop.apache.org/releases.html ↩︎