Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用java的hadoop wordcount_Java_Hadoop_Mapreduce_Hdfs - Fatal编程技术网

使用java的hadoop wordcount

使用java的hadoop wordcount,java,hadoop,mapreduce,hdfs,Java,Hadoop,Mapreduce,Hdfs,大家好,我是Hadoop的新手。这是我的第一个程序,我需要帮助解决以下错误 当我直接将文件放入HDFS时,不使用hdfs://localhost:9000/ 然后我得到错误消息dir not exist 所以我使用以下方法将文件放入hdfs中 hadoop fs -put file.txt hdfs://localhost:9000/sawai.txt 将此文件加载到HDFS后,如下所示: 已成功添加文件“> 好的,然后我试着运行wordcount jar文件的程序,如下所示: hadoo

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

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

所以我使用以下方法将文件放入hdfs中

hadoop fs -put file.txt  hdfs://localhost:9000/sawai.txt
将此文件加载到HDFS后,如下所示:

已成功添加文件“>

  • 好的,然后我试着运行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
    
    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)
    
  • 然后我尝试另一种方法,我尝试像这样指定hdfs路径

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

    我收到以下错误消息:

    org.apache.hadoop.mapred.InvalidInputException: Input path does not exist: hdfs://localhost:9000/user/hadoop_usr/sawai.txt
    
    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)
    
  • 我读了很多文章,他们每次都建议我更改输出目录名,我采用了这种方法,但在我的案例中它不起作用,而且它的问题似乎是定义我们要对其执行操作的源文件名


    导致异常的原因是什么?我如何解决它?

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

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

    但是,请参见此示例,将其添加到驱动程序中。如果路径存在,则会将其删除。这样您就不会得到
    filereadyexistException

       /*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);
        }
    

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

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

    但是,请参见此示例,将其添加到驱动程序中。如果路径存在,则会将其删除。这样您就不会得到
    filereadyexistException

       /*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);
        }
    

    您尝试过hadoop jar wordcount.jar hdp.wordcount/sawai.txt/outputdir吗?HDFS更喜欢完整路径

    而且,我从来没有准备过”hdfs://localhost:/“将文件上载到HDFS或运行jar。通常,您只需引用完整的文件路径即可。也许可以在没有预先设置的情况下尝试


    如果这不能解决问题,最佳做法是将复制因子增加到3。此外,文件大小明显小于块大小,这可能会产生问题。Cloudera关于文件和块大小的建议您是否尝试过hadoop jar wordcount.jar hdp.wordcount/sawai.txt/outputdir?HDFS首选完整路径

    而且,我从来没有准备过”hdfs://localhost:/“将文件上载到HDFS或运行jar。通常,您只需引用完整的文件路径即可。也许可以在没有预先设置的情况下尝试


    如果这不能解决问题,最佳做法是将复制因子增加到3。此外,文件大小明显小于块大小,这可能会产生问题。Cloudera关于文件和块大小的建议是的,我尝试了不使用HDFS路径,但它不起作用。i get错误消息dir/file sawai.txt不存在您是否厌倦了将复制因子增加到3。从我收集的信息来看,这是最佳做法。此外,文件大小明显小于块大小,这可能会产生问题。是的,我尝试了没有HDFS路径,但它不工作。我得到的错误消息dir/file sawai.txt不存在您是否厌倦了将复制因子增加到3。从我收集的信息来看,这是最佳做法。此外,文件大小明显小于块大小,这可能会产生问题。对不起,Ram我不清楚“我认为sawai.txt是您的输入文件,您要计算字数”的意思是什么。为什么要将其复制到输出?“我没有将其复制到输出中,只是在输入文件中提到了它。请给我解释一下。我需要你的帮助来执行我的第一个程序。据我所知,我正在使用sawai.txt来定义执行操作的文件名。我遇到了不同的问题,实际上我在驱动程序代码中将outputdir路径传递给了inputdir路径。非常感谢Ram Ghadiyaram。在FileInputFormat.setInputPath(conf,新路径(args[0])之前;setOutputPath(conf,新路径(args[0]);对不起,Ram我不清楚“我想sawai.txt是你的输入文件,你想计算字数。你为什么要将其复制到输出?”的意思是什么?我没有将其复制到输出中,只是在输入文件中提到了它。请给我解释一下。我需要你的帮助来执行我的第一个程序。据我所知,我正在使用sawai.txt来定义执行操作的文件名。我遇到了不同的问题,实际上我在驱动程序代码中将outputdir路径传递给了inputdir路径。非常感谢Ram Ghadiyaram。在FileInputFormat.setInputPath(conf,新路径(args[0])之前;setOutputPath(conf,新路径(args[0]);