1

Hadoop ジョブを実行すると取得ClassNotFoundExceptionされます (新しい API - 1.0.3)。Main静的MapClassReduceClassネストされたクラスを含むクラスがあります。

ジョブを次のように構成します。

    Job job = new Job();

    job.setJarByClass(Main.class);
    job.setJobName("My Job");

    job.setMapperClass(Main.MapClass.class);
    job.setReducerClass(Main.ReduceClass.class);

主なクラスは次のとおりです。

public class Main {
    //Nested static Mapper
public static class MapClass extends Mapper<Text, Text, Text, Text> {

    @Override
    public void map(Text key, Text value, Context context) {
            ...
    }
}

    // Nested static Reducer
public static class ReduceClass extends Reducer<Text, Text, Text, Text> {

    @Override
    public void reduce(Text key, Iterable<Text> values, Context context) {
        ...
    }
}

Eclipseが作成するプロジェクトからjarをエクスポートしませんでした。プロジェクトフォルダーのディレクトリMain.classMain$MapClass.classMain$ReduceClass.classファイルはbin、クラスパスの一部である必要があります。ただし、ジョブは Mapper クラスを見つけることができません:

java.lang.RuntimeException: java.lang.ClassNotFoundException: MapClass
at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:867)
at org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:199)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:719)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:370)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:416)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121)
at org.apache.hadoop.mapred.Child.main(Child.java:249)

何が問題ですか?

4

2 に答える 2

2

プロジェクトの jar ファイルをエクスポートしてみてください。次に、この jar を次のコマンドで使用します。

hadoop jar "jar name" package.subpackage.DriverClass [-conf configXML] 
inputDir outputDir

Driver クラスは MainClass です。conf オプションはオプションですが、推奨されており、特定の構成オプションを設定するファイルを指定します。

于 2012-07-21T07:51:20.100 に答える
0

Eclipse で Java アプリケーションとして実行している場合、Eclipse は必要なすべてのファイル、つまりHadoop をMapper出荷しません。ReducerEclipse Plugin for Hadoop を使用して、Eclipse から直接 Hadoop でアプリケーションを実行します。

于 2013-12-31T23:59:00.663 に答える