2012-12-18 16 views
0

我正在使用已經安裝了hadoop並被其他用戶嚴重使用和測試的RHEL Intel羣集。我試圖學習使用該框架,所以我從這裏開始教程:http://hadoop.apache.org/docs/r0.17.0/mapred_tutorial.html使用Hadoop helloworld和非泛型Iterator的Java版本配置

所以,我將WordCount.java的源代碼從上面的鏈接複製到〜/ hadooptest /中,然後按照編譯時會稍微修改一下版本錯誤,這裏是編譯嘗試的輸出以及一些相關的系統信息。

[[email protected] hadooptest]$ pwd 
/home/X/hadooptest 
[[email protected] hadooptest]$ javac -version 
Eclipse Java Compiler v_677_R32x, 3.2.1 release, Copyright IBM Corp 2000, 2006. All rights reserved. 
[[email protected] hadooptest]$ $JAVA_HOME/bin/java -version 
java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 
[[email protected] hadooptest]$ hadoop version 
Hadoop 0.20.2-cdh3u5 
Subversion file:///data/1/tmp/topdir/BUILD/hadoop-0.20.2-cdh3u5 -r 30233064aaf5f2492bc687d61d72956876102109 
Compiled by root on Fri Oct 5 18:45:42 PDT 2012 
From source with checksum de1770d69aa93107a133657faa8ef467 
[[email protected] hadooptest]$ javac -source 5.0 -classpath /usr/lib/hadoop-1.0.1/hadoop-core-1.0.1.jar -d wordcount_classes/ WordCount.java 
---------- 
1. ERROR in WordCount.java (at line 0) 
    package org.myorg; 
    ^
The type Iterator is not generic; it cannot be parameterized with arguments <V2> 
---------- 
2. ERROR in WordCount.java (at line 29) 
    public void reduce(Text key, Iterator<IntWritable> values, OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException { 
           ^^^^^^^^ 
The type Iterator is not generic; it cannot be parameterized with arguments <IntWritable> 
---------- 
2 problems (2 errors)[[email protected] hadooptest]$ 

我知道這個問題可能並不是Hadoop特有的,但我主要不是Java用戶。當我習慣使用Hadoop的母語進行操作時,我可能會選擇切換到使用C++庫(但這是另一天的故事)。我用Google搜索這個問題,我覺得這是典型的指示使用1.4.X JRE ......,我們也做的有:

[[email protected] hadooptest]$ java -version 
java version "1.4.2" 
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-48) 

Copyright (C) 2006 Free Software Foundation, Inc. 
This is free software; see the source for copying conditions. There is NO 
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
[[email protected] hadooptest]$ $JAVA_HOME/bin/java -version 
java version "1.6.0_24" 
Java(TM) SE Runtime Environment (build 1.6.0_24-b07) 
Java HotSpot(TM) 64-Bit Server VM (build 19.1-b02, mixed mode) 

我已經建立了在〜/ .bash_profile直接到1.6 JRE,但大概javac被配置爲仍然重定向到默認的1.4。我怎樣才能解決這個問題?

+0

因此,您正在編譯Java5並在Java4 JVM上運行?爲什麼不從示例jar中獲取wordcount示例? –

+0

@ThomasJungblut,當你說我正在運行一個Java4 JVM時,你是說基於'gij(GNU libgcj)版本4.1.2 20080704(Red Hat 4.1.2-48)'''的行嗎?當我真正運行它時,我將使用$ JAVA_HOME中定義的1.6 JRE。就這個例子而言,你指的是什麼罐子? Mine與我鏈接到的網站上發佈的源代碼完全相同。 –

回答

1

我認爲你對Java環境配置感到混亂。

如果在系統中安裝了命令alternatives(如果沒有安裝它),則可以輕鬆地處理不同的Java安裝。只需輸入:

$ alternatives --config java 

    Selection Command 
----------------------------------------------- 
    1   /usr/java/jdk1.6.0_25/bin/java 
* 2   /usr/lib/jvm/jre-1.6.0-openjdk/bin/java 
+ 3   /usr/lib/jvm/jre-1.5.0-gcj/bin/java 

並選擇默認運行哪個java。

這解決了java問題。

然後您的javac未指向$ JAVA_HOME/bin/javac。嘗試編譯該示例爲:

$ $JAVA_HOME/bin/javac -source 5.0 \ 
-classpath /usr/lib/hadoop-1.0.1/hadoop-core-1.0.1.jar \ 
-d wordcount_classes/ WordCount.java 

這應該有效。