gpt4 book ai didi

java - 从单独的驱动程序类运行MapReduce作业

转载 作者:行者123 更新时间:2023-12-02 21:40:55 26 4
gpt4 key购买 nike

我编写了一个小的MapReduce作业,该作业可以从单个文件中很好地工作。我现在需要做的(对于一个类)是从一个单独的类中驱动相同的MapReduce作业。我在下面解释。

有效的方法:

public class Count {

public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{
do mapping stuff
}

public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
do reducing stuff
}

public static void main(String[] args) throws Exception {
runs the MR job perfectly!
}

我需要做什么:
// ===================== NB_train_hadoop.java =====================
public class NB_train_hadoop {

public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{
do mapping stuff
}

public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> {
do reducing stuff
}



// =========================== run.java ===========================
public class run {

public static void main(String[] args) throws Exception {

Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "Run NB Count");
// Job job = New Job(conf, "Run NB Count");

job.setJarByClass(NB_train_hadoop.class);
job.setMapperClass(NB_train_hadoop.TokenizerMapper.class);
job.setCombinerClass(NB_train_hadoop.IntSumReducer.class);
job.setReducerClass(NB_train_hadoop.IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
}

当我运行它时,我在线程“main” java.lang.NoClassDefFoundError中得到了 异​​常:NB_train_hadoop $ TokenizerMapper
在run.main(run.java:19)
错误。这指向我的run.java中的setMapperClass行,但是我不明白为什么要得到它。这些类对于包中的其他任何类都应该可见。

如果有帮助,这就是我编译,jar和运行MR作业的方式。在第三个命令之前没有错误。
>>> bin/hadoop com.sun.tools.javac.Main NB_train_hadoop.java run.java
>>> jar cvf run.jar run.class
>>> bin/hadoop jar run.jar run /user/nbcount/input /user/nbcount/output3

任何关于为什么发生这种情况的建议都很棒!

最佳答案

您必须在主程序或驱动程序中指定主类或驱动程序类的软件包信息。
您可以使用以下命令正确执行Map reduce Job:

 >hadoop jar <Location_of_your_JAR> <package_information_of_the_driver_class> <input_directory> <output_directory>

例如:例如:
hadoop jar /user/desktop/wordcount.jar com.example.wordcount_driver /user/cloudera/Dataset/input.txt / user / cloudera / output

如果解决方案有效,请接受!

关于java - 从单独的驱动程序类运行MapReduce作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28796283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com