Spark 오류-지원되지 않는 클래스 파일 주 버전


82

Mac에 Spark를 설치하려고합니다. 스파크 2.4.0과 스칼라를 설치하기 위해 home-brew를 사용했습니다. 아나콘다 환경에 PySpark를 설치했고 개발을 위해 PyCharm을 사용하고 있습니다. 내 bash 프로필로 내보냈습니다.

export SPARK_VERSION=`ls /usr/local/Cellar/apache-spark/ | sort | tail -1`
export SPARK_HOME="/usr/local/Cellar/apache-spark/$SPARK_VERSION/libexec"
export PYTHONPATH=$SPARK_HOME/python/:$PYTHONPATH
export PYTHONPATH=$SPARK_HOME/python/lib/py4j-0.9-src.zip:$PYTHONPATH

그러나 나는 그것을 작동시킬 수 없습니다.

나는 이것이 역 추적을 읽는 자바 버전 때문이라고 생각합니다. 문제를 해결하는 데 도움을 주시면 감사하겠습니다. 역 추적을 넘어서 도움이되는 정보가 있으면 의견을 보내주십시오.

다음과 같은 오류가 발생합니다.

Traceback (most recent call last):
  File "<input>", line 4, in <module>
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/pyspark/rdd.py", line 816, in collect
    sock_info = self.ctx._jvm.PythonRDD.collectAndServe(self._jrdd.rdd())
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/py4j/java_gateway.py", line 1257, in __call__
    answer, self.gateway_client, self.target_id, self.name)
  File "/anaconda3/envs/coda/lib/python3.6/site-packages/py4j/protocol.py", line 328, in get_return_value
    format(target_id, ".", name), value)
py4j.protocol.Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe.
: java.lang.IllegalArgumentException: Unsupported class file major version 55

2
이 수정은 심지어 "주요 지원되지 않는 클래스 파일 버전 57"와 나를 위해 일한
SchwarzeHuhn

FIX : 이 문제를 해결하기 위해 다음과 같이 java 1.8이 전역 기본값으로 사용되도록 bash_profile을 편집했습니다. 텍스트 편집에 touch ~/.bash_profile; open ~/.bash_profile 추가 export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)및 저장.
James

이 수정 사항은 Mac의 모든 Java에서 작동합니다. libexec 디렉토리는 라이센스 및 신탁과는 아무 상관이 없다
OneCricketeer

Spark에 대한 종속성 지옥. 싫어요.
0x4a6f4672

답변:


91

Edit Spark 3.0은 Java 11을 지원하므로 업그레이드해야합니다.

Spark는 Java 8/11, Scala 2.12, Python 2.7 + / 3.4 + 및 R 3.1+에서 실행됩니다. 버전 8u92 이전의 Java 8 지원은 Spark 3.0.0부터 더 이상 사용되지 않습니다.



원래 답변

Spark가 Java 11 이상을 지원할 때까지 ( 최신 문서 에서 언급 될 것임) 플래그를 추가하여 Java 버전을 Java 8로 설정해야합니다.

Spark 2.4.x부터

Spark는 Java 8 , Python 2.7 + / 3.4 + 및 R 3.1+에서 실행됩니다. Scala API의 경우 Spark 2.4.4는 Scala 2.12를 사용합니다. 호환되는 Scala 버전 (2.12.x)을 사용해야합니다.

Mac / Unix에서 다른 Java 를 설치 하려면 asdf-java 를 참조하십시오.

Mac에서는 내 .bashrc,

export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)

Windows에서는 Chocolately를 확인하지만 WSL2 또는 Docker를 사용하여 Spark를 실행합니다.


spark-env.sh전체 프로필에 대한 변수를 설정하는 대신 에서 설정할 수도 있습니다 .

물론 이것은 기존 Java 11 에 추가로 Java 8을 설치해야 함을 의미합니다.


4
brew cask install java8을 시도 할 때 @ cricket_007에게 감사드립니다. Cask 'java8'을 사용할 수 없습니다.이 이름의 Cask가 없습니다.
James

2
나는 작동하는 것처럼 보이는 다음을 시도했습니다 : brew tap caskroom / versions brew cask install java8
James

1
이것은 문제를 해결 한 것으로 보이지만 PyCharm 내에서는 아닙니다. 그 안에서 자바를 가리켜 야합니까? 감사!
James

1
맥 OS에 자바 8 JDK를 설치하기위한 업데이트 지침 : "양조 탭 AdoptOpenJDK / 오픈 JDK, adoptopenjdk8를 설치 통 양조"
요리스

3
@James 답장 해 주셔서 감사합니다. git 자격 증명을 업데이트하여 문제를 해결했습니다. 어쨌든 Oracle은 등록시 라이센스를 먼저 설정했기 때문에 java8을 더 이상 사용할 수 없습니다. 그래서 그 접근 방식은 더 이상 작동하지 않습니다. java8을 설치하려면이 답변을 볼 필요가 있습니다. stackoverflow.com/questions/24342886/…
Gonzalo Garcia

89

Java 11을 사용하여 Jupyter Notebook 및 Spark를 실행할 때이 문제가 발생했습니다. 다음 단계에 따라 Java 8을 설치하고 구성했습니다.

Java 8을 설치합니다.

$ sudo apt install openjdk-8-jdk

이미 Java 11을 설치 했으므로 다음을 사용하여 기본 Java를 버전 8로 설정했습니다.

$ sudo update-alternatives --config java

Java 8을 선택한 다음 변경 사항을 확인합니다.

$ java -version

출력은 다음과 유사해야합니다.

openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.18.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)

이제 Jupyter Notebook에서 Spark를 성공적으로 실행할 수 있습니다. 위의 단계는 다음 가이드를 기반으로합니다. https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04


1
sdkman sdk install java 8.0.212-zulu을 사용하는 경우 Java 8을 설치하고 설치된 Java 8을 기본 Java로 사용할 것인지 묻습니다
Xiao

감사합니다! 제 사건은 당신과 똑 같았습니다.
Kenny Aires

19

스크립트 시작 부분에 os 와 함께 findsparkjava8 을 통해 스파크 위치 를 추가하는 것이 가장 쉬운 솔루션이라는 것을 알았 습니다 .

import findspark
import os
spark_location='/opt/spark-2.4.3/' # Set your own
java8_location= '/usr/lib/jvm/java-8-openjdk-amd64' # Set your own
os.environ['JAVA_HOME'] = java8_location
findspark.init(spark_home=spark_location) 

7

문제는 PySpark가 일부 기능에 Java 8이 필요하다는 것입니다. Spark 2.2.1은 Java 9 이상에서 문제가있었습니다. 권장 솔루션은 Java 8을 설치하는 것입니다.

구체적으로 java-8을 설치하고 기본 Java로 설정하고 다시 시도 할 수 있습니다.

Java 8을 설치하려면

sudo apt install openjdk-8-jdk

기본 자바 버전을 변경하려면 다음과 . 당신은 명령을 사용할 수 있습니다

 update-java-alternatives --list

사용 가능한 모든 Java 버전을 나열합니다.

다음 명령을 실행하여 기본값을 설정하십시오.

sudo update-alternatives --config java

원하는 Java 버전을 선택하십시오. 제공된 목록에 정확한 번호를 제공하십시오. 그런 다음 Java 버전을 확인 java -version하고 업데이트해야합니다. JAVA_HOME 변수도 설정하십시오.

JAVA_HOME을 설정하려면 특정 Java 버전 및 폴더를 찾아야합니다. Java 홈 변수 설정에 대한 전체 아이디어를 얻으려면 SO 토론을 따르십시오 . Java 8을 사용할 것이므로 폴더 경로는 /usr/lib/jvm/java-8-openjdk-amd64/. /usr/lib/jvm폴더 로 이동 하여 사용 가능한 폴더가 무엇인지 삐걱 거리십시오. ls -l이 폴더는 일부 Java 버전의 바로 가기가 될 수 있으므로 폴더 및 해당 소프트 링크를 보는 데 사용 합니다. 그런 다음 홈 디렉토리로 이동 cd ~하여 bashrc 파일을 편집하십시오.

cd ~
gedit .bashrc

그런 다음 파일에 다음 줄을 추가하고 저장하고 종료하십시오.

## SETTING JAVA HOME
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export PATH=$PATH:$JAVA_HOME/bin

그 후, 당신이 한 일을 적용하려면 source ~/.bashrc 터미널에서 입력 하고 실행하십시오.


4

Windows (Windows 10)에서는 jdk-8u201-windows-x64.exe를 설치하고 시스템 환경 변수를 올바른 버전의 JAVA JDK로 재설정하여 문제를 해결할 수 있습니다.

JAVA_HOME-> C : \ Program Files \ Java \ jdk1.8.0_201.

터미널을 다시 시작하는 것을 잊지 마십시오. 그렇지 않으면 환경 변수 재설정이 시작되지 않습니다.


터미널을 다시 시작하는 것을 잊지 마십시오!
rishi jain

2

Debian 10 'buster'사용자의 경우 nvidia-openjdk-8-jre패키지 에서 Java 8 JRE를 사용할 수 있습니다 .

함께 설치

sudo apt install nvidia-openjdk-8-jre

그런 다음 JAVA_HOME실행할 때 설정 합니다 pyspark. 예 :

JAVA_HOME=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/ pyspark

나는 자바 얻기를위한 엔비디아을 통해 AdoptOpenJDK을 사용하는 것이 좋습니다 것
OneCricketeer

1

PyCharm (특히 실행 구성)을 사용하는 사람들을 위해 몇 시간의 시간을 절약 할 수 있으므로 여기에 2 센트를 추가하고 싶었습니다 . JAVA_HOME 및 PATH 환경 변수를 수정 하여 .bashrc또는 .bash_profileJava 8을 가리 키도록 변경 한 후에도 (여기에있는 대부분의 사람들이 권장하는 것처럼) PyCharm의 실행 구성을 사용하여 Spark를 실행할 때 여전히 올바른 항목을 선택하지 않음을 알 수 있습니다. 자바. PyCharm에 문제가있는 것 같습니다 (Mac Catalina에서 PyCharm Professional 2020.2를 사용하고 있습니다). 또한 PyCharm의 터미널을 사용하여 실행하면 정상적으로 작동합니다. 이는 PyCharm에 문제가 있음을 확인합니다. PyCharm의 실행 구성이 새로운 JAVA를 선택하려면 아래와 같이 실행 구성에 JAVA_HOME 환경 변수를 특별히 추가해야했습니다. 여기에 이미지 설명 입력

그리고 작동했습니다!

또한 확인되어 작동하는 또 다른 옵션 Include system environment variables option에서 Environment Variables실행 구성에서 창 및 다시 시작 PyCharm (위 스크린 샷 참조)


로 시작하는 값 JAVA_HOME=이 정확 하다고 생각하지 않습니다
OneCricketeer

잘 잡았습니다. 실수로 잘못된 스크린 샷을 찍었습니다. 지금 해결되었습니다
Heapify

0

Windows에서 동일한 문제가 발생하고 환경 변수 경로에 JAVA_HOME을 추가했습니다.

JAVA_HOME : C : \ Program Files \ Java \ jdk-11.0.1


1
안녕하세요, 저도 똑같이했습니다. 여전히 동일한 오류가 발생합니다. 다른 변경 사항이 있습니까? C : \ Program Files \ Java \ jdk-11.0.2
Gautam

@Gautum 다른 답변에서 알 수 있듯이 Java 8이 필요합니다. 오류는 명시 적으로 버전 55 (Java 11)가 지원되지 않는다고
말합니다.

0

안녕하세요 실제로 올바른 SPARK_HOME 경로를 입력하고 있는지 확인하려면이 Python 스크립트를 사용하여 찾을 수 있습니다. https://github.com/apache/spark/blob/master/python/pyspark/find_spark_home.py

python3 find_spark_home.py 

/usr/local/lib/python3.7/site-packages/pyspark

내 Mac의 터미널에서 :

vim ~/.bashrc

경로를 추가하십시오.

export JAVA_HOME=/Library/java/JavaVirtualMachines/adoptopenjdk-8.jdk/contents/Home/

export SPARK_HOME=/usr/local/lib/python3.7/site-packages/pyspark

export PYSPARK_PYTHON=/usr/local/bin/python3

마지막으로 변경 사항을 적용합니다.

source ~/.bashrc

0

macOS : 다음 명령을 사용하여 노트북에 Java8을 설치합니다.

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk8

-1

이 문제는 JAVA_HOME 환경 변수에 설정 한 Java 버전으로 인해 발생합니다.

이전 JAVA 경로 : /usr/lib/jvm/java-1.11.0-openjdk-amd64

솔루션 : JAVA_HOME을 / usr / lib / jvm / java-8-openjdk-amd64로 설정하십시오.

작동합니다 !!!

내 오류는 다음과 같습니다.

파일 "/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/rdd.py", 줄 816, 수집 sock_info = self.ctx._jvm.PythonRDD.collectAndServe (self._jrdd .rdd ()) 파일 "/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", 1257 행, 에서 호출 데코 인상는 IllegalArgumentException (s.split (에서 파일 "/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/sql/utils.py", 라인 79, ':', 1) [1], stackTrace) pyspark.sql.utils.IllegalArgumentException : u'Unsupported class file major version 55 '


이것은 Java 8이 필요하다는 기존 답변에 무엇을 추가합니까?
OneCricketeer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.