Partilhar via


Utilizar o MapReduce no Apache Hadoop no HDInsight

Saiba como executar trabalhos do MapReduce em clusters HDInsight.

Dados de exemplo

O HDInsight fornece vários conjuntos de dados de exemplo, que são armazenados no /example/data diretório e /HdiSamples . Esses diretórios estão no armazenamento padrão do cluster. Neste documento, usamos o /example/data/gutenberg/davinci.txt arquivo. Este ficheiro contém os blocos de notas do Leonardo da Vinci.

Exemplo MapReduce

Um exemplo de aplicativo de contagem de palavras MapReduce está incluído no cluster HDInsight. Este exemplo está localizado em /example/jars/hadoop-mapreduce-examples.jar no armazenamento padrão do cluster.

O seguinte código Java é a fonte do aplicativo MapReduce contido no hadoop-mapreduce-examples.jar arquivo:

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

Para obter instruções sobre como escrever seus próprios aplicativos MapReduce, consulte Desenvolver aplicativos Java MapReduce para HDInsight.

Executar o MapReduce

O HDInsight pode executar trabalhos do HiveQL usando vários métodos. Use a tabela a seguir para decidir qual método é certo para você e, em seguida, siga o link para uma explicação passo a passo.

Use este... ... para fazer isso ... a partir deste sistema operativo cliente
CHS Usar o comando Hadoop por SSH Linux, MacOS XUnix ou Windows
Cachos Enviar o trabalho remotamente usando REST Linux, MacOS XUnix ou Windows
Windows PowerShell Enviar o trabalho remotamente usando o Windows PowerShell Windows

Próximos passos

Para saber mais sobre como trabalhar com dados no HDInsight, consulte os seguintes documentos: