LoginSignup
1
1

More than 3 years have passed since last update.

Java8とJava11が共存している環境下でSparkを使おうとしたときに出たエラーを解決

Posted at

Java8とJava11が共存している環境下でSparkを使おうとしたときに出たエラーを解決

概要

spark-shellからsparkを使ってもpysparkを実行しても以下のような同じエラーが出ていたので直した。

'Unsupported class file major version 55'

環境

Ubuntu18.04
Spark 2.4.3

解決方法(試行錯誤つき)

原因はJava11を使っていることらしい。使用しているJavaのバージョンを確認して、別のバージョンを選ぶために以下を実行。

$ sudo update-alternatives --config java
alternative java (/usr/bin/java を提供) には 3 個の選択肢があります。

  選択肢    パス                                          優先度  状態
------------------------------------------------------------
  0            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      自動モード
  1            /usr/lib/jvm/java-11-openjdk-amd64/bin/java      1101      手動モード
* 2            /usr/lib/jvm/java-11-oracle/bin/java             1091      手動モード
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      手動モード


現在の選択 [*] を保持するには <Enter>、さもなければ選択肢の番号のキーを押してください:3

これでJava8を使うようになるかと思ったのだけれど、以下のように、そうはならなかった。

$ java --version
openjdk 11.0.2 2019-01-15
OpenJDK Runtime Environment 18.9 (build 11.0.2+9)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.2+9, mixed mode)

そもそもどこを見に行っているのか調べてみる。すると、

$ which java
/home/ksn/.sdkman/candidates/java/current/bin/java

となっておりJava(とKotlin)はSDKMANを使ってインストールした形跡があり。

ここで、SDKMANでsparkをインストールできるらしいことを知ったのでそちらを試すことに。

$ sdk install spark

でインストールして$spark-sessionから動作確認を試みたが、やはり'Unsupported class file major version 55'のような同じエラーが出ている。

$ sdk list java

をしてSDKMANでJava8がインストール出来るのか見てみると、Javaは8以下はインストールできないっぽいことが判明。そうなるとこちらで解決しようというのは無理だということを判断。

よって、以下でSDKMANで入れたjavaをアンインストール。

$ sdk uninstall java 11.0.2-open

これで、

$ java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-8u212-b03-0ubuntu1.18.04.1-b03)
OpenJDK 64-Bit Server VM (build 25.212-b03, mixed mode)

$ which java
/usr/bin/java

となり、/usr/bin/下のjavaを読んでくれることに。

$ spark-shellとしてSDKMANでインストールしたsparkを立ち上げてみる。すると

$ spark-shell
...
scala> val textFile = spark.read.text("README.md")
textFile: org.apache.spark.sql.DataFrame = [value: string]

scala> textFile.count()
res0: Long = 109

となり、無事エラーがでなくなった。

調べた限りだと、SparkやHadoopと一緒にJava11を使うのはまだ早すぎでJava11を使いたければSpark3.xに期待しろとのことであった。これで先日のHadoopを導入した際の問題も解決すると思われる。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1