Сбой Hadoop ToolRunner с NoClassDefFoundError - PullRequest
0 голосов
/ 29 августа 2010

Я создал простой драйвер MapReduce, который реализует интерфейс инструмента.Но когда я пытаюсь запустить задание в Eclipse, я получаю NoClassDefFoundError до вызова метода run().

Я бегу Hadoop 0.20.2 на Ubuntu 10.04 LTS.Исходный код и трассировка стека представлены ниже.Любая помощь будет принята с благодарностью.

Исходный код

import org.apache.hadoop.conf.*;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapreduce.*;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.*;

public class MyTestDriver extends Configured implements Tool {


@Override
public int run(String[] args) throws Exception {

    if (args.length != 2) {
        System.err.printf("Usage: %s [generic options] <input> <output>\n",
            getClass().getSimpleName());
        ToolRunner.printGenericCommandUsage(System.err);
        return -1;
    }

    // Code here to submit Hadoop Job ...   
    return 0;
}

/**
 * @param args
 */
public static void main(String[] args) throws Exception {
    int exitCode = ToolRunner.run(new MyTestDriver(), args);
    System.exit(exitCode);
}

}

Stacktrace

Исключение в потоке "main" java.lang.NoClassDefFoundError: org / apache / commons / cli / ParseException в org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:59) в org.apache.hadoop.util.ToolRunner.run (ToolRunner.java:79) вMaxTemperaDriver.main (MaxTemperaDriver.java:44) Причина: java.lang.ClassNotFoundException: org.apache.commons.cli.ParseException на java.net.URLClassLoader $ 1.run (URLClassLoader.java:202) в java.ontrol.A.doPrivileged (собственный метод) в java.net.URLClassLoader.findClass (URLClassLoader.java:190) в java.lang.ClassLoader.loadClass (ClassLoader.java:307) в sun.misc.Launcher $ AppClassLoader.loadClass (Launcher.java): 301) на java.lang.ClassLoader.loadClass (ClassLoader.java:248) ... еще 3

Ответы [ 2 ]

1 голос
/ 29 августа 2010

Все ли зависимости Hadoop присутствуют в вашем пути сборки Eclipse? Убедитесь, что все файлы jar в каталоге hadoop / lib находятся в вашем пути сборки.

0 голосов
/ 29 августа 2010

Ошибка означает, что существует определенный класс, который не был найден. Классы хранятся в файлах .jar. Итак, вам нужно проверить, все ли необходимые файлы JAR доступны или нет. Поиск файлов JAR осуществляется на основе переменной CLASSPATH . Если вы используете Eclipse в качестве среды разработки, проверьте, удовлетворены ли зависимости сборки (вы можете сделать это, щелкнув правой кнопкой мыши свой проект -> настроить путь сборки -> добавить внешний jar).

Кроме того, если вы не уверены, какой класс отсутствует, вы можете проверить имя класса (Hadoop с открытым исходным кодом, чтобы вы могли найти имя класса), а затем искать имя класса в findjar

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...