2017-01-31 6 views
1

現在、map reduceジョブとtitan依存関係を使用してHDFSのファイルをtitanに一括読み込みしようとしています。しかし、マップジョブが開始された時点では、tinkerpopクラスが見つからない問題が発生しています。それは私たちのバージョンが依存関係のためにあるものですので、Java MapReduceジョブを使用してTitanに一括ロードしようとするとClassNotFoundExceptionが発生する

java.lang.ClassNotFoundException: org.apache.tinkerpop.gremlin.structure.Vertex 

私はタイタン1.0.0がTinkerpop 3.0.1-インキュベーションとのみ互換性があることをどこかで読ん:これはエラーです。 それは私たちののpom.xmlやコードを表示するのに役立つかもしれない

のpom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>replacementID</groupId> 
    <artifactId>replacementID</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <dependencies> 
    <dependency> 
     <groupId>org.apache.hadoop</groupId> 
     <artifactId>hadoop-client</artifactId> 
     <version>2.7.3</version> 
    </dependency> 
    <dependency> 
     <groupId>com.thinkaurelius.titan</groupId> 
     <artifactId>titan-hbase</artifactId> 
     <version>1.0.0</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tinkerpop</groupId> 
     <artifactId>hadoop-gremlin</artifactId> 
     <version>3.0.1-incubating</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tinkerpop</groupId> 
     <artifactId>gremlin-core</artifactId> 
     <version>3.0.1-incubating</version> 
    </dependency> 
    <dependency> 
     <groupId>org.apache.tinkerpop</groupId> 
     <artifactId>gremlin-driver</artifactId> 
     <version>3.0.1-incubating</version> 
    </dependency> 
    </dependencies> 
</project> 

マッパー:

package edu.rosehulman.brubakbd; 
import java.io.IOException; 

import org.apache.commons.configuration.BaseConfiguration; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Mapper; 

import com.thinkaurelius.titan.core.TitanFactory; 
import com.thinkaurelius.titan.core.TitanGraph; 
import com.thinkaurelius.titan.core.TitanVertex; 
import org.apache.tinkerpop.gremlin.structure.Vertex; 

public class TitanMRMapper extends Mapper<LongWritable, Text, Text, IntWritable>{ 


    @Override 
    public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException{ 
     String line = value.toString(); 
     String[] vals = line.split("\t"); 

     BaseConfiguration conf = new BaseConfiguration(); 
       conf.setProperty("gremlin.graph", "com.thinkaurelius.titan.core.TitanFactory"); 
       conf.setProperty("storage.backend", "hbase"); 
       conf.setProperty("storage.hostname", "hadoop-16.csse.rose-hulman.edu"); 
       conf.setProperty("storage.batch-loading", true); 
       conf.setProperty("storage.hbase.ext.zookeeper.znode.parent","/hbase-unsecure"); 
       conf.setProperty("storage.hbase.ext.hbase.zookeeper.property.clientPort", 2181); 
       conf.setProperty("cache.db-cache",true); 
       conf.setProperty("cache.db-cache-clean-wait", 20); 
       conf.setProperty("cache.db-cache-time", 180000); 
       conf.setProperty("cache.db-cache-size", 0.5); 


     TitanGraph graph = TitanFactory.open(conf); 
     TitanVertex v1 = graph.addVertex(); 
     v1.property("pageID", vals[0]); 
     TitanVertex v2 = graph.addVertex(); 
     v2.property("pageID", vals[1]); 

     v1.addEdge("links_To", v2); 

     graph.tx().commit(); 
    } 
} 

ドライバ:

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.mapreduce.lib.output.NullOutputFormat; 

public class TitanMR { 

    public static void main(String[] args) throws Exception{ 
     if (args.length != 1){ 
      System.err.println("Usage: TitanMR <input path>"); 
      System.exit(-1); 
     } 

     Job job = new Job(); 
     job.setJarByClass(TitanMR.class); 
     job.setJobName("TitanMR"); 

     FileInputFormat.addInputPath(job, new Path(args[0])); 
     job.setOutputFormatClass(NullOutputFormat.class); 

     job.setMapperClass(TitanMRMapper.class); 
     job.setNumReduceTasks(0); 

     System.out.println("about to submit job"); 
     System.exit(job.waitForCompletion(true) ? 0 : 1); 
    } 
} 
+0

'gremlin-core.jar'と他の依存関係が' CLASSPATH'にあることを確認する必要があります。あなたはどのようにあなたの仕事をしていますか? Maven経由ですか?グレムリンコンソール経由ですか? –

+0

mavenでjarファイルを作成し、 'yarn jar TitanMR.jar/pathToData'コマンドを使用してhadoopクラスタでMRジョブを実行しようとしています – Raistlin

答えて

1

私はあなたのプロジェクトの依存関係のすべてを含むuber-jarの作成を検討することをお勧めします。ビルドにApache Mavenを使用しているので、Apache Maven Assembly PluginまたはApache Maven Shade Pluginを使用します。

+0

私はそれらを試してみましょう。私はhadoopのclasspathにgremlin-core-3.0.1-incubating.jarを入れようとしましたが、まだクラスを見つけることはできません。 – Raistlin

+0

ほとんどの場合、ユーバージャーを使っています。ただし、新しいエラーが発生しています: java.lang.IllegalArgumentException:実装をインスタンス化できませんでした:com.thinkaurelius.titan.diskstorage.hbase.HBaseStoreManager その根本原因はまだ見つからない: 原因:java.lang.ClassNotFoundException:com.thinkaurelius.titan.diskstorage.hbase.HBaseCompat1_00 – Raistlin

+0

これをTitanの基本設定に追加してみてください。 'conf.setProperty(" storage.hbase.compat-class "、" com.thinkaurelius.titan.diskstorage .hbase.HBaseCompat1_0 ");' https://github.com/thinkaurelius/titan/blob/1.0.0/titan-hbase-parent/titan-hbase-10/src/main/java/com/thinkaurelius/titan/ diskstorage/hbase/HBaseCompat1_0.java#L14 –

0
はであなたのグレムリンのjarファイルをアップグレード

pom.xml

<dependency> 
    <groupId>org.apache.tinkerpop</groupId> 
    <artifactId>hadoop-gremlin</artifactId> 
    <version>3.2.3</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.tinkerpop</groupId> 
    <artifactId>gremlin-core</artifactId> 
    <version>3.2.3</version> 
</dependency> 

<dependency> 
    <groupId>org.apache.tinkerpop</groupId> 
    <artifactId>gremlin-driver</artifactId> 
    <version>3.2.3</version> 
</dependency> 
+0

TinkerPop 3.2.3 jarsはTitan 1.0.0と互換性がありません。元の投稿は正しいです[TinkerPop 3.0.1](https://github.com/thinkaurelius/titan/blob/1.0.0/pom.xml#L62)を使用する必要があります。 –

関連する問題