使用hadoop helloworld和非泛型迭代器的java版本配置

m4pnthwp  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(257)

我正在开发一个rhel intel集群,该集群已经安装了hadoop,并被其他用户大量使用和测试。我正在尝试学习如何使用这个框架,所以我从这里的教程开始:http://hadoop.apache.org/docs/r0.17.0/mapred_tutorial.html
因此,我将wordcount.java的源代码从上面的链接复制到~/hadooptest/,并按照编译说明进行了一些小的修改,以修复版本错误,下面是编译尝试的输出以及一些相关的系统信息。

[X@X hadooptest]$ pwd
/home/X/hadooptest
[X@X hadooptest]$ javac -version
Eclipse Java Compiler v_677_R32x, 3.2.1 release, Copyright IBM Corp 2000, 2006. All rights reserved.
[X@X 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)
[X@X 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
[X@X 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)[X@X hadooptest]$

我知道这个问题可能不是hadoop特有的,但我主要不是java用户。当我习惯使用hadoop的本机语言时,我可能会选择使用c++库(但这是另一天的故事)。我在google上搜索过这个问题,发现它通常表示使用1.4.x jre…我们也有:

[fraha1@intel06 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.
[fraha1@intel06 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\u配置文件设置为指向1.6JRE,但可能javac配置为仍然重定向到默认的1.4。我怎样才能解决这个问题?

yfjy0ee7

yfjy0ee71#

我想你的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 不是指向$javau 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

这应该管用。

相关问题