web-dev-qa-db-ja.com

ハイブ:JDK8を使用しているにもかかわらず、AppClassLoaderをURLClassLoaderにキャストできません

インストール後jdk9私はこの問題を見てきました:

$Hive
Java HotSpot(TM) 64-Bit Server VM warning: Ignoring option MaxPermSize; support was removed in 8.0
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/Cellar/Hive/2.3.1/libexec/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/usr/local/Cellar/hadoop/2.8.1/libexec/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.Apache.logging.slf4j.Log4jLoggerFactory]
Exception in thread "main" Java.lang.ClassCastException: Java.base/jdk.internal.loader.ClassLoaders$AppClassLoader cannot be cast to Java.base/Java.net.URLClassLoader
    at org.Apache.hadoop.Hive.ql.session.SessionState.<init>(SessionState.Java:394)
    at org.Apache.hadoop.Hive.ql.session.SessionState.<init>(SessionState.Java:370)
    at org.Apache.hadoop.Hive.cli.CliSessionState.<init>(CliSessionState.Java:60)
    at org.Apache.hadoop.Hive.cli.CliDriver.run(CliDriver.Java:708)
    at org.Apache.hadoop.Hive.cli.CliDriver.main(CliDriver.Java:686)
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
    at Java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.base/Java.lang.reflect.Method.invoke(Method.Java:564)
    at org.Apache.hadoop.util.RunJar.run(RunJar.Java:234)
    at org.Apache.hadoop.util.RunJar.main(RunJar.Java:148)

しかし、私は持っています

- 更新しました $PATH Java8を指す

$Java -version
Java version "1.8.0_144"
Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)

Java8を指定するようにHive実行可能ファイルを更新

vi $(which Hive)

#!/bin/bash
Java_HOME="$(/usr/libexec/Java_home --version 1.8)" Hive_HOME="/usr/local/Cellar/Hive/2.3.1/libexec" exec "/usr/local/Cellar/Hive/2.3.1/libexec/bin/Hive" "$@"

更新されたJavaバージョンがjdk8を指していることを確認しました

$/usr/libexec/Java_home --version 1.8
/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home

ここで他に何を調べる必要がありますか?

これは Hive 2.3.1 on macos

 $Hive --version
Hive 2.3.1
Git git://jcamachorodriguez-rMBP.local/Users/jcamachorodriguez/src/workspaces/Hive/HIVE-Apache/Hive -r 7590572d9265e15286628013268b2ce785c6aa08
Compiled by jcamachorodriguez on Thu Oct 19 18:37:58 PDT 2017
From source with checksum 03c91029a6103bd91f25a6ff8a01fbcd
7
javadba

同じ問題があります。環境を変更する代わりにJDK9を削除するだけで、問題は解決します。

ハイブを参照してください、それは使用します

Java_HOME="$(/usr/libexec/Java_home --version 1.7+)" 
Hive_HOME="/usr/local/Cellar/Hive/2.3.1/libexec" 
exec "/usr/local/Cellar/Hive/2.3.1/libexec/bin/Hive" "$@".
1
player six

Jdk8をインストールし、それに応じてhadoop-env.shでパスを変更します。これで、うまくいきました。

1
Legend-IDK

Hiveのセットアップ中に同じエラーに直面していましたが、最初はJavaバージョンが異なることが原因である可能性があると考えていました。

しかし、Javaバージョンをチェックすると、jdk1.8でした。

最後に、jdkのインストール済みディレクトリ(/ Library/Java/JavaVirtualMachine)を確認したところ、jdk1.8とjdk10の両方が存在することがわかりました。

Jdk 10を削除しましたが、ようやく機能しました。

0
Deepak Rajwani