2017-01-31 14 views
1

В настоящее время мы пытаемся загрузить несколько файлов из HDFS в титан, используя работу по сокращению карты и зависимости титана. Однако мы сталкиваемся с проблемой, когда начинаются задания по карте, где он не может найти класс tinkerpop. Это ошибка:ClassNotFoundException при попытке навальной загрузки в титан с использованием задания Java MapReduce

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

Я где-то читал, что Titan 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> 

Mapper:

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(); 
    } 
} 

Driver:

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? Через консоль Gremlin? –

+0

Мы строим банку через maven, затем пытаемся запустить MR-задание на кластере hadoop, используя команду «jarn jar jar TitanMR.jar/pathToData» – Raistlin

ответ

1

Я предлагаю вам изучить создание uber-jar, в котором содержатся все ваши зависимости проекта. Поскольку вы используете Apache Maven для своей сборки, вы используете Apache Maven Assembly Plugin или Apache Maven Shade Plugin.

+0

Я попробую те. Я попытался поместить gremlin-core-3.0.1-incubating.jar в путь класса hasoop, но он все еще не может найти класс. – Raistlin

+0

По большей части работа с uber-jar сработала. Тем не менее, мы в настоящее время работает в новую ошибку: 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

Обновите Gremlin банки в 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 несовместимы с Titan 1.0.0. Исходное сообщение верно, что следует использовать [TinkerPop 3.0.1] (https://github.com/thinkaurelius/titan/blob/1.0.0/pom.xml#L62). –

 Смежные вопросы

  • Нет связанных вопросов^_^