2013-03-14 98 views
2

我試過這段代碼:顯示錯誤,同時運行WordCount.java

javac -verbose -classpath /var/root/hadoop-1.0.4/hadoop-1.0.4-core.jar WordCount.java -d /Users/amrita/desktop/hadoop/javatrail/wordcount_classes 

我只是得到了以下錯誤:

parsing started WordCount.java] 
[parsing completed 12ms] 
[search path for source files: /var/root/hadoop-1.0.4/hadoop-1.0.4-core.jar] 
[search path for class files: /System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsfd.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/classes.jar,/System/Library/Frameworks/JavaVM.framework/Frameworks/JavaRuntimeSupport.framework/Resources/Java/JavaRuntimeSupport.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/ui.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/laf.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/sunrsasign.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jsse.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/jce.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Classes/charsets.jar,/Library/Java/Extensions/RXTXcomm.jar,/System/Library/Java/Extensions/AppleScriptEngine.jar,/System/Library/Java/Extensions/dns_sd.jar,/System/Library/Java/Extensions/j3daudio.jar,/System/Library/Java/Extensions/j3dcore.jar,/System/Library/Java/Extensions/j3dutils.jar,/System/Library/Java/Extensions/jai_codec.jar,/System/Library/Java/Extensions/jai_core.jar,/System/Library/Java/Extensions/mlibwrapper_jai.jar,/System/Library/Java/Extensions/MRJToolkit.jar,/System/Library/Java/Extensions/QTJava.zip,/System/Library/Java/Extensions/vecmath.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/apple_provider.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/dnsns.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/localedata.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunjce_provider.jar,/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/lib/ext/sunpkcs11.jar,/var/root/hadoop-1.0.4/hadoop-1.0.4-core.jar] 
[loading java/io/IOException.class(java/io:IOException.class)] 
WordCount.java:5: package org.apache.hadoop.fs does not exist 
import org.apache.hadoop.fs.Path; 
         ^
WordCount.java:6: package org.apache.hadoop.conf does not exist 
import org.apache.hadoop.conf.*; 
^ 
WordCount.java:7: package org.apache.hadoop.io does not exist 
import org.apache.hadoop.io.*; 
^ 
WordCount.java:8: package org.apache.hadoop.mapred does not exist 
import org.apache.hadoop.mapred.*; 
^ 
WordCount.java:9: package org.apache.hadoop.util does not exist 
import org.apache.hadoop.util.*; 
^ 
[loading java/lang/Object.class(java/lang:Object.class)] 
[loading java/lang/String.class(java/lang:String.class)] 
[loading java/lang/Exception.class(java/lang:Exception.class)] 
WordCount.java:11: cannot find symbol 
symbol : class MapReduceBase 
location: class org.myorg.WordCount 
    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 
            ^
WordCount.java:11: cannot find symbol 
symbol : class Mapper 
location: class org.myorg.WordCount 
    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 
                  ^
WordCount.java:11: cannot find symbol 
symbol : class LongWritable 
location: class org.myorg.WordCount 
    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 
                    ^
    [total 406ms] 
48 errors 

有沒有在我的類路徑什麼問題? 如果是這樣,我怎麼才能得到正確的課程路徑? 我的WordCount.java位於/ Users/amrita/....和hadoop根目錄中,是否有任何特權問題? 我不能夠產生WordCount.class

源代碼:WordCount.java

package org.myorg; 
import java.io.IOException; 
import java.util.*; 

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 
public class WordCount { 
    public static class Map extends MapReduceBase implements Mapper<LongWritable, Text, Text, IntWritable> { 
     private final static IntWritable one = new IntWritable(1); 
     private Text word = new Text(); 
     public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { 
      String line = value.toString(); 
      StringTokenizer tokenizer = new StringTokenizer(line); 
      while (tokenizer.hasMoreTokens()) { 
       word.set(tokenizer.nextToken()); 
       output.collect(word, one); 
      } 
     } 
    } 
    public static class Reduce extends MapReduceBase implements Reducer<Text, IntWritable, Text, IntWritable> { 
     public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { 
      int sum = 0; 
      while (values.hasNext()) { 
       sum += values.next().get(); 
      } 
      output.collect(key, new IntWritable(sum)); 
     } 
    } 
    public static void main(String[] args) throws Exception { 
     JobConf conf = new JobConf(WordCount.class); 
     conf.setJobName("wordcount"); 
     conf.setOutputKeyClass(Text.class); 
     conf.setOutputValueClass(IntWritable.class); 
     conf.setMapperClass(Map.class); 
     conf.setCombinerClass(Reduce.class); 
     conf.setReducerClass(Reduce.class); 
     conf.setInputFormat(TextInputFormat.class); 
     conf.setOutputFormat(TextOutputFormat.class); 
     FileInputFormat.setInputPaths(conf, new Path(args[0])); 
     FileOutputFormat.setOutputPath(conf, new Path(args[1])); 
     JobClient.runJob(conf); 
    } 
} 
+0

作品。讓我看看你的源文件。 – user1050755 2013-03-14 06:11:07

+0

是的,我上傳了。 – 2013-03-14 08:34:38

+0

編譯得很好。 – user1050755 2013-03-14 12:13:41

回答

1

我已經創建了簡單的程序,其中進口的Hadoop類:

import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.conf.*; 
import org.apache.hadoop.io.*; 
import org.apache.hadoop.mapred.*; 
import org.apache.hadoop.util.*; 
public class WordCount { 
    public static void main(String args[]) { 
     System.out.println("test"); 
    } 
} 

,並使用該編譯它命令javac -classpath "C:\Users\user\Desktop\hadd2\*" WordCount.java。在目錄C:\Users\user\Desktop\hadd2\*我有* .jars從hadoop頁面(http://ftp.ps.pl/pub/apache/hadoop/common/stable/hadoop-1.0.4-bin.tar.gz)下載。應用程序編譯成功。

+0

我試過簡單的代碼。我再次收到錯誤包org.apache.hadoop.fs不存在 import org.apache.hadoop.fs.Path; ^ Trailjava.java:2:包org.apache.hadoop.conf不存在 import org.apache.hadoop.conf。*; ^ Trailjava.java:3:包org.apache.hadoop.io不存在 import org.apache.hadoop.io。*; ^ Trailjava.java:4:包org.apache.hadoop.mapred不存在 import org.apache.hadoop.mapred。*; ^ Trailjava.java:5:包org.apache.hadoop.util不存在 import org.apache.hadoop.util。*; ^ – 2013-03-14 08:36:51

+0

您是否正確指出了'-classpath'?你應該像'-classpath「dirWithJars \ *」'那樣傳遞它,其中'dirWithJars'是包含hadoop * .jar庫的目錄。 – pepuch 2013-03-14 09:24:48

+0

您使用的是有效的Java安裝嗎?嘗試「java -version」。你有讀取jar文件的權限嗎? – user1050755 2013-03-14 12:11:09

0

編譯器在這裏抱怨MapReduce類。 如果不在您的hadoop庫中,請檢查其類路徑或導入語句。

0

hduser @ Linux的:〜/ Hadoop的$ javac的-classpath /home/hduser/hadoop/hadoop-core-1.1.2.jar -d wordcount_classes WordCount.java

hduser @ Linux的:〜/ Hadoop的$

-1

[解決]

我用的是new hadoop api和PGM是在這裏old api