gpt4 book ai didi

java - 从另一个 Java 程序运行 Hadoop 作业

转载 作者:可可西里 更新时间:2023-11-01 14:47:39 25 4
gpt4 key购买 nike

我正在编写一个程序来接收映射器/缩减器的源代码,动态编译映射器/缩减器并从中生成一个 JAR 文件。然后它必须在 hadoop 集群上运行这个 JAR 文件。

对于最后一部分,我通过我的代码动态设置了所有必需的参数。但是,我现在面临的问题是代码在编译时需要编译的mapper和reducer类。但是在编译时,我没有这些类,它们稍后会在运行时接收(例如,通过从远程节点接收到的消息)。如果有任何关于如何解决此问题的想法/建议,我将不胜感激?

在下面,您可以找到我最后一部分的代码,问题在于 job.setMapperClass(Mapper_Class.class) 和 job.setReducerClass(Reducer_Class.class) 需要类(Mapper_Class.class 和 Reducer_Class.class)文件编译时在场:

    private boolean run_Hadoop_Job(String className){
try{
System.out.println("Starting to run the code on Hadoop...");
String[] argsTemp = { "project_test/input", "project_test/output" };
// create a configuration
Configuration conf = new Configuration();
conf.set("fs.default.name", "hdfs://localhost:54310");
conf.set("mapred.job.tracker", "localhost:54311");
conf.set("mapred.jar", jar_Output_Folder+ java.io.File.separator
+ className+".jar");
conf.set("mapreduce.map.class", "Mapper_Reducer_Classes$Mapper_Class.class");
conf.set("mapreduce.reduce.class", "Mapper_Reducer_Classes$Reducer_Class.class");
// create a new job based on the configuration
Job job = new Job(conf, "Hadoop Example for dynamically and programmatically compiling-running a job");
job.setJarByClass(Platform.class);
//job.setMapperClass(Mapper_Class.class);
//job.setReducerClass(Reducer_Class.class);

// key/value of your reducer output
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);

FileInputFormat.addInputPath(job, new Path(argsTemp[0]));
// this deletes possible output paths to prevent job failures
FileSystem fs = FileSystem.get(conf);
Path out = new Path(argsTemp[1]);
fs.delete(out, true);
// finally set the empty out path
FileOutputFormat.setOutputPath(job, new Path(argsTemp[1]));

//job.submit();
System.exit(job.waitForCompletion(true) ? 0 : 1);
System.out.println("Job Finished!");
} catch (Exception e) { return false; }
return true;
}

修改:所以我修改了代码以使用 conf.set("mapreduce.map.class, "my mapper.class") 指定映射器和缩减器。现在代码编译正确但在执行时抛出以下内容错误:

ec 24, 2012 6:49:43 AM org.apache.hadoop.mapred.JobClient monitorAndPrintJob信息:任务 ID:attempt_201212240511_0006_m_000001_2,状态:失败java.lang.RuntimeException:java.lang.ClassNotFoundException:Mapper_Reducer_Classes$Mapper_Class.class 在 org.apache.hadoop.conf.Configuration.getClass(Configuration.java:809) 在 org.apache.hadoop.mapreduce.JobContext.getMapperClass(JobContext.java:157) 在 org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:569) 在 org.apache.hadoop.mapred.MapTask.run(MapTask.java:305) 在 org.apache.hadoop.mapred.Child.main(Child.java:170)

最佳答案

如果编译时没有,那么直接在配置中这样设置名称:

conf.set("mapreduce.map.class", "org.what.ever.ClassName");
conf.set("mapreduce.reduce.class", "org.what.ever.ClassName");

关于java - 从另一个 Java 程序运行 Hadoop 作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14011279/

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