MapReduce gebruiken in Apache Hadoop in HDInsight

Meer informatie over het uitvoeren van MapReduce-taken op HDInsight-clusters.

Voorbeeldgegevens

HDInsight biedt verschillende voorbeeldgegevenssets, die zijn opgeslagen in de map en /HdiSamples in de /example/data map. Deze mappen bevinden zich in de standaardopslag voor uw cluster. In dit document gebruiken we het /example/data/gutenberg/davinci.txt bestand. Dit bestand bevat de notebooks van Leonardo da Vinci.

Voorbeeld van MapReduce

Een voorbeeld van een MapReduce-toepassing voor het tellen van woorden is opgenomen in uw HDInsight-cluster. Dit voorbeeld bevindt zich in /example/jars/hadoop-mapreduce-examples.jar de standaardopslag voor uw cluster.

De volgende Java-code is de bron van de MapReduce-toepassing in het hadoop-mapreduce-examples.jar bestand:

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);
    }
}

Zie Java MapReduce-toepassingen ontwikkelen voor HDInsight voor instructies voor het schrijven van uw eigen MapReduce-toepassingen.

De MapReduce uitvoeren

HDInsight kan HiveQL-taken uitvoeren met behulp van verschillende methoden. Gebruik de volgende tabel om te bepalen welke methode geschikt is voor u en volg vervolgens de koppeling voor een overzicht.

Gebruik deze... ... om dit te doen ... van dit clientbesturingssysteem
SSH De Hadoop-opdracht via SSH gebruiken Linux, Unix of MacOS XWindows
Curl De taak op afstand verzenden met rest Linux, Unix of MacOS XWindows
Windows PowerShell De taak extern verzenden met Behulp van Windows PowerShell Vensters

Volgende stappen

Zie de volgende documenten voor meer informatie over het werken met gegevens in HDInsight: