3

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.*;   

このバージョンには必要なパッケージがないことを理解しています。しかし、私は自分の問題を解決する方法がわかりません。誰でも私を助けることができますか?

4

3 に答える 3

2

私が知る限り、これらの Java パッケージは最新バージョンの Hadoop にまだ存在しているはずです。

問題は、hadoop jar がクラスパスにないことだと思います。これらを使用せずに map reduce プロジェクトをコンパイルしようとすると、同様のエラーが発生します。

javac を使用している場合は、次のようにしてみてください (これは、私の Ubuntu CDH4 開発マシンのパスの場所を使用します)。

javac -classpath /usr/lib/hadoop/*:/usr/lib/hadoop-0.20-mapreduce/*:/usr/lib/hadoop-hdfs/* JoinMapper.java TextPair.java NcdcRecordParser.java
于 2012-12-26T17:59:23.020 に答える
1

Apache Hadoop は、0.20 から 0.23 (2.0.0 とも呼ばれています) の間で内部パッケージの名前を大幅に変更しました。これには、org.apache.hadoop.mapredへの名前変更が含まれorg.apache.hadoop.mapreduceます。

Hadoop の Cloudera ディストリビューションには、古いバージョンでビルドするために依存できる個別の Maven アーティファクトがあります。アーティファクトの名前は、CDH4 Maven ページにリストされています。version のアーティファクトが必要です2.0.0-mr1-cdh4.1.2

Hadoop ジョブを作成するには、mapred または mapreduce パッケージを使用する方が良いですか?も参照してください。新しい API に移植するかどうかの詳細については、

于 2012-12-26T18:48:46.537 に答える
0

maven の param -Dhadoop.profile=23 を試してください。また、https://issues.apache.org/jira/browse/HBASE-4327?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13098596 #comment-13098596 を参照してください。

于 2012-12-26T17:46:01.033 に答える