我是mapreduce的新手。我正在运行mapreduce程序。它编译正常并且jar文件也是在没有任何错误的情况下创建的,但是当我运行最终的Hadoop命令时,它会显示以下错误并停止。
这是完整的日志:
[u@h(IPC2-Gold) w]$ hadoop jar join.jar Runner -Dmapred.job.queue.name=score2 /axp/rim/score2/dev/cmc_score/rishabh/inp/file1.txt /axp/rim/score2/dev/cmc_score/rishabh/inp/file2.txt /axp/rim/score2/dev/cmc_score/rishabh/asd
14/06/19 21:28:44 INFO fs.JobTrackerWatcher: Current running JobTracker is: lgpbd1010.gso.aexp.com/10.22.45.20:9001
14/06/19 21:28:44 INFO mapred.JobClient: Cleaning up the staging area maprfs:/var/mapr/cluster/mapred/jobTracker/staging/rdwiv5/.staging/job_201405310436_72947
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory /axp/rim/score2/dev/cmc_score/rishabh/inp/file2.txt already exists
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:132)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:926)
at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:885)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:885)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:536)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:566)
at Runner.run(Runner.java:55)
at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
at Runner.main(Runner.java:64)
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:197)
答案 0 :(得分:0)
我看到你有三个参数(两个输入文件和一个输出目录)。我认为正在发生的事情是程序只期望两个,一个用于输入,一个用于输出。如果您希望目录中的所有文件都作为输入,只需使用该目录作为输入,如
/axp/rim/score2/dev/cmc_score/rishabh/inp
Hadoop将从该目录中获取所有文件。目前可能发生的事情是hadoop将你的第二个参数(这是同一目录中的另一个文件)作为输出目录,这就是你得到异常的原因
注意:检查目录并查看是否
/axp/rim/score2/dev/cmc_score/rishabh/inp/file1.txt
目录存在。您可能会以路径作为输出意外运行程序,并且还创建了file1.txt
目录(非文件)。然后,当你再次尝试使用相同的参数时,你会得到这个异常,因为该目录已经存在,可能出于上面讨论的相同原因(该程序期待两个args)