【问题标题】:Hadoop's WordCount runs form command line but not from EclipseHadoop WordCount 从命令行运行,而不是从 Eclipse
【发布时间】:2012-11-30 17:13:28
【问题描述】:

最近几天,我测试了多个版本的 Hadoop(1.0.1、1.0.2、1.1.4)。在每种情况下,我都可以使用以下命令行轻松运行 WordCount 程序:

hadoop  jar  hadoop-examples-1.1.1.jar  wordcount  /input   output

由于上面的命令执行成功,那么我假设我的 Hadoop 配置是正确的。但是,当我尝试使用来自 Eclipse 的完全相同的输入来运行程序时,每个版本都会收到以下错误消息。 谁能告诉我为什么它不能从 Eclipse 运行?

Dec 12, 2012 2:19:41 PM org.apache.hadoop.util.NativeCodeLoader <clinit>
WARNING: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Dec 12, 2012 2:19:41 PM org.apache.hadoop.mapred.JobClient copyAndConfigureFiles
WARNING: No job jar file set.  User classes may not be found. See JobConf(Class) or JobConf#setJar(String).
****file:/tmp/wordcount/in
Dec 12, 2012 2:19:42 PM org.apache.hadoop.mapred.JobClient$2 run
INFO: Cleaning up the staging area file:/tmp/hadoop-root/mapred/staging/root-41981592/.staging/job_local_0001
Dec 12, 2012 2:19:42 PM org.apache.hadoop.security.UserGroupInformation doAs
SEVERE: PriviledgedActionException as:root cause:org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/input
Exception in thread "main" org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: file:/input
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.listStatus(FileInputFormat.java:235)
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:252)
    at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:962)
    at org.apache.hadoop.mapred.JobClient.writeSplits(JobClient.java:979)
    at org.apache.hadoop.mapred.JobClient.access$600(JobClient.java:174)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:897)
    at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850)
    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:1093)
    at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850)
    at org.apache.hadoop.mapreduce.Job.submit(Job.java:500)
    at org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530)
    at com.igalia.wordcount.WordCount.run(WordCount.java:94)
    at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:65)
    at com.igalia.wordcount.App.main(App.java:28)

【问题讨论】:

  • /input 通常映射到文件系统的根目录。它不太可能真的存在。你能确认有这个文件夹吗?例如。 ls -l /input/*
  • 同时检查你是否在你的 Eclipse 中配置了 HDFS App 正确,所以它会找到 hdfs:/input 而不是 file:/input
  • 我已经检查过 /input 存在。此外,我尝试了所有类型的路径,为了确保路径正确,我转到 HDFS 页面 (localhost:50070/dfshealth.jsp) 并从那里复制路径。但是,您提到“在您的 Eclipse 应用程序中配置的 HDFS 正确;”我该怎么做呢?我只运行 Hadoop 下载附带的标准 WordCount。
  • 嗨,Thomas,我刚刚检查过,你说的很对,程序正在寻找 file:/input 而不是 /input。请帮我一个忙,告诉我如何摆脱该文件:part。这让我发疯,你是第一个能够认识到这个问题的人。我只是假设 file: 是错误消息的一部分,而不是路径的一部分。

标签: eclipse hadoop mapreduce


【解决方案1】:

对于 windows 7 上的 hadoop-2.2.0,我添加了以下行并解决了问题(注意:我的 Hadoop 主页是:C:\MyWork\MyProjects\Hadoop\hadoop-2.2.0)

配置 conf = new Configuration();

conf.addResource(new Path("C:\MyWork\MyProjects\Hadoop\hadoop-2.2.0\etc\hadoop\core-site.xml"));

conf.addResource(new Path("C:\MyWork\MyProjects\Hadoop\hadoop-2.2.0\etc\hadoop\hdfs-site.xml"));

【讨论】:

    【解决方案2】:

    通过 Configuration abject 在你的工作中添加以下两行:

    Configuration.addResource(new Path("path-to-your-core-site.xml file"));
    Configuration.addResource(new Path("path-to-your-hdfs-site.xml file"));
    

    【讨论】:

    • 谢谢塔里克。完美运行。
    • 太棒了。我们需要告诉作业去哪里获取名称节点和数据节点。
    • 太棒了..:) 对我来说效果很好
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-30
    • 1970-01-01
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多