Ich versuche, einen MapReduce-Job auf Oozie laufen, aber es ist fehlgeschlagen und wird getötet. Der Fehler wird auch nicht in der Oozie-Konsole angezeigt und gibt nur die Fehlermeldung "Map/Reduce fehlgeschlagen, Fehlermeldung []". Wo kann ich auch die Protokolle finden, wird es den genauen Fehler enthalten. Ich bin neu und habe keine Ahnung, was falsch ist. Bitte sagen Sie mir, was mit den untenstehenden Codes nicht stimmt. Damit leide ich nun seit zwei Tagen.Running MapReduce Job in Oozie
Dies ist mein MapReduce-Programm.
package com.hadoop.mapreduce;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class AnalysePatientRecords {
public static class SampleMap extends Mapper<LongWritable, Text, Text, Text> {
public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
String line = value.toString();
String[] lineElements = line.split("\\|",-1);
Text state = new Text(lineElements[11]);
Text patientId = new Text(lineElements[0]);
context.write(state, patientId);
}
}
public static class SampleReduce extends Reducer<Text, Text, Text, IntWritable> {
@SuppressWarnings("unused")
public void reduce(Text value, Iterable<Text> values, Context context)
throws IOException, InterruptedException {
int count = 0;
for (Text val : values) {
count = count + 1;
}
context.write(value, new IntWritable(count));
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, "patient analysis");
job.setJarByClass(AnalysePatientRecords.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
job.setMapperClass(SampleMap.class);
job.setReducerClass(SampleReduce.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);
}
}
job.properties
nameNode=hdfs://localhost:54310
jobTracker=localhost:8032
queueName=default
examplesRoot=MapReduce
oozie.libpath=${nameNode}/user/${user.name}/share/lib
oozie.use.system.libpath=true
oozie.wf.application.path=${nameNode}/user/${user.name}/${examplesRoot}/apps/map-reduce/workflow.xml
outputDir=map-reduce
workflow.xml
<workflow-app xmlns="uri:oozie:workflow:0.2" name="map-reduce-wf">
<start to="mr-node"/>
<action name="mr-node">
<map-reduce>
<job-tracker>${jobTracker}</job-tracker>
<name-node>${nameNode}</name-node>
<prepare>
<delete path="${nameNode}/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}"/>
</prepare>
<configuration>
<property>
<name>mapred.mapper.new-api</name>
<value>true</value>
</property>
<property>
<name>mapred.reducer.new-api</name>
<value>true</value>
</property>
<property>
<name>mapred.job.queue.name</name>
<value>${queueName}</value>
</property>
<property>
<name>mapreduce.map.class</name>
<value>AnalysePatientRecords$SampleMap</value>
</property>
<property>
<name>mapreduce.reduce.class</name>
<value>AnalysePatientRecords$SampleReduce</value>
</property>
<property>
<name>mapred.mapoutput.key.class</name>
<value>org.apache.hadoop.io.Text</value>
</property>
<property>
<name>mapred.mapoutput.value.class</name>
<value>org.apache.hadoop.io.Text</value>
</property>
<property>
<name>mapred.output.key.class</name>
<value>org.apache.hadoop.io.Text</value>
</property>
<property>
<name>mapred.output.value.class</name>
<value>org.apache.hadoop.io.IntWritable</value>
</property>
<property>
<name>mapred.map.tasks</name>
<value>1</value>
</property>
<property>
<name>mapred.input.dir</name>
<value>/user/${wf:user()}/${examplesRoot}/input-data/text</value>
</property>
<property>
<name>mapred.output.dir</name>
<value>/user/${wf:user()}/${examplesRoot}/output-data/${outputDir}</value>
</property>
</configuration>
</map-reduce>
<ok to="end"/>
<error to="fail"/>
</action>
<kill name="fail">
<message>Map/Reduce failed, error message[${wf:errorMessage(wf:lastErrorNode())}]</message>
</kill>
<end name="end"/>
</workflow-app>
Ich habe auch das Glas des oben MapReduce Programm erwähnt und stellte sie in den Ordner lib. Ich weiß nicht, was falsch ist, bitte hilf mir dabei. Bitte ...
Jeder weiß es, bitte helfen. – karthi
Haben Sie das Oozie-Launcher-Jobprotokoll überprüft? Oozie startet einen Mapper-Job, der einen MR für die eigentliche Arbeit startet. Überprüfen Sie die Launcher-Jobprotokolle. – YoungHobbit