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

第一次使用命令运行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是我的类名
在这里插入图片描述
然后参考这篇博文找到了问题所在http://blog.sina.com.cn/s/blog_548c08c80102wczf.html
在代码中有这么一段,如果输入参数不是两个,退出

            System.err.println("Usage: wordcount  ");
            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  ");
            System.exit(2);
        }

打印出输入参数后发现并不只有两个,如下
在这里插入图片描述
然后使用上篇博文的命令,打印出6个输入
Hadoop第一个程序wordcount命令运行jar包报错Usage: wordcount_第1张图片
这肯定不行啊,想了一下,留下最重要的两个参数,/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_第2张图片
这是由于在hdfs文件系统中已经存在output文件夹了,可以删除该文件夹,命令为bin/hdfs dfs -rm -r /output,然后再执行就可以了

你可能感兴趣的:(Hadoop,Java)