org.apache.hadoop.mapred.FileAlreadyExistsException - PullRequest
13 голосов
/ 06 февраля 2011

Я пытался запустить пример программы в Hadoop, указанном здесь

когда я пытаюсь запустить его, я получаю org.apache.hadoop.mapred.FileAlreadyExistsException

emil@psycho-O:~/project/hadoop-0.20.2$ bin/hadoop jar jar_files/wordcount.jar org.myorg.WordCount jar_files/wordcount/input jar_files/wordcount/output
11/02/06 14:54:23 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
11/02/06 14:54:23 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory file:/home/emil/project/hadoop-0.20.2/jar_files/wordcount/input already exists
    at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:111)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:772)
    at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:730)
    at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:1249)
    at org.myorg.WordCount.main(WordCount.java:55)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.hadoop.util.RunJar.main(RunJar.java:156)
emil@psycho-O:~/project/hadoop-0.20.2$ 

Именно из /home/emil/project/hadoop-0.20.2/jar_files/wordcount/input я беру свои входные файлы file01 и file02. Когда я погуглил, я обнаружил, что это сделано для предотвращения повторного выполнения той же задачи. Но в моем случае это входной файл, который вызывает исключение. Что-то не так с моей командой, потому что я не вижу ни одного сообщения с такой же ошибкой для проблемы wordcount. Я новичок в Java.

В чем может быть причина этого ??

Ответы [ 5 ]

19 голосов
/ 05 октября 2011

Я столкнулся с той же проблемой.Мне потребовалось время, чтобы понять, что происходит.Основная проблема заключалась в том, что вы не могли подключить отладчик, чтобы узнать, какие значения передаются.

вы используете args [0] в качестве входных данных и args [1] в качестве выходной папки в вашем коде.

Теперь, если вы используете новую платформу, в которой вы используете командные строки внутри метода run класса Tool, args [0] - это имя выполняемой программы, в данном случае WordCount.

args [1] - это имя указанной вами входной папки, которая отображается программой в выходную папку, и, следовательно, вы видите исключение.

Итак, решение:

используйте args [1] и args [2].

6 голосов
/ 06 февраля 2011

Вы должны удалить выходной каталог, который вы даете, если задание запускалось один раз.
Этот должен пойти за тобой.

bin/hadoop fs -rmr jar_files/wordcount/output

EDIT
Я неправильно понял создателя, подумал, что речь идет о примере с мировым именем из примера Jar Hadoop. Не могли бы вы предоставить исходный код в вашем классе? org.myorg.WordCount

3 голосов
/ 06 февраля 2013

Я только что натолкнулся на это и обнаружил, что должен сделать и , что сказали Сандип и Томас: используйте args [1] и args [2] в примере кода и убедитесь, что каталог вывода несуществуют, несмотря на то, что говорит пример.

0 голосов
/ 28 декабря 2015

Это предотвращает перезапись предыдущих результатов.Вы можете очистить и удалить путь вывода при создании и настройке задания:

public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    TextInputFormat.addInputPath(job,new Path(args[0]));
    FileSystem.get(conf).delete(new Path(args[1]),true);
    TextOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
}
0 голосов
/ 01 марта 2014

Да. Я столкнулся с той же проблемой. Когда я удалил org.myorg.WordCount, все работало нормально.

Редактировать:

FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));

Единственный ввод, ожидаемый заданием, это путь ввода и вывода

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