Wenn ich starte hive
, wird der folgende Fehler angezeigt
[hadoop@a74f90aecdad tmp]$ hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.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.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:536)
at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:554)
at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:448)
at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5141)
at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5099)
at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:97)
at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:81)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:699)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
Was bedeutet das? Ist es möglich, mehr Details anzuzeigen?
com.google.common.base.Preconditions
in einer JAR in ihrem CLASSPATH gefunden wurde (vorausgesetzt, Hive verwendet keinen benutzerdefinierten ClassLoader, der den CLASSPATH überschreibt), aber diese Klasse verfügt nicht über die genaue Methode, die sie zur Kompilierungszeit hatte.
hive
Fat Client generiert wird - folgen Sie beispielsweise der Kette von Shell-Skripten, die Shell-Skripte aufrufen, die Shell-Skripte aufrufen, bis Sie den eigentlichen Befehl findenjava -cp <CLASSPATH> etc etc
com.google.common.
schlägt vor, dass Sie eine Versionsinkongruenz mit "Guave" oder "Protobuf" JAR haben. Möglicherweise hat eine ältere JAR den ersten Platz im CLASSPATH belegt, mit einer älteren Version, in der die KlassePreconditions
keine Methode hatcheckArgument(String,Object)
.