Verwenden von MapReduce mit Apache Hadoop in HDInsightUse MapReduce in Apache Hadoop on HDInsight

Erfahren Sie, wie MapReduce-Aufträge in HDInsight-Clustern ausgeführt werden.Learn how to run MapReduce jobs on HDInsight clusters.

BeispieldatenExample data

HDInsight enthält verschiedene Beispieldatasets, die in den Verzeichnissen /example/data und /HdiSamples gespeichert sind.HDInsight provides various example data sets, which are stored in the /example/data and /HdiSamples directory. Diese Verzeichnisse befinden sich im Standardspeicher für den Cluster.These directories are in the default storage for your cluster. In diesem Artikel wird die Datei /example/data/gutenberg/davinci.txt verwendet.In this document, we use the /example/data/gutenberg/davinci.txt file. Diese Datei enthält die Notizbücher von Leonardo da Vinci.This file contains the notebooks of Leonardo da Vinci.

MapReduce-BeispielExample MapReduce

Eine MapReduce-Beispielanwendung zum Zählen von Wörtern ist in Ihrem HDInsight-Cluster enthalten.An example MapReduce word count application is included with your HDInsight cluster. Dieses Beispiel befindet sich unter /example/jars/hadoop-mapreduce-examples.jar im Standardspeicher für Ihren Cluster.This example is located at /example/jars/hadoop-mapreduce-examples.jar on the default storage for your cluster.

Der folgende Java-Code ist die Quelle der in der Datei hadoop-mapreduce-examples.jar enthaltenen MapReduce-Anwendung:The following Java code is the source of the MapReduce application contained in the hadoop-mapreduce-examples.jar file:

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

Anweisungen zum Schreiben eigener MapReduce-Anwendungen finden Sie unter Entwickeln von Java MapReduce-Anwendungen für HDInsight.For instructions to write your own MapReduce applications, see Develop Java MapReduce applications for HDInsight.

Ausführen von MapReduceRun the MapReduce

HDInsight kann HiveQL-Aufträge mithilfe verschiedener Methoden ausführen.HDInsight can run HiveQL jobs by using various methods. Die folgende Tabelle hilft Ihnen bei der Entscheidung, welche Methode für Sie geeignet ist. Folgen Sie anschließend dem Link für eine exemplarische Vorgehensweise.Use the following table to decide which method is right for you, then follow the link for a walkthrough.

OptionUse this... Zweck...to do this ...von diesem Clusterbetriebssystem...from this client operating system
SSHSSH Verwenden des Hadoop-Befehls über SSHUse the Hadoop command through SSH Linux, Unix, Mac OS X oder WindowsLinux, Unix, Mac OS X, or Windows
CurlCurl Remoteübermittlung des Auftrags mit RESTSubmit the job remotely by using REST Linux, Unix, Mac OS X oder WindowsLinux, Unix, Mac OS X, or Windows
Windows PowerShellWindows PowerShell Remoteübermittlung des Auftrags mit Windows PowerShellSubmit the job remotely by using Windows PowerShell WindowsWindows

Nächste SchritteNext steps

Weitere Informationen zum Arbeiten mit Daten in HDInsight finden Sie in den folgenden Artikeln:To learn more about working with data in HDInsight, see the following documents: