Dela via


Använda MapReduce i Apache Hadoop på HDInsight

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

Exempeldata

HDInsight innehåller olika exempeldatauppsättningar som lagras i /example/data katalogen och /HdiSamples . Dessa kataloger finns i standardlagringen för klustret. I det här dokumentet använder /example/data/gutenberg/davinci.txt vi filen. Den här filen innehåller notebook-filerna Leonardo da Vincii .

Exempel på MapReduce

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

Följande Java-kod är källan till 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 bestämma 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 MacOS Xeller Windows
Curl Skicka jobbet via fjärranslutning med hjälp av REST Linux, Unix MacOS Xeller Windows
Windows PowerShell Skicka jobbet via fjärranslutning 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: