4

VMwareのubuntu 12.04の単一ノード環境でhadoop wordcountの例を実行しています。私はこのように例を実行しています:--

hadoop@master:~/hadoop$ hadoop jar hadoop-examples-1.0.4.jar wordcount    
/home/hadoop/gutenberg/ /home/hadoop/gutenberg-output

以下の場所に入力ファイルがあります:

/home/hadoop/gutenberg

出力ファイルの場所は次のとおりです。

    /home/hadoop/gutenberg-output

wordcount プログラムを実行すると、次のエラーが表示されます:--

 13/04/18 06:02:10 INFO mapred.JobClient: Cleaning up the staging area     
hdfs://localhost:54310/home/hadoop/tmp/mapred/staging/hadoop/.staging/job_201304180554_0001       
13/04/18 06:02:10 ERROR security.UserGroupInformation: PriviledgedActionException       
as:hadoop cause:org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory 
/home/hadoop/gutenberg-output already exists 
org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory 
/home/hadoop/gutenberg-output already exists at 

org.apache.hadoop.mapreduce.lib.output.FileOutputFormat.checkOutputSpecs(FileOutputFormat.j 
ava:137) at org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:887) at 
org.apache.hadoop.mapred.JobClient$2.run(JobClient.java:850) at 
java.security.AccessController.doPrivileged(Native Method) at 
javax.security.auth.Subject.doAs(Subject.java:416) at 
org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) at   
org.apache.hadoop.mapred.JobClient.submitJobInternal(JobClient.java:850) at  
org.apache.hadoop.mapreduce.Job.submit(Job.java:500) at  
org.apache.hadoop.mapreduce.Job.waitForCompletion(Job.java:530) at 
org.apache.hadoop.examples.WordCount.main(WordCount.java:67) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) at 
org.apache.hadoop.util.ProgramDriver$ProgramDescription.invoke(ProgramDriver.java:68) 
at org.apache.hadoop.util.ProgramDriver.driver(ProgramDriver.java:139) at 
org.apache.hadoop.examples.ExampleDriver.main(ExampleDriver.java:64) at 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:616) at   
org.apache.hadoop.util.RunJar.main(RunJar.java:156) hadoop@master:~/hadoop$ bin/stop-
all.sh Warning: $HADOOP_HOME is deprecated. stopping jobtracker localhost: stopping   
tasktracker stopping namenode localhost: stopping datanode localhost: stopping 
secondarynamenode    hadoop@master:~/hadoop$
4

4 に答える 4

9

既に存在する出力ファイルを削除するか、別のファイルに出力してください。

(あなたが考えたエラーメッセージの他の解釈に少し興味があります。)

于 2013-04-18T14:00:34.960 に答える
2

Dave (および例外) が言ったように、出力ディレクトリは既に存在します。次を使用して、別のディレクトリに出力するか、既存のディレクトリを最初に削除する必要があります。

hadoop fs -rmr /home/hadoop/gutenberg-output
于 2013-04-19T01:38:12.907 に答える
2

独自の .jar を作成して実行しようとしている場合は、注意してください。

ジョブを実行するには、次のように記述しておく必要があります。

hadoop jar <jar-path> <package-path> <input-in-hdfs-path> <output-in-hdfs-path>

しかし、ドライバー コードを詳しく見てみると、入力としても出力としても設定さarg[0]arg[1]れていることがわかります。それを示します。

FileInputFormart.addInputPath(conf, new Path(args[0]));
FileOutFormart.setOutputPath(conf, new Path(args[1]));

しかし、hadoop はarg[0] を<package-path>代わりに<input-in-hdfs-path>、 arg[1] を<input-in-hdfs-path>代わりに取っています。<output-in-hdfs-path>

したがって、それを機能させるには、次を使用する必要があります。

FileInputFormart.addInputPath(conf, new Path(args[1]));
FileOutFormart.setOutputPath(conf, new Path(args[2]));

arg[1]とを使用するとarg[2]、正しいものが取得されます。:)それが役に立てば幸いです。乾杯。

于 2015-08-07T20:13:40.813 に答える