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