Korzystanie z technologii MapReduce na platformie Apache Hadoop w usłudze HDInsight

Dowiedz się, jak uruchamiać zadania MapReduce w klastrach usługi HDInsight.

Przykładowe dane

Usługa HDInsight udostępnia różne przykładowe zestawy danych, które są przechowywane w /example/data katalogu i /HdiSamples . Te katalogi znajdują się w domyślnym magazynie klastra. W tym dokumencie używamy /example/data/gutenberg/davinci.txt pliku. Ten plik zawiera notesy Leonardo da Vinci.

Przykład MapReduce

Przykładowa aplikacja MapReduce liczba wyrazów jest dołączona do klastra usługi HDInsight. Ten przykład znajduje się w lokalizacji w /example/jars/hadoop-mapreduce-examples.jar domyślnym magazynie klastra.

Następujący kod Java jest źródłem aplikacji MapReduce zawartej hadoop-mapreduce-examples.jar w pliku:

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

Aby uzyskać instrukcje dotyczące pisania własnych aplikacji MapReduce, zobacz Tworzenie aplikacji java MapReduce dla usługi HDInsight.

Uruchamianie MapReduce

Usługa HDInsight może uruchamiać zadania HiveQL przy użyciu różnych metod. Użyj poniższej tabeli, aby zdecydować, która metoda jest odpowiednia dla Ciebie, a następnie postępuj zgodnie z linkiem do przewodnika.

Użyj tego... ... w tym celu ... z tego systemu operacyjnego klienta
Protokół SSH Korzystanie z polecenia hadoop za pośrednictwem protokołu SSH Linux, Unix, Mac OS X lub Windows
Curl Zdalne przesyłanie zadania przy użyciu interfejsu REST Linux, Unix, Mac OS X lub Windows
Windows PowerShell Zdalne przesyłanie zadania przy użyciu Windows PowerShell Windows

Następne kroki

Aby dowiedzieć się więcej na temat pracy z danymi w usłudze HDInsight, zobacz następujące dokumenty: