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

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



답변

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을 설치해야 함을 의미합니다.


답변

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


답변

스크립트 시작 부분에 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)


답변

문제는 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 터미널에서 입력 하고 실행하십시오.


답변

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

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

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


답변

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


답변

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 (위 스크린 샷 참조)