2017-06-06 2 views
0

Hier ist mein Problem:Janusgraph Funken Guave Version

Wir verwenden cloudera 5.7.0 mit Java 1.8.0_74 und wir haben Funken 1.6.0, 0.1.1 janusgraph, hbase 1.2.0.

ich den folgenden Code in Gremlin-Shell:

:load data/call-janusgraph-schema-groovy 
writeGraphPath='conf/my-janusgraph-hbase.properties' 
writeGraph=JanusGraphFactory.open(writeGraphPath) 
defineCallSchema(writeGraph) 
writeGraph.close() 

readGraph=GraphFactory.open('conf/hadoop-graph/hadoop-call-script.properties') 
gRead=readGraph.traversal() 
gRead.V().valueMap() 

//so far so good everything works perfectly 

blvp=BulkLoaderVertexProgram.build().keepOriginalIds(true).writeGraph(writeGraphPath).create(readGraph) 
readGraph.compute(SparkGraphComputer).workers(1).program(blvp).submit().get() 

Es Sternen den Funken Job Ausführung und die erste Stufe läuft jedoch in der zweiten Stufe erhalte ich eine Ausnahme:

java.lang.NoSuchMethodError: com.google.common.base.Stopwatch.createStarted()Lcom/google/common/base/Stopwatch; 
at org.janusgraph.graphdb.database.idassigner.StandarIdPool.waitForIDBlockGetter(StandartIDPool.java:136)....... 

Ich denke, es ist ein Guave Version Problem

Hier ist, wie ich die gremlin shell starten

#!/bin/bash 

export JAVA_HOME=/mnt/hdfs/jdk.1.8.0_74 

export HADOOP_HOME=/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hadoop 
export HADOOP_CONF_DIR= /etc/hadoop/conf.cloudera.yarn 
export YARN_HOME=/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hadoop-yarn 
export YARN_CONF_DIR=$HADOOP_CONF_DIR 
export SPARK_HOME=/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/spark 
export SPARK_CONF_DIR=$SPARK_HOME/conf 
export HBASE_HOME=/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hbase 
export HBASE_CONF_DIR=$HBASE_HOME/conf 

source "$HADOOP_CONF_DIR"/hadoop-env.sh 
source "$SPARK_HOME"/bin/load-spark-env.sh 
source "$HBASE_CONF_DIR"/hbase-env.sh 

export JAVA_OPTIONS="$JAVA_OPTIONS -Djava.library.path=/opt/cloudera/parcels/CDH-5.7.0-1.cdh5.7.0.p0.45/lib/hadoop/lib/native -Dtinkerpop.ext=ext -Dlog4j.configuration=conf/log4j-console.properties -Dgremlin.log4j.level=$GREMLIN_LOG_LEVEL -javaagent:/mnt/hdfs/janusgraph-0.1.1-hadoop2/lib/jamm-0.3.0.jar -Dhdp.version=$HDP_VERSION" 

GREMLINHOME=/mnt/hdfs/janusgraph-0.1.1-hadoop2 
export HADOOP_GREMLIN_LIBS=$GREMLINHOME/lib 

export CLASSPATH=$HADOOP_HOME/etc/hadoop 

export CLASSPATH=$CLASSPATH:$HBASE_HOME/conf 

export CLASSPATH=$GREMLINHOME/lib/*:$YARN_HOME/*:$YARN_CONF_DIR:$SPARK_HOME/lib/*:$SPARK_CONF_DIR:$CLASSPATH 

cd $GREMLINHOME 
export GREMLIN_LOG_LEVEL=info 
exec $GREMLINHOME/bin/gremlin.sh $* 

und hier ist meine conf/Hadoop-Graph/hadoop-call-script.properties Datei:

gremlin.graph=org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph 
gremlin.hadoop.GraphInputFormat=org.apache.tinkerpop.gremlin.hadoop.structure.io.script.ScriptInputFormat 
gremlin.hadoop.inputLocation=/user/hive/warehouse/tablex/000000_0 
gremlin.hadoop.scriptInputFormat.script=/user/me/janus/script-input-call.groovy 
gremlin.hadoop.outputLocation=output 
gremlin.hadoop.jarsInDistributedCache=true 

spark.driver.maxResultSize=8192 
spark.yarn.executor.memoryOverhead=5000 
spark.executor.cores=1 
spark.executor.instances=1000 
spark.master=yarn-client 
spark.executor.memory=10g 
spark.driver.memory=10g 
spark.serializer=org.apache.spark.serializer.JavaSerializer 

Wenn ich die Zeile "spark.master = Garn-Client" auf „spark.master ändern = local [*] "dann läuft es perfekt und lädt die Daten in den Janusgraphen, es wird keine Ausnahme geworfen. Jedoch muss ich Garn verwenden, es ist ein Muss für mich. Also habe ich die Datei guava-18.0.jar zu hdfs hinzugefügt und die Zeile "spark.executor.extraClassPath = hdfs: ///user/me/guava-18.0.jar" zu hadoop-call-script.properties hinzugefügt. Es hat das Problem nicht gelöst.

Derzeit bin ich aus Ideen und hilflos, jede Hilfe wird geschätzt.

Nicht: Ich bin mir bewusst, dass MVN Shading ist etwas mit diesem Problem verbunden, aber in diesem Fall, da ich Janusgraph Codes verwenden, um einen Funken Job zu erstellen, kann ich nicht eingreifen und schattieren die Guava-Pakete.

Thx im Voraus, Ali

Antwort

1

Das Problem tritt auf, wenn Sie einen Spark-Job übergeben, Janusgraph verwendet Schreib-/Lesezugriffe von/bis HBase. Die eigentliche Ursache des Problems ist, dass jeder dieser Komponenten eine andere Version von Guava benötigt, die sehr schnelle Commits hat und die Kompatibilität zwischen den Versionen nicht gewährleistet ist. Hier einige Versionsabhängigkeit -

  • Funken v1.6.1 - Guava v14.0.1
  • HBase v1.2.4 - Guava v12.0
  • Janusgraph 0.1.1 - Guava v18.0

Auch wenn Sie alle drei Gläser in CLASSPATH verfügbar machen, werden Sie wegen der widersprüchlichen Versionen weiterhin guava-spezifisch.Die Art und Weise, wie ich es gelöst habe, war der Wiederaufbau von Janusgraph und Shading Guava mit Umzug in Janusgraph-Core und Janusgraph-HBase-Eltern.

Nach der Lösung dieses Problems stieß ich auf einige andere Abhängigkeitsprobleme im Zusammenhang mit Anlegestegkonflikten in Spark und HBase, für die ich Mortbay von janusgraph-hbase-parent shading ausschloss.

Hoffe das hilft, wenn Sie mehr Informationen dazu benötigen, werde ich die Antwort aktualisieren.

+0

Ihre Antwort hat mir sicherlich geholfen. Vielen Dank. –

0

ich genau das gleiche Problem vor einigen Tagen konfrontiert hatte. Dies liegt daran, dass das com.google.guava: guava: 18.0-Artefakt möglicherweise nicht im Klassenpfad vorhanden ist oder mehrere Versionen desselben jar im Klassenpfad vorhanden sind.

#from the projects home dir 
>ls -lrt lib/ | grep gua 
# should show guava-18.0.jar 

Wenn das Artefakt (https://mvnrepository.com/artifact/com.google.guava/guava/18.0) nicht vorhanden ist, dann ist es in lib Ordner hinzufügen.

Es ist gut, den $ CLASSPATH aus dem Shell-Skript zu drucken um zu überprüfen, falls erforderlich Gläser sind auf dem Classpath

Verwandte Themen