HDInsight üzerinde Apache Hadoop ile MapReduce'u kullanma

HDInsight kümelerinde MapReduce işlerini çalıştırmayı öğrenin.

Örnek veriler

HDInsight, ve /HdiSamples dizininde /example/data depolanan çeşitli örnek veri kümeleri sağlar. Bu dizinler kümeniz için varsayılan depolama alanındadır. Bu belgede dosyasını kullanacağız /example/data/gutenberg/davinci.txt . Bu dosya, Leonardo da Vinci'nin not defterlerini içerir.

Örnek MapReduce

HDInsight kümenize örnek bir MapReduce sözcük sayısı uygulaması eklenmiştir. Bu örnek, kümeniz için varsayılan depolamada bulunur /example/jars/hadoop-mapreduce-examples.jar .

Aşağıdaki Java kodu, dosyada bulunan MapReduce uygulamasının hadoop-mapreduce-examples.jar kaynağıdır:

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

Kendi MapReduce uygulamalarınızı yazma yönergeleri için bkz. HDInsight için Java MapReduce uygulamaları geliştirme.

MapReduce'u çalıştırma

HDInsight, çeşitli yöntemleri kullanarak HiveQL işlerini çalıştırabilir. Hangi yöntemin sizin için doğru olduğuna karar vermek için aşağıdaki tabloyu kullanın, ardından izlenecek yol için bağlantıyı izleyin.

Bunu kullan... ... bunu yapmak için ... bu istemci işletim sisteminden
SSH SSH aracılığıyla Hadoop komutunu kullanma Linux, Unix, Mac OS X veya Windows
Curl REST kullanarak işi uzaktan gönderme Linux, Unix, Mac OS X veya Windows
Windows PowerShell Windows PowerShell kullanarak işi uzaktan gönderme Windows

Sonraki adımlar

HDInsight'ta verilerle çalışma hakkında daha fazla bilgi edinmek için aşağıdaki belgelere bakın: