hadoop版本的不兼容性

hadoop版本的不兼容性,hadoop,mapreduce,Hadoop,Mapreduce,我在Hadoop 0.20.2版本上开发了一个带有reduce-side-join的MapReduce。所有java类编译时都没有任何错误。我的程序可以正常工作。但是这个版本的hadoop在测试虚拟机上。 在我真正的集群上,我有另一个版本的hadoop(hadoop 2.00-cdh4.1.2)。当我想编译java类时,它不起作用。我得到100个错误,如下所示: JoinMapper.java:8: package org.apache.hadoop.filecache does not exi

我在Hadoop 0.20.2版本上开发了一个带有reduce-side-join的MapReduce。所有java类编译时都没有任何错误。我的程序可以正常工作。但是这个版本的hadoop在测试虚拟机上。 在我真正的集群上,我有另一个版本的hadoop(hadoop 2.00-cdh4.1.2)。当我想编译java类时,它不起作用。我得到100个错误,如下所示:

JoinMapper.java:8: package org.apache.hadoop.filecache does not exist
import org.apache.hadoop.filecache.DistributedCache;
                                  ^
JoinMapper.java:9: package org.apache.hadoop.fs does not exist
import org.apache.hadoop.fs.Path;
                           ^
JoinMapper.java:10: package org.apache.hadoop.io does not exist
import org.apache.hadoop.io.Text;
                           ^
JoinMapper.java:11: package org.apache.hadoop.io does not exist
import org.apache.hadoop.io.*;
^
JoinMapper.java:12: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.FileInputFormat;
                               ^
JoinMapper.java:13: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.FileOutputFormat;
                               ^
JoinMapper.java:14: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.InputFormat;
                               ^
JoinMapper.java:15: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.JobClient;
                               ^
JoinMapper.java:16: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.JobConf;
                               ^
JoinMapper.java:17: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.MapReduceBase;
                               ^
JoinMapper.java:18: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.Mapper;
                               ^
JoinMapper.java:19: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.OutputCollector;
                               ^
JoinMapper.java:20: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.Reporter;
                               ^
JoinMapper.java:21: package org.apache.hadoop.mapred does not exist
import org.apache.hadoop.mapred.TextOutputFormat;
                               ^
JoinMapper.java:22: package org.apache.hadoop.mapreduce.lib.input does not exist
import org.apache.hadoop.mapreduce.lib.input.MultipleInputs;
                                            ^
JoinMapper.java:23: package org.apache.hadoop.util does not exist
import org.apache.hadoop.util.Tool;
                             ^
JoinMapper.java:24: package org.apache.hadoop.util does not exist
import org.apache.hadoop.util.ToolRunner;
                             ^
JoinMapper.java:26: cannot find symbol
symbol: class MapReduceBase
public class JoinMapper extends MapReduceBase implements Mapper<LongWritable, Text, TextPair, Text> {
                                ^
JoinMapper.java:26: cannot find symbol
symbol: class Mapper
public class JoinMapper extends MapReduceBase implements Mapper<LongWritable, Text, TextPair, Text> {
                                                         ^
JoinMapper.java:26: cannot find symbol
symbol: class LongWritable
public class JoinMapper extends MapReduceBase implements Mapper<LongWritable, Text, TextPair, Text> {
                                                                ^
JoinMapper.java:26: cannot find symbol
symbol: class Text
public class JoinMapper extends MapReduceBase implements Mapper<LongWritable, Text, TextPair, Text> {
                                                                              ^
TextPair.java:2: package org.apache.hadoop.io does not exist
import org.apache.hadoop.io.*;
^
TextPair.java:4: cannot find symbol
symbol: class WritableComparable
public class TextPair implements WritableComparable<TextPair> {
                                 ^
TextPair.java:4: interface expected here
public class TextPair implements WritableComparable<TextPair> {
                                                   ^
JoinMapper.java:26: cannot find symbol
symbol: class Text
public class JoinMapper extends MapReduceBase implements Mapper<LongWritable, Text, TextPair, Text> {
                                                                                              ^
JoinMapper.java:26: interface expected here
public class JoinMapper extends MapReduceBase implements Mapper<LongWritable, Text, TextPair, Text> {
                                                               ^
NcdcRecordParser.java:2: package org.apache.hadoop.io does not exist
import org.apache.hadoop.io.*;   
JoinMapper.java:8:package org.apache.hadoop.filecache不存在
导入org.apache.hadoop.filecache.DistributedCache;
^
java:9:package org.apache.hadoop.fs不存在
导入org.apache.hadoop.fs.Path;
^
java:10:package org.apache.hadoop.io不存在
导入org.apache.hadoop.io.Text;
^
java:11:package org.apache.hadoop.io不存在
导入org.apache.hadoop.io.*;
^
java:12:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.FileInputFormat;
^
java:13:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.FileOutputFormat;
^
java:14:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.InputFormat;
^
java:15:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.JobClient;
^
java:16:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.JobConf;
^
java:17:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.MapReduceBase;
^
java:18:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.Mapper;
^
java:19:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.OutputCollector;
^
java:20:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.Reporter;
^
java:21:package org.apache.hadoop.mapred不存在
导入org.apache.hadoop.mapred.TextOutputFormat;
^
java:22:package org.apache.hadoop.mapreduce.lib.input不存在
导入org.apache.hadoop.mapreduce.lib.input.MultipleInputs;
^
java:23:package org.apache.hadoop.util不存在
导入org.apache.hadoop.util.Tool;
^
java:24:package org.apache.hadoop.util不存在
导入org.apache.hadoop.util.ToolRunner;
^
JoinMapper.java:26:找不到符号
符号:类MapReduceBase
公共类JoinMapper扩展MapReduceBase实现Mapper{
^
JoinMapper.java:26:找不到符号
符号:类映射器
公共类JoinMapper扩展MapReduceBase实现Mapper{
^
JoinMapper.java:26:找不到符号
符号:可长写类
公共类JoinMapper扩展MapReduceBase实现Mapper{
^
JoinMapper.java:26:找不到符号
符号:类文本
公共类JoinMapper扩展MapReduceBase实现Mapper{
^
TextPair.java:2:package org.apache.hadoop.io不存在
导入org.apache.hadoop.io.*;
^
TextPair.java:4:找不到符号
符号:类可写可比
公共类TextPair实现了writeablecompare{
^
java:4:此处需要接口
公共类TextPair实现了writeablecompare{
^
JoinMapper.java:26:找不到符号
符号:类文本
公共类JoinMapper扩展MapReduceBase实现Mapper{
^
java:26:此处需要接口
公共类JoinMapper扩展MapReduceBase实现Mapper{
^
NcdcRecordParser.java:2:package org.apache.hadoop.io不存在
导入org.apache.hadoop.io.*;

我知道这个版本没有我需要的软件包。但我不知道如何解决我的问题。有人能帮我吗?

试试maven的param-Dhadoop.profile=23。另外,请看我所知的,这些java软件包应该仍然存在于最新版本的Hadoop中

我认为您的问题是hadoop JAR不在您的类路径中。当我尝试编译没有它们的map reduce项目时,我会遇到类似的错误

如果您使用的是javac,请尝试类似的方法(这将使用我的Ubuntu CDH4开发机器上的路径位置):


Apache Hadoop在0.20和0.23之间对其内部包(也称为2.0.0)进行了重大的重新命名。这包括将
org.Apache.Hadoop.mapred
重命名为
org.Apache.Hadoop.mapreduce

Hadoop的Cloudera发行版有单独的Maven工件,您可以依赖这些工件使用旧版本进行构建。工件的名称列在上;您希望工件的版本
2.0.0-mr1-cdh4.1.2


有关是否要移植到较新的API的详细信息,请参见。

类路径中已经有哪些JAR?您是如何编译的?(Maven,什么工具?如果是,您使用什么依赖项来尝试使用2.00进行编译?)谢谢..我昨天也是这样做的。
javac -classpath /usr/lib/hadoop/*:/usr/lib/hadoop-0.20-mapreduce/*:/usr/lib/hadoop-hdfs/* JoinMapper.java TextPair.java NcdcRecordParser.java