2016-04-08 4 views
1

maxtempmapper.java Klasse:Lauf MR-Programm mit separaten Mapper, Druckminderer und Treiberklassen

package com.hadoop.gskCodeBase.maxTemp; 

import java.io.IOException; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.LongWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Mapper; 


public class MaxTempMapper extends Mapper<LongWritable,Text,Text,IntWritable> { 
    private static final int MISSING=9999; 

    @Override 
    public void map(LongWritable kay,Text value,Context context) throws IOException,InterruptedException { 
     String line = value.toString(); 
     String year = line.substring(15,19); 
     int airTemperature; 
     if(line.charAt(87)== '+'){ 
      airTemperature=Integer.parseInt(line.substring(88, 92)); 
     }else{ 
      airTemperature=Integer.parseInt(line.substring(87, 92)); 
     } 
     String quality=line.substring(92,93); 
     if(airTemperature !=MISSING && quality.matches("[01459]")){ 
      context.write(new Text(year), new IntWritable(airTemperature)); 
     } 
    } 

} 

maxtempreducer.java Klasse:

package com.hadoop.gskCodeBase.maxTemp; 

import java.io.IOException; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Reducer; 



public class MaxTempReducer extends Reducer<Text,IntWritable,Text,IntWritable> { 

    @Override 
    public void reduce(Text key,Iterable<IntWritable> values,Context context) throws IOException,InterruptedException { 
     int maxValue = Integer.MIN_VALUE; 
     for(IntWritable value : values){ 
      maxValue=Math.max(maxValue, value.get()); 
     } 
     context.write(key, new IntWritable(maxValue)); 
    } 

} 

maxtempdriver.java Klasse:

package com.hadoop.gskCodeBase.maxTemp; 

import org.apache.hadoop.conf.Configured; 
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.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.util.Tool; 
import org.apache.hadoop.util.ToolRunner; 


public class MaxTempDriver extends Configured implements Tool{ 
    public int run(String[] args) throws Exception{ 
     if(args.length !=2){ 
      System.err.println("UsageTemperatureDriver <input path> <outputpath>"); 
      System.exit(-1); 
     } 

     Job job = Job.getInstance(); 
     job.setJarByClass(MaxTempDriver.class); 
     job.setJobName("Max Temperature"); 

     FileInputFormat.addInputPath(job, new Path(args[0])); 
     FileOutputFormat.setOutputPath(job,new Path(args[1])); 

     job.setMapperClass(MaxTempMapper.class); 
     job.setReducerClass(MaxTempReducer.class); 

     job.setOutputKeyClass(Text.class); 
     job.setOutputValueClass(IntWritable.class); 

     System.exit(job.waitForCompletion(true) ? 0:1); 
     boolean success = job.waitForCompletion(true); 
     return success ? 0 : 1; 
    } 

    public static void main(String[] args) throws Exception { 
     MaxTempDriver driver = new MaxTempDriver(); 
     int exitCode = ToolRunner.run(driver, args); 
     System.exit(exitCode); 
     } 


} 

Ich muss die oben genannten drei Klassen auf einzelnen Knoten Hadoop Cluster auf Windows mit der Eingabeaufforderungausführenkann mir bitte jemand helfen, wie man diese drei Klassen an der Eingabeaufforderung (Windows) ausführt?

Antwort

0

Archivieren Sie alle Java-Dateien in einer einzelnen .jar-Datei. Führen Sie es dann wie gewohnt aus. Unter Windows ist es einfacher, Hadoop über das Cygwin-Terminal auszuführen. Sie können den Auftrag durch den folgenden Befehl ausführen:

hadoop jar <path to .jar> <path to input folder in hdfs> <path to output folder in hdfs> 

ZB:

hadoop jar wordcount.jar /input /output 

-UPDATE-

  1. Sie sollten Sie Treiber Klasse der job.setJarByClass zuweisen (). In diesem Fall wäre es Ihre MaxTempDriver.class

  2. In Eclipse können Sie eine JAR-Datei erstellen, indem Sie mit der rechten Maustaste auf Ihren Quellordner> Export> JAR-Datei. Von dort können Sie den Schritten folgen. Sie können Ihre Hauptklasse auch während des Prozesses einstellen.

Hoffe das beantwortet Ihre Frage.

+0

Also welchen Klassennamen sollte ich in der job.setJarByClass() angeben? Kannst du auch erklären, wie ich alle Java Mapper, Reducer und Treiber in einem Jar mit eclipse archiviere? @mfmz –

+0

Ich habe die Antwort aktualisiert. – mfmz