Hadoop MapReduce - 程序在文件系统上工作,但在 HDFS 上不工作

标签 hadoop mapreduce

这里是 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 下。在升级之前如何在本地修复它?

enter image description here

最佳答案

您需要告诉您的代码您打算使用 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/

相关文章:

java - NoClassDefFoundError,无法运行 MapReduceColorCount (Avro 1.7.7)

hadoop - sqoop从mysql导入到hbase的问题

apache - 反序列化 map 中的Avro对象时发生异常

hadoop - 使用hadoop执行jar文件

hadoop - 在 PIG 中传递一个包作为 UDF 的输入

hadoop - Hadoop NameNode格式不起​​作用

java - 来自 sqoop.tool 的 ImportTool 不适用于参数 (org.apache.sqoop.SqoopOptions)

apache - 如何在centos 7上使用Ambari监视hadoop集群

hadoop - 当 Hadoop 集群中的一个节点非常慢时?

r - 通过映射器中的文档编号区分字数-Hadoop?