Sdílet prostřednictvím


Použití MapReduce v Apache Hadoopu ve službě HDInsight

Naučte se spouštět úlohy MapReduce v clusterech HDInsight.

Příklad dat

HDInsight poskytuje různé ukázkové datové sady, které jsou uložené v adresáři a /HdiSamples v adresáři/example/data. Tyto adresáře jsou ve výchozím úložišti vašeho clusteru. V tomto dokumentu použijeme /example/data/gutenberg/davinci.txt soubor. Tento soubor obsahuje poznámkové bloky .Leonardo da Vinci

Příklad MapReduce

Ukázková aplikace MapReduce pro počet slov je součástí vašeho clusteru HDInsight. Tento příklad se nachází ve /example/jars/hadoop-mapreduce-examples.jar výchozím úložišti vašeho clusteru.

Následující kód Java je zdrojem aplikace MapReduce obsažené v hadoop-mapreduce-examples.jar souboru:

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

Pokyny k psaní vlastních aplikací MapReduce najdete v tématu Vývoj aplikací Java MapReduce pro HDInsight.

Spuštění MapReduce

HDInsight může spouštět úlohy HiveQL pomocí různých metod. V následující tabulce se můžete rozhodnout, která metoda je pro vás nejvhodnější, a pak postupujte podle odkazu pro názorný postup.

Použít... ... to provedete ... z tohoto klientského operačního systému
SSH Použití příkazu Hadoop prostřednictvím SSH Linux, Unix nebo macOS XWindows
Kudrna Vzdálené odeslání úlohy pomocí REST Linux, Unix nebo macOS XWindows
Windows PowerShell Vzdálené odeslání úlohy pomocí Prostředí Windows PowerShell Windows

Další kroky

Další informace o práci s daty ve službě HDInsight najdete v následujících dokumentech: