2017-06-06 36 views
0

這裏是我的問題:Janusgraph火花番石榴版本

我們使用Cloudera的5.7.0和Java 1.8.0_74和我們有火花1.6.0,0.1.1 janusgraph,HBase的1.2.0。

我跑在小鬼殼下面的代碼:

: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() 

它顆星的執行火花的工作,第一階段,在第二階段的順利然而運行我得到一個異常:

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)....... 

我想它是番石榴版本的問題

這裏是我如何啓動gremlin shell

#!/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 $* 

這裏是我的conf/Hadoop的圖形/ hadoop-call-script.properties文件:

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 

如果我更改線路 「spark.master =紗的客戶端」 到「spark.master =本地[*]「,那麼它完美運行並將數據加載到janusgraph,不會引發異常。但是我需要使用紗線,這對我來說是必須的。因此,我將guava-18.0.jar添加到hdfs,並將「spark.executor.extraClassPath = hdfs:///user/me/guava-18.0.jar」這一行添加到hadoop-call-script.properties。 它沒有解決問題。

目前我出於想法和無助,任何幫助表示讚賞。

不是:我知道mvn着色與這個問題有關,但是在這種情況下,因爲我使用janusgraph代碼創建了一個spark工作,所以我無法介入和遮蔽guava包。

Thx提前, 阿里

回答

1

當您提交將使用Janusgraph來讀取/到/寫一個Spark作業中發生的問題HBase的。問題的真正原因是這個組件中的每一個都需要一個不同版本的番石榴,它具有非常快速的提交,並且不能保證各版本之間的兼容性。這裏是快速瀏覽一下版本依賴 -

  • 星火V1.6.1 - 番石榴v14.0.1
  • HBase的V1.2.4 - 番石榴V12.0
  • Janusgraph 0.1.1 - 番石榴v18.0

即使您在CLASSPATH中提供所有三個罐子,由於相互衝突的版本,您仍然會獲得特定的番石榴。我解決這個問題的方法是重建Janusgraph並在janusgraph-core和janusgraph-hbase-parent中重定位着色番石榴。

解決了這個之後,我遇到了一些與Spark和HBase中的碼頭衝突有關的其他依賴問題,我爲此從janusgraph-hbase-parent陰影中排除了mortbay。

希望這有助於,如果你需要更多的信息,我會更新答案。

+0

你的回答當然對我有幫助。謝謝。 –

0

我曾遇到相同問題幾天就回來。發生這種情況是因爲com.google.guava:guava:18.0工件可能不存在於類路徑中,或者類路徑中可能存在多個版本相同的jar。

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

如果工件(https://mvnrepository.com/artifact/com.google.guava/guava/18.0)不存在,那麼將其添加到lib文件夾中。

這是好事,從shell腳本中打印$ CLASSPATH,以檢查是否需要的jar在classpath