2013-11-14 3 views
0

Я тестировал работу по сокращению карты на одном узле и, похоже, работает, но теперь, когда я пытаюсь запустить ее на удаленном кластере, я получаю ClassNotFoundExcepton. Мой код структурирована следующим образом:ClassNotFoundException при запуске HBase map уменьшить работу в кластере

public class Pivot { 
    public static class Mapper extends TableMapper<ImmutableBytesWritable, ImmutableBytesWritable> { 
     @Override 
     public void map(ImmutableBytesWritable rowkey, Result values, Context context) throws IOException { 
      (map code) 
     } 
    } 

    public static class Reducer extends TableReducer<ImmutableBytesWritable, ImmutableBytesWritable, ImmutableBytesWritable> { 
     public void reduce(ImmutableBytesWritable key, Iterable<ImmutableBytesWritable> values, Context context) throws IOException, InterruptedException { 
      (reduce code) 
     } 
    } 

    public static void main(String[] args) { 
     Configuration conf = HBaseConfiguration.create(); 
     conf.set("fs.default.name", "hdfs://hadoop-master:9000"); 
     conf.set("mapred.job.tracker", "hdfs://hadoop-master:9001"); 
     conf.set("hbase.master", "hadoop-master:60000"); 
     conf.set("hbase.zookeeper.quorum", "hadoop-master"); 
     conf.set("hbase.zookeeper.property.clientPort", "2222"); 
     Job job = new Job(conf); 
     job.setJobName("Pivot"); 
     job.setJarByClass(Pivot.class); 
     Scan scan = new Scan(); 
     TableMapReduceUtil.initTableMapperJob("InputTable", scan, Mapper.class, ImmutableBytesWritable.class, ImmutableBytesWritable.class, job); 
     TableMapReduceUtil.initTableReducerJob("OutputTable", Reducer.class, job); 
     job.waitForCompletion(true); 
    } 
} 

ошибка я получаю, когда я пытаюсь запустить эту работу заключается в следующем:

java.lang.RuntimeException: java.lang.ClassNotFoundException: Pivot$Mapper 
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:857) 
    ... 

Есть ли что-то я не хватает? Почему эта работа затрудняет поиск картографа?

+0

Как вы вызова работу (пожалуйста, предоставьте всю командную строку используется) –

+0

Я бегу это от затмения – user2623855

ответ

0

При запуске задания из Eclipse важно отметить, что Hadoop требует, чтобы вы запускали свою работу из банки. Hadoop требует этого, чтобы он мог отправить ваш код в HDFS/JobTracker.

В вашем случае я предполагаю, что вы не объединили свои классы работы в банку, а затем запустили программу «из банки» - в результате получилось CNFE.

Попробуйте собрать баночку и работает из командной строки, используя hadoop jar myjar.jar ... после того, как это работает, то вы можете проверить работает внутри Eclipse,

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