欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Hadoop第一个程序wordcount命令运行jar包报错Usage: wordcount

程序员文章站 2022-04-30 23:12:31
...

第一次使用命令运行jar包使用Hadoop,然后报错。网上百度了好多都是在eclipse里面的解决方案,我是着实头大。

环境

IDEA
centos 7
hadoop 2.7.7
jdk1.8.0

报错

代码那些我就不贴了,网上很多。
先说一下,Hadoop1.x和Hadoop2.x的命令有所不同,Hadoop1.x命令是hadoop fs…,Hadoop2.x进入Hadoop目录,然后命令为bin/hdfs dfs …。
首先我是使用命令 hadoop jar word_count_class/wordCountTest.jar wordCountTest /input /output执行,但报错如下
wordCountTest是我的类名
Hadoop第一个程序wordcount命令运行jar包报错Usage: wordcount
然后参考这篇博文找到了问题所在http://blog.sina.com.cn/s/blog_548c08c80102wczf.html
在代码中有这么一段,如果输入参数不是两个,退出

            System.err.println("Usage: wordcount <in> <out>");
            System.exit(2);
        }

然后改成如下,打印输入参数

for(int i=0;i<otherArgs.length;i++){
            System.out.println(otherArgs[i]);
        }
        if (otherArgs.length != 2) {
            System.err.println("Usage: wordcount <in> <out>");
            System.exit(2);
        }

打印出输入参数后发现并不只有两个,如下
Hadoop第一个程序wordcount命令运行jar包报错Usage: wordcount
然后使用上篇博文的命令,打印出6个输入
Hadoop第一个程序wordcount命令运行jar包报错Usage: wordcount
这肯定不行啊,想了一下,留下最重要的两个参数,/input和/output,即命令如下

hadoop jar word_count_class/wordCountTest.jar /input /output

20/05/08 21:53:42 INFO Configuration.deprecation: session.id is deprecated. Instead, use dfs.metrics.session-id
20/05/08 21:53:42 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
20/05/08 21:53:44 INFO input.FileInputFormat: Total input paths to process : 2
20/05/08 21:53:44 INFO mapreduce.JobSubmitter: number of splits:2
20/05/08 21:53:44 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local1411492964_0001
20/05/08 21:53:45 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
20/05/08 21:53:45 INFO mapreduce.Job: Running job: job_local1411492964_0001
20/05/08 21:53:45 INFO mapred.LocalJobRunner: OutputCommitter set in config null
20/05/08 21:53:45 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
20/05/08 21:53:45 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
20/05/08 21:53:45 INFO mapred.LocalJobRunner: Waiting for map tasks
20/05/08 21:53:45 INFO mapred.LocalJobRunner: Starting task: attempt_local1411492964_0001_m_000000_0
20/05/08 21:53:45 INFO output.FileOutputCommitter: File Output Committer Algorithm version is 1
20/05/08 21:53:45 INFO mapred.Task:  Using ResourceCalculatorProcessTree : [ ]
20/05/08 21:53:45 INFO mapred.MapTask: Processing split: hdfs://hadoop1:9000/input/file1:0+69
20/05/08 21:53:46 INFO mapreduce.Job: Job job_local1411492964_0001 running in uber mode : false
20/05/08 21:53:46 INFO mapreduce.Job:  map 0% reduce 0%
20/05/08 21:53:47 INFO mapred.MapTask: (EQUATOR) 0 kvi 26214396(104857584)
20/05/08 21:53:47 INFO mapred.MapTask: mapreduce.task.io.sort.mb: 100
20/05/08 21:53:47 INFO mapred.MapTask: soft limit at 83886080
20/05/08 21:53:47 INFO mapred.MapTask: bufstart = 0; bufvoid = 104857600
20/05/08 21:53:47 INFO mapred.MapTask: kvstart = 26214396; length = 6553600
20/05/08 21:53:47 INFO mapred.MapTask: Map output collector class = org.apache.hadoop.mapred.MapTask$MapOutputBuffer
20/05/08 21:53:47 INFO mapred.LocalJobRunner: 
20/05/08 21:53:47 INFO mapred.MapTask: Starting flush of map output
............................
  

成功。
最后,如果运行时报错如下
Exception in thread "main" org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://hadoop1:9000/output already exists
Hadoop第一个程序wordcount命令运行jar包报错Usage: wordcount
这是由于在hdfs文件系统中已经存在output文件夹了,可以删除该文件夹,命令为bin/hdfs dfs -rm -r /output,然后再执行就可以了

相关标签: Java Hadoop