关于org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs:xxx错误的解决方案。
因为最近打算巩固学习一下大数据相关的只是,于是在机制的虚拟机上搭建了一个Hadoop环境,跑了一个测试模型。抛出了如下异常:
20/07/14 23:53:47 INFO client.RMProxy: Connecting to ResourceManager at *** xxx
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs:// xxx already exists***
at org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:146)
at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:266)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:139)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:415)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:1308)
at org.apache.hadoop.examples.WordCount.main(WordCount.java:87)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:71)
at org.apache.hadoop.util.ProgramDriver.run(ProgramDriver.java:144)
at org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:74)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
- 解决方案
其实这个问题很好解决,只需要将日志提示的文件路径删除即可。
为什么要记录这个问题呢,这是为了提醒自己提醒大家,在遇到程序报错时。最有效、最管用的解决方案就是好好阅读日志。就像上述问题我一开始压根没去好好阅读日志,而是去想着是不是环境问题,后来发现各个服务都正常启动,于是再次运行模型,依然抛出这个问题,才去阅读日志,定位到日志FileAlreadyExistsException: Output directory hdfs很清楚的就能发现问题。文件目录已经存在,删除该目录即可。
最后再给自己提醒一下,认真阅读日志、认真阅读日志、认真阅读日志。