Använda MapReduce i Apache Hadoop på HDInsight

Lär dig hur du kör MapReduce-jobb på HDInsight-kluster.

Exempeldata

HDInsight tillhandahåller olika exempeldatauppsättningar som lagras i /example/data katalogen och /HdiSamples . Dessa kataloger finns i standardlagringsplatsen för klustret. I det här dokumentet använder vi /example/data/gutenberg/davinci.txt filen . Den här filen innehåller notebook-filer för Thea Da/Sd.

MapReduce-exempel

Ett exempel på ett MapReduce-ordräkningsprogram ingår i ditt HDInsight-kluster. Det här exemplet finns på /example/jars/hadoop-mapreduce-examples.jar på standardlagringsplatsen för klustret.

Följande Java-kod är källan för MapReduce-programmet som finns i hadoop-mapreduce-examples.jar filen:

package org.apache.hadoop.examples;

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;
import org.apache.hadoop.util.GenericOptionsParser;

public class WordCount {

    public static class TokenizerMapper
        extends Mapper<Object, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
        StringTokenizer itr = new StringTokenizer(value.toString());
        while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
        }
    }
    }

    public static class IntSumReducer
        extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values,
                        Context context
                        ) throws IOException, InterruptedException {
        int sum = 0;
        for (IntWritable val : values) {
        sum += val.get();
        }
        result.set(sum);
        context.write(key, result);
    }
    }

    public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
    if (otherArgs.length != 2) {
        System.err.println("Usage: wordcount <in> <out>");
        System.exit(2);
    }
    Job job = new Job(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
    FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
    }
}

Instruktioner för att skriva egna MapReduce-program finns i Utveckla Java MapReduce-program för HDInsight.

Kör MapReduce

HDInsight kan köra HiveQL-jobb med hjälp av olika metoder. Använd följande tabell för att avgöra vilken metod som är rätt för dig och följ sedan länken för en genomgång.

Använd den här... ... för att göra detta ... från det här klientoperativsystemet
SSH Använda Hadoop-kommandot via SSH Linux, Unix, Mac OS X eller Windows
Curl Skicka jobbet via fjärrlagring med hjälp av REST Linux, Unix, Mac OS X eller Windows
Windows PowerShell Skicka jobbet via fjärrstyrning med hjälp av Windows PowerShell Windows

Nästa steg

Mer information om hur du arbetar med data i HDInsight finns i följande dokument: