स्पार्क त्रुटि - असमर्थित वर्ग फ़ाइल प्रमुख संस्करण


83

मैं अपने मैक पर स्पार्क स्थापित करने की कोशिश कर रहा हूं। मैंने स्पार्क 2.4.0 और स्केला को स्थापित करने के लिए होम-ब्रुअ का उपयोग किया है। मैंने अपने एनाकोंडा वातावरण में PySpark को स्थापित किया है और विकास के लिए PyCharm का उपयोग कर रहा हूं। मैंने अपना बैश प्रोफ़ाइल निर्यात किया है:

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" के साथ भी काम किया
श्वार्ज़हुहान

FIX: इस समस्या को ठीक करने के लिए मैंने bash_profile को जावा 1.8 को सुनिश्चित करने के लिए संपादित किया जिसका उपयोग वैश्विक डिफ़ॉल्ट के रूप में निम्न प्रकार से किया जाता है: पाठ संपादन के भीतर touch ~/.bash_profile; open ~/.bash_profile जोड़ना export JAVA_HOME=$(/usr/libexec/java_home -v 1.8)और सहेजना।
जेम्स

यह फिक्स मैक पर किसी भी जावा के लिए काम करता है। Libexec का लाइसेंसिंग या ओर्काले से कोई लेना-देना नहीं है
OneCricketeer

स्पार्क के लिए निर्भरता नरक। मुझे इससे घृणा है।
0x4a6f4672

जवाबों:


91

एडिट स्पार्क 3.0 जावा 11 को सपोर्ट करता है, इसलिए आपको अपग्रेड करना होगा

स्पार्क जावा 8/11, स्काला 2.12, पायथन 2.7 + / 3.4 + और आर 3.1+ पर चलता है। संस्करण 8u92 समर्थन से पहले जावा 8 को स्पार्क 3.0.0 के रूप में चित्रित किया गया है



मूल उत्तर

जब तक स्पार्क जावा 11 का समर्थन करता है, या उच्चतर (जो उम्मीद है कि जब यह होगा नवीनतम दस्तावेज़ में उल्लेख किया जाएगा ), तो आपको अपने जावा संस्करण को जावा 8 में सेट करने के लिए एक ध्वज में जोड़ना होगा।

स्पार्क 2.4.x के रूप में

स्पार्क जावा 8 , पायथन 2.7 + / 3.4 + और आर 3.1+ पर चलता है । स्काला एपीआई के लिए, स्पार्क 2.4.4 स्केला 2.12 का उपयोग करता है। आपको एक संगत स्काला संस्करण (2.12.x) का उपयोग करना होगा

मैक / यूनिक्स पर, विभिन्न जावा स्थापित करने के लिए asdf-java देखें

एक मैक पर, मैं अपने में ऐसा करने में सक्षम हूं .bashrc,

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

विंडोज पर, चॉकलेट को चेकआउट करें, लेकिन स्पार्क को चलाने के लिए गंभीरता से सिर्फ WSL2 या Docker का उपयोग करें।


आप spark-env.shअपनी संपूर्ण प्रोफ़ाइल के लिए चर सेट करने के बजाय इसे सेट भी कर सकते हैं ।

और, ज़ाहिर है, यह सब मतलब है कि आपको अपने मौजूदा जावा 11 के अलावा जावा 8 स्थापित करने की आवश्यकता होगी


4
धन्यवाद @ क्रिकेट_007 जब मैं कावा बनाने की कोशिश करता हूं तो java8 स्थापित होता है मुझे निम्न त्रुटि मिलती है Cask 'java8' अनुपलब्ध है: इस नाम के साथ कोई पीपा मौजूद नहीं है।
जेम्स

2
मैंने निम्नलिखित कोशिश की है जो काम करने लगता है: काढ़ा नल ताबूत / संस्करणों काढ़ा पीपा स्थापित जावा
जेम्स

1
ऐसा प्रतीत होता है कि इस मुद्दे को तय किया गया है, लेकिन Pyharm के भीतर नहीं। क्या मुझे उसके भीतर भी जावा को इंगित करने की आवश्यकता है? धन्यवाद!
जेम्स

1
MacOS पर Java 8 JDK को स्थापित करने के लिए अद्यतित निर्देश: "काढ़ा टैप AdoptOpenJDK / openjdk; शराब बनाने वाला पीपा स्थापित करने के लिए गोद लेने की मशीन"
Joris

3
@ वापस जवाब देने के लिए धन्यवाद, मैंने कुछ गिट क्रेडेंशियल्स को अपडेट करके हल किया। वैसे भी java8 अब उपलब्ध नहीं है क्योंकि ओरेकल ने पहले रजिस्टर पर लाइसेंस सेट किया था। तो वह तरीका अब काम नहीं करता है। Java8 को स्थापित करने के लिए आपको इस उत्तर को देखने की आवश्यकता है। stackoverflow.com/questions/24342886/…
गोंजालो गार्सिया

89

जावा 11 का उपयोग करके ज्यूपिटर नोटबुक और स्पार्क को चलाने पर मैं इस मुद्दे पर भाग गया। मैंने निम्न चरणों का उपयोग करके जावा 8 के लिए स्थापित और कॉन्फ़िगर किया है।

जावा 8 स्थापित करें:

$ sudo apt install openjdk-8-jdk

चूँकि मैंने जावा 11 को पहले ही स्थापित कर लिया था, इसलिए मैंने अपने डिफ़ॉल्ट जावा को संस्करण 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)

मैं अब जुपिटर नोटबुक में स्पार्क को सफलतापूर्वक चलाने में सक्षम हूं। उपरोक्त चरण निम्नलिखित मार्गदर्शिका पर आधारित थे: https://www.digitalocean.com/community/tutorials/how-to-install-java-with-apt-on-ubuntu-18-04


1
यदि आप sdkman का उपयोग कर रहे हैं, तो sdk install java 8.0.212-zulujava 8 स्थापित करता है और पूछता है कि क्या आप स्थापित java 8 का उपयोग डिफ़ॉल्ट जावा के लिए करना चाहते हैं
Xiao

धन्यवाद! मेरा मामला भी आपके जैसा ही था।
केनी

19

मैंने पाया कि स्क्रिप्ट की शुरुआत में ओएस के साथ स्पार्कपार्क और जावा 8 के माध्यम से स्पार्क स्थान को जोड़ना सबसे आसान समाधान है:

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 की आवश्यकता है। स्पार्क 2.2.1 में जावा 9 और उससे आगे की समस्याएं थीं। जावा 8 को स्थापित करने के लिए अनुशंसित समाधान था।

आप java-8 को विशेष रूप से स्थापित कर सकते हैं, और इसे अपने डिफ़ॉल्ट जावा के रूप में सेट कर सकते हैं और पुनः प्रयास कर सकते हैं।

जावा 8 स्थापित करने के लिए,

sudo apt install openjdk-8-jdk

डिफ़ॉल्ट जावा संस्करण को बदलने के लिए, इसका अनुसरण करें । आप कमांड का उपयोग कर सकते हैं

 update-java-alternatives --list

उपलब्ध सभी जावा संस्करणों को सूचीबद्ध करने के लिए।

कमांड चलाकर एक डिफ़ॉल्ट सेट करें:

sudo update-alternatives --config java

आप चाहते हैं जावा संस्करण का चयन करने के लिए। प्रदान की गई सूची में सटीक संख्या प्रदान करें। फिर अपने जावा संस्करण को चेस करें java -versionऔर इसे अपडेट किया जाना चाहिए। JAVA_HOME चर भी सेट करें।

JAVA_HOME सेट करने के लिए, आपको विशिष्ट जावा संस्करण और फ़ोल्डर ढूंढना होगा। परती इस अतः चर्चा के लिए जावा घर चर की स्थापना की एक पूरी विचार मिलता है। जब से हम जावा 8 का उपयोग करने जा रहे हैं, हमारा फ़ोल्डर पथ है /usr/lib/jvm/java-8-openjdk-amd64/। बस /usr/lib/jvmफोल्डर में जाएं और क्राइएबल फोल्डर क्या हैं। ls -lफ़ोल्डर्स और उनके सॉफ्टलिंक को देखने के लिए उपयोग करें, क्योंकि ये फ़ोल्डर कुछ जावा संस्करणों के लिए एक शॉर्टकट हो सकते हैं। फिर अपनी होम डायरेक्टरी में जाएं 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

विंडोज़ (विंडोज़ 10) पर आप jdk-8u201-windows-x64.exe स्थापित करके और JAVA JDK के सही संस्करण में सिस्टम वातावरण चर को रीसेट करके समस्या को हल कर सकते हैं:

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

टर्मिनल को फिर से शुरू करने के लिए मत भूलना अन्यथा पर्यावरण चर का रीसेट करना किक नहीं करता है।


कृपया टर्मिनल को पुनः आरंभ करने के लिए मत भूलना!
ऋषि जैन

2

डेबियन 10 'बस्टर' उपयोगकर्ताओं के लिए, जावा 8 जेआरई nvidia-openjdk-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 (विशेषकर रन कॉन्फ़िगरेशन) का उपयोग कर रहे हैं । अपने जावा को बदलने .bashrcया .bash_profileजावा 8 को इंगित करने के बाद JAVA_HOME और PATH env वेरिएबल्स को संशोधित करके (जैसे यहां ज्यादातर लोगों ने सिफारिश की है), आप देखेंगे कि जब आप PyCharm के रन कॉन्फ़िगरेशन का उपयोग करके अपना स्पार्क चलाते हैं, तब भी यह अधिकार नहीं उठाएगा। जावा। लगता है कि PyCharm के साथ कुछ समस्या है (मैं मैक कैटालिना में PyCharm प्रोफेशनल 2020.2 का उपयोग कर रहा हूं)। इसके अतिरिक्त, जब आप इसे PyCharm के टर्मिनल का उपयोग करके चलाते हैं, तो यह ठीक काम करता है। यह पुष्टि करता है कि PyCharm के साथ कुछ गलत है। नया JAVA लेने के लिए PyCharm के रन कॉन्फ़िगरेशन के लिए, मुझे रन कॉन्फ़िगरेशन में विशेष रूप से JAVA_HOME पर्यावरण चर जोड़ना होगा, जैसा कि नीचे दिखाया गया है- यहाँ छवि विवरण दर्ज करें

और यह काम किया!

एक अन्य विकल्प जो काम भी करता है वह रन कॉन्फ़िगरेशन में विंडो में जांच कर रहा Include system environment variables optionहै Environment Variables(ऊपर स्क्रीनशॉट देखें) और PyCharm को पुनरारंभ करें


अच्छी पकड़। मैंने गलती से गलत स्क्रीनशॉट ले लिया। यह अब तय हो गया है
Heapify

0

विंडोज़ में मेरे पास एक ही मुद्दा है, और मैंने पर्यावरण चर पथ में JAVA_HOME जोड़ा है:

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


1
हाय, मैंने भी ऐसा ही किया है। फिर भी मुझे वही त्रुटि मिल रही है। क्या कुछ और है जो आपने बदला है? C: \ Program Files \ Java \ jdk-11.0.2
गौतम

@ गौतम अन्य उत्तरों के रूप में, आपको Java 8 की आवश्यकता है। त्रुटि स्पष्ट रूप से संस्करण 55 कहती है (जो कि जावा 11 है) समर्थित नहीं है
OneCricketeer

0

नमस्ते वास्तव में यह सुनिश्चित करने के लिए कि आप सही SPARK_HOME PATH डाल रहे हैं, आप इसका पता लगाने के लिए इस python स्क्रिप्ट का उपयोग कर सकते हैं: https://github.com/apache/spark/blob/master/python/park.find/spark_home.py

python3 find_spark_home.py 

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

मेरे मैक पर, टर्मिनल पर:

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 पर्यावरण चर पर सेट किया है।

OLD JAVA पथ: /usr/lib/jvm/java-1.11.0-openjdk-amn64

हल: 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._jdd) इकट्ठा करने में। .rdd ()) फ़ाइल "/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/lib/py4j-0.10.7-src.zip/pyjj/java_gateway.py", पंक्ति 1257, में कॉल फ़ाइल "/home/tms/myInstallDir/spark-2.4.5-bin-hadoop2.7/python/pyspark/sql/utils.py", रेखा 79, डेको उठाने IllegalArgumentException (s.split (में ':', 1) [1], स्टैकट्रेस) pyspark.sql.utils.IllegalArgumentException: u'Unsupported वर्ग फ़ाइल प्रमुख संस्करण 55 '


यह मौजूदा जवाब से क्या कहता है कि जावा 8 की आवश्यकता है?
OneCricketeer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.