【问题标题】:hadoop wordcount with javahadoop wordcount 与 java
【发布时间】:2016-12-21 17:51:17
【问题描述】:

大家好,我是 Hadoop 的新手。这是我的第一个程序,我需要帮助解决以下错误。

当我将文件直接放入 HDFS 而不使用 hdfs://localhost:9000/ 时,我收到错误消息 dir not exist

所以我通过以下方式将文件放入hdfs

hadoop fs -put file.txt  hdfs://localhost:9000/sawai.txt

在这个文件像这样加载到 HDFS 之后:

  1. 好的,然后我尝试像这样运行 wordcount jar 文件的程序:

    hadoop jar wordcount.jar hdp.WordCount sawai.txt outputdir

    我收到以下错误消息:

    org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop_usr/sawai.txt
    
  2. 然后我尝试另一种方式,我尝试像这样指定 hdfs 路径。

    hadoop jar wordcount.jar hdp.WordCount hdfs://localhost:9000/sawai.txt hdfs://localhost:9000/outputdir

    我收到以下错误消息:

    org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://localhost:9000/sawai.txt already exists
        at org.apache.hadoop.mapred.FileOutputFormat.checkOutputSpecs(FileOutputFormat.java:131)    at org.apache.hadoop.mapreduce.JobSubmitter.checkSpecs(JobSubmitter.java:268) 
        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:422) 
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
        at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287) 
        at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:575) 
        at org.apache.hadoop.mapred.JobClient$1.run(JobClient.java:570) 
        at java.security.AccessController.doPrivileged(Native Method) 
        at javax.security.auth.Subject.doAs(Subject.java:422) 
        at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698) 
        at org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:570) 
        at org.apache.hadoop.mapred.JobClient.submitJob(JobClient.java:561) 
        at org.apache.hadoop.mapred.JobClient.runJob(JobClient.java:870) 
        at hdp.WordCount.run(WordCount.java:40) 
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:70) 
        at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:84) 
        at hdp.WordCount.main(WordCount.java:17) 
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) 
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)    at java.lang.reflect.Method.invoke(Method.java:498) 
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221) 
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
    

我读了很多文章,他们建议我每次都更改输出目录名称,我采用了这种方式,但在我的情况下它不起作用,而且似乎问题在于定义我们要对其执行操作的源文件名。

是什么导致了异常,我该如何解决?

【问题讨论】:

    标签: java hadoop mapreduce hdfs


    【解决方案1】:

    我还没有看到你完整的输入/输出程序......

    我认为 sawai.txt 是您要计算字数的输入文件。你为什么把它复制到输出?

    但是,请参阅此示例将其添加到驱动程序。如果路径存在,则将其删除。所以你不会得到FileAlreadyExistsException

       /*Provides access to configuration parameters*/
        Configuration conf = new Configuration();
        /*Creating Filesystem object with the configuration*/
        FileSystem fs = FileSystem.get(conf);
        /*Check if output path (args[1])exist or not*/
        if(fs.exists(new Path(args[1]))){
           /*If exist delete the output path*/
           fs.delete(new Path(args[1]),true);
        }
    

    【讨论】:

    • 对不起 Ram 我不清楚“我认为 sawai.txt 是你的输入文件,你想计算字数。你为什么要把它复制到输出?”我没有将它复制到输出中,只是在输入文件中提到它。请为我解释一下。我需要你的帮助来执行我的第一个程序。据我了解,我正在使用 sawai.txt 来定义执行操作的文件名。
    • 我遇到了不同的问题,实际上我将输出目录路径传递到驱动程序代码中的输入目录路径。非常感谢@Ram Ghadiyaram。之前 FileInputFormat.setInputPaths(conf, new Path(args[0])); FileOutputFormat.setOutputPath(conf, new Path(args[0]));
    【解决方案2】:

    你试过 hadoop jar wordcount.jar hdp.WordCount /sawai.txt /outputdir 吗? HDFS 更喜欢 FULL 路径。

    另外,我从来不需要添加“hdfs://localhost:/”来将文件上传到 HDFS 或运行 jar。通常你可以参考完整的文件路径和它的罚款。不带那个前缀试试?

    如果这样做没有修复它,最好将复制因子增加到三个file size 也比 block sizesmaller /em> 这可能会成为问题。 Cloudera 建议文件和块大小http://blog.cloudera.com/blog/2009/02/the-small-files-problem

    【讨论】:

    • 是的,我试过没有 HDFS 路径,但它不起作用。我收到错误消息 dir/file sawai.txt 不存在
    • 您是否厌倦了将复制因子增加到三个。从我收集的内容来看,这是最佳实践。此外,文件大小明显小于块大小,这可能会成为问题。 blog.cloudera.com/blog/2009/02/the-small-files-problem
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-23
    • 2013-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多