提交MapReduce作业报错:HDFS输入路径不存在问题求助
从你给出的错误日志来看,核心问题是Hadoop无法找到指定的输入文件,具体触发的错误是:
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs://localhost:9000/input/BX-Book-Ratings.csv
这里有两个关键问题需要排查和修复:
1. HDFS路径大小写不匹配
你执行命令时指定的输入路径是/Input/BX-Book-Ratings.csv(首字母大写的Input),但错误日志里Hadoop实际去查找的是/input/BX-Book-Ratings.csv(小写的input)。HDFS的文件路径是严格区分大小写的,这大概率是导致本次报错的直接原因。
2. 本地文件未同步到HDFS
你提到CSV文件在本地的/home/user/Desktop目录下,但Hadoop默认会优先去HDFS(分布式文件系统)中查找输入路径,而非本地文件系统。所以即使本地存在该文件,只要HDFS中没有同步过去,就会触发路径不存在的错误。
具体解决步骤:
第一步:检查HDFS中的目标路径
先执行以下命令确认HDFS里是否存在你指定的目录和文件:hdfs dfs -ls /Input如果返回
File does not exist,说明HDFS里还没有对应的目录和文件。第二步:创建HDFS目录并上传本地文件
先创建和命令中大小写一致的HDFS目录:hdfs dfs -mkdir -p /Input再把本地的CSV文件上传到这个HDFS目录下(替换成你实际的本地文件路径):
hdfs dfs -put /home/user/Desktop/BX-Book-Ratings.csv /Input/第三步:重新运行Jar包
完成上述操作后,再次执行你的原命令,应该就能正常找到输入文件了:hadoop jar /home/user/Desktop/project1_usecase3.jar /Input/BX-Book-Ratings.csv /Output
额外提示:
关于日志中的这个警告:
WARN mapreduce.JobSubmitter: Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
它不会导致当前的输入路径错误,但如果想规范Hadoop应用的命令行参数处理,可以让你的主类实现org.apache.hadoop.conf.Configurable和org.apache.hadoop.util.Tool接口,然后用ToolRunner.run()来启动应用,这样能更优雅地处理Hadoop的配置参数。
内容的提问来源于stack exchange,提问作者user2279048




