i am Trying to create a Map Reduce Java job for calculating avg Tempature
import java.io.IOException;
import java.util.Iterator;
import java.util.StringTokenizer;
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.mapred.JobClient;
import org.apache.hadoop.mapred.JobConf;
import org.apache.hadoop.mapred.OutputCollector;
import org.apache.hadoop.mapred.MapReduceBase;
import org.apache.hadoop.mapred.Reporter;
import org.apache.hadoop.mapred.TextInputFormat;
import org.apache.hadoop.mapred.TextOutputFormat;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.util.StringUtils;
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
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 TotalViews
{
public class AvgTempatureMapper extends Mapper<LongWritable ,Text, Text, IntWritable >{
private Text word = new Text();
public void map(LongWritable key, Text value, OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
String[] line=value.toString().split(",");
String datePart =line[1];
String temp = line[3];
if (1==1 ) ////StringUtils.isNumeric(temp))
output.collect(new Text(datePart), new IntWritable(Integer.parseInt(temp)));
}
}
public class AvgTempatureReducer extends Reducer <Text, IntWritable , Text, IntWritable >
{
public void reduce(Text key, Iterator<IntWritable> values,
OutputCollector<Text, IntWritable> output, Reporter reporter)
throws IOException {
int sumTemps=0;
int numItems = 0;
while(values.hasNext() )
{
sumTemps+=values.next().get();
numItems+=1;
}
/* get average temp */
output.collect(key, new IntWritable( sumTemps/ numItems ) ) ;
}
}
public static void main(String[] args) throws Exception
{
Configuration conf = new Configuration();
Job job = Job.getInstance(conf, " total view");
job.setJarByClass(TotalViews.class);
job.setMapperClass(AvgTempatureMapper.class);
/// job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(AvgTempatureReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.setInputPaths(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
System.exit(job.waitForCompletion(true) ? 0 : 1);
}
this is the job above .
the file looks like that :
20150101,1234, 50
20150102,1234, 50
20130101,1234, 50
201502101,1234, 50
20150101,1234, 100
the Job is starting to run , but fails and i cant figure it out why
15/06/01 10:13:45 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
15/06/01 10:13:45 WARN conf.Configuration: session.id is deprecated. Instead, use dfs.metrics.session-id
15/06/01 10:13:45 INFO jvm.JvmMetrics: Initializing JVM Metrics with processName=JobTracker, sessionId=
15/06/01 10:13:46 WARN mapreduce.JobSubmitter: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same.
15/06/01 10:13:46 WARN mapreduce.JobSubmitter: No job jar file set. User classes may not be found. See Job or Job#setJar(String).
15/06/01 10:13:46 INFO input.FileInputFormat: Total input paths to process : 2
15/06/01 10:13:46 INFO mapreduce.JobSubmitter: number of splits:2
15/06/01 10:13:46 WARN conf.Configuration: mapred.output.value.class is deprecated. Instead, use mapreduce.job.output.value.class
15/06/01 10:13:46 WARN conf.Configuration: mapreduce.map.class is deprecated. Instead, use mapreduce.job.map.class
15/06/01 10:13:46 WARN conf.Configuration: mapred.job.name is deprecated. Instead, use mapreduce.job.name
15/06/01 10:13:46 WARN conf.Configuration: mapreduce.reduce.class is deprecated. Instead, use mapreduce.job.reduce.class
15/06/01 10:13:46 WARN conf.Configuration: mapred.input.dir is deprecated. Instead, use mapreduce.input.fileinputformat.inputdir
15/06/01 10:13:46 WARN conf.Configuration: mapred.output.dir is deprecated. Instead, use mapreduce.output.fileoutputformat.outputdir
15/06/01 10:13:46 WARN conf.Configuration: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
15/06/01 10:13:46 WARN conf.Configuration: mapred.output.key.class is deprecated. Instead, use mapreduce.job.output.key.class
15/06/01 10:13:46 WARN conf.Configuration: mapred.working.dir is deprecated. Instead, use mapreduce.job.working.dir
15/06/01 10:13:46 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_local1693859654_0001
15/06/01 10:13:47 INFO mapreduce.Job: The url to track the job: http://localhost:8080/
15/06/01 10:13:47 INFO mapreduce.Job: Running job: job_local1693859654_0001
15/06/01 10:13:47 INFO mapred.LocalJobRunner: OutputCommitter set in config null
15/06/01 10:13:47 INFO mapred.LocalJobRunner: OutputCommitter is org.apache.hadoop.mapreduce.lib.output.FileOutputCommitter
15/06/01 10:13:47 INFO mapred.LocalJobRunner: Waiting for map tasks
15/06/01 10:13:47 INFO mapred.LocalJobRunner: Starting task: attempt_local1693859654_0001_m_000000_0
15/06/01 10:13:47 INFO mapred.Task: Using ResourceCalculatorProcessTree : [ ]
15/06/01 10:13:47 INFO mapred.LocalJobRunner: Starting task: attempt_local1693859654_0001_m_000001_0
15/06/01 10:13:47 INFO mapred.Task: Using ResourceCalculatorProcessTree : [ ]
15/06/01 10:13:47 INFO mapred.LocalJobRunner: Map task executor complete.
15/06/01 10:13:47 WARN mapred.LocalJobRunner: job_local1693859654_0001
java.lang.Exception: java.lang.RuntimeException: java.lang.NoSuchMethodException: TotalViews$AvgTempatureMapper.<init>()
at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:401)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodException: TotalViews$AvgTempatureMapper.<init>()
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:131)
at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:715)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:338)
at org.apache.hadoop.mapred.LocalJobRunner$Job$MapTaskRunnable.run(LocalJobRunner.java:233)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:441)
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
at java.util.concurrent.FutureTask.run(FutureTask.java:138)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:662)
Caused by: java.lang.NoSuchMethodException: TotalViews$AvgTempatureMapper.<init>()
at java.lang.Class.getConstructor0(Class.java:2706)
at java.lang.Class.getDeclaredConstructor(Class.java:1985)
at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:125)
... 9 more
15/06/01 10:13:48 INFO mapreduce.Job: Job job_local1693859654_0001 running in uber mode : false
15/06/01 10:13:48 INFO mapreduce.Job: map 0% reduce 0%
15/06/01 10:13:48 INFO mapreduce.Job: Job job_local1693859654_0001 failed with state FAILED due to: NA
15/06/01 10:13:48 INFO mapreduce.Job: Counters: 0
Can anyone help me ? please .