source

스파크 오류 - 지원되지 않는 클래스 파일의 줄자 버전

goodcode 2022. 9. 8. 21:51
반응형

스파크 오류 - 지원되지 않는 클래스 파일의 줄자 버전

Mac에 Spark를 설치하려고 합니다.스파크 2.4.0과 스칼라를 설치하기 위해 홈브루를 사용하였습니다.저는 Anaconda 환경에 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

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

트레이스백을 읽어낸 Java 버전 때문인 것 같습니다.이 문제를 해결하는 데 도움을 주시면 감사하겠습니다.트레이스백 이외에 도움이 되는 정보가 있으면 코멘트 부탁드립니다.

다음의 에러가 표시됩니다.

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 시점

스파크는 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 의 경우는, 다른 Javas 를 인스톨 하려면 , asdf-java 를 참조해 주세요.

이것을 할 수 ..bashrc ,

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

Windows에서는 Chocolatically로 체크 아웃합니다만, 실제로는 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)

이제 주피터 노트북에서 Spark를 성공적으로 실행할 수 있게 되었습니다.위의 순서는 다음 가이드를 기반으로 합니다.https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04

스크립트 시작 부분에 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을 재요구한다는 것입니다.스파크 2.2.1은 Java 9 이상에서 문제가 발생했습니다.권장되는 솔루션은 Java 8을 설치하는 것이었습니다.

Java-8을 설치하고 기본 Java로 설정한 후 다시 시도할 수 있습니다.

java 8을 클릭합니다.

sudo apt install openjdk-8-jdk

기본 Java 버전을 변경하려면 다음 절차를 따릅니다.명령어를 사용할 수 있습니다.

 update-java-alternatives --list

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

다음 명령을 실행하여 기본 설정을 합니다.

sudo update-alternatives --config java

자바어 다음 Java 버전합니다.java -version갱신해야 합니다.JAVA_AKAKE_AKAKE_AKEADA.홈 ★★★★★★★★★★★★★★★★★★★★★★」

JAVA_를 설정하다HOME, 특정 Java 버전과 폴더를 찾아야 합니다.Java 홈 변수 설정에 대한 자세한 내용은 이 SO에 대해 설명하겠습니다.자바8을 사용하기 때문에 폴더 경로는/usr/lib/jvm/java-8-openjdk-amd64//usr/lib/jvm사용하다ls -l폴더와 해당 소프트링크를 참조할 수 있습니다.사용하여 홈디렉토리로 이동합니다.cd ~ filebashrc를합니다.

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.

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

10 의 경우 8는 Debian 10 '버스터'에서 사용할 수 .nvidia-openjdk-8-jre★★★★★★★★★★★★★★★★★★.

와 함께 설치 방법

sudo apt install nvidia-openjdk-8-jre

으로 " " " 를 설정합니다.JAVA_HOMEpyspark 예: 개요:

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

PyCharm(특히 실행 구성)을 사용하는 사용자에게 몇 시간을 절약할 수 있기 때문에 여기에 제 의견을 덧붙이고 싶습니다.변경 후.bashrc ★★★★★★★★★★★★★★★★★」.bash_profileJava_를 수정하여 Java 8을 가리키다HOME 및 PATH env 변수(여기에 있는 대부분의 사람들이 권장하는 것처럼)는 PyCharm의 실행 구성을 사용하여 Spark를 실행해도 여전히 올바른 Java가 선택되지 않는다는 것을 알 수 있습니다.PyCharm에 문제가 있는 것 같습니다(Mac Catalina에서 PyCharm Professional 2020.2를 사용하고 있습니다).또한 PyCharm 단말기를 사용하여 실행하면 정상적으로 동작합니다.그것은 PyCharm에 문제가 있다는 것을 확인시켜 준다.PyCharm의 실행 Configuration이 새로운 JAVA를 선택하기 위해서는 특별히 JAVA_를 추가해야 했습니다.아래 그림과 같이 실행 구성의 HOME 환경 변수 -

그리고 그게 효과가 있었어!

다른 방법으로도 동작하는 것은,Include system environment variables option에서Environment Variables실행 구성의 창(위 스크린샷 참조) 및 PyCharm 재시작

윈도에서도 같은 문제가 발생하여 JAVA_를 추가했습니다.환경변수 경로의 홈:

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

안녕하세요, 실제로 올바른 SPARK_HOME PATH를 삽입하고 있는지 확인하려면 다음 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

이 문제는 JAVA_에서 설정한 Java 버전 때문에 발생합니다.HOME 환경 변수.

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

해결책: JAVA_ 설정홈 /usr/lib/jvm/java-8-openjdk-amd64

될 거야!!!

주의: 오류:

파일 "/home/tms/mycollect sock_info = self.ctx._jvm에 InstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/rdd.py", 816 행을 설치합니다.PythonRDD.collectAndServe(셀프)._jrdd.rdd()) 파일 "/home/tms/my"콜 파일 "/home/tms/my"에 Dir/spark-2.4.5-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/py4j/java_gateway.py", 회선1257 을 인스톨 합니다.installDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/sql/utils.py", 79행, Indeco에서 IlgalArgument 발생예외(s.split(): ', 1)[1], stackTrace) pyspark.sql.utils.부정 인수예외: u'지원되지 않는 클래스 파일 메이저 버전 55'

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

brew tap AdoptOpenJDK/openjdk
brew cask install adoptopenjdk8

언급URL : https://stackoverflow.com/questions/53583199/spark-error-unsupported-class-file-major-version

반응형