这里是 Hadoop 新手。所以我只是配置了一个单节点设置,我不确定文件应该放在哪里?!我的理解是应该在HDFS上。因此,我使用“将文件上传到 DFS”向我的 HDFS 添加了一个文本文件“zulu.txt”(右键单击 DFS;见下图)
当我使用
String input = "/user/irobot-pc/irobot/In/";
我收到以下错误代码:输入路径不存在
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/user/irobot-pc/irobot/In
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:224)
at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:241)
at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885)
at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:779)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:432)
at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:447)
at com.testdrive.WordCount.main(WordCount.java:37)
但是当在我的本地文件系统上指示输入时 - 它有效!
String input = "C:\\Users\\iRobot\\Desktop\\Pop";
哈?!这对我来说没有意义。我的印象是应该读取 hadoop 文件系统,不是吗?
问题:我想转到“集群设置”,我知道文件必须位于 HDFS 下。在升级之前如何在本地修复它?
最佳答案
您需要告诉您的代码您打算使用 HDFS 而不是本地 FS。你可以在 Configuration 对象的帮助下做到这一点。在你的工作中添加这些行:
Configuration conf = new Configuration();
conf.addResource(new Path("$HADOOP_HOME/conf/core-site.xml"));
conf.addResource(new Path("$HADOOP_HOME/conf/hdfs-site.xml"));
否则您的代码将在本地 FS 中查找输入。
HTH
关于Hadoop MapReduce - 程序在文件系统上工作,但在 HDFS 上不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20107770/