org.apache.hadoop.mapred.FileAlreadyExistsException

2022-09-04 06:24:35

我试图在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。当我谷歌搜索时,我发现这样做是为了防止重新执行相同的任务。但在我的情况下,是输入文件导致了异常。我的命令有什么问题,因为我没有看到任何与字数问题有相同错误的帖子。我是Java的新手。

这可能是什么原因??


答案 1

我遇到了同样的问题。我花了一段时间才弄清楚发生了什么。主要问题是您无法附加调试器来找出正在传递的值。

您在代码中使用 args[0] 作为输入,使用 args[1] 作为输出文件夹。

现在,如果您使用的是新框架,其中您正在使用Tool类的run方法中的命令行,则args[0]是正在执行的程序的名称,在本例中为WordCount。

args[1] 是您指定的输入文件夹的名称,该文件夹由程序映射到输出文件夹中,因此您会看到异常。

所以解决方案是:

使用 args[1] 和 args[2]。


答案 2

如果作业运行一次,则必须删除要提供的输出目录。
这个应该适合你。

bin/hadoop fs -rmr jar_files/wordcount/output

编辑
我错过了对创建者的理解,以为它是关于hadoop示例jar的worcount示例。你能提供你班级的源代码吗?org.myorg.WordCount


推荐