搭配 MapReduce 與 HDInsight 上的 Apache Hadoop

瞭解如何在 HDInsight 叢集上執行 MapReduce 作業。

範例數據

HDInsight 提供儲存在 /example/data/HdiSamples 目錄中的各種範例數據集。 這些目錄位於叢集的預設記憶體中。 在本檔中,我們使用 /example/data/gutenberg/davinci.txt 檔案。 此檔案包含的 Leonardo da Vinci筆記本。

範例 MapReduce

HDInsight 叢集隨附 MapReduce 字數計數應用程式範例。 此範例位於 /example/jars/hadoop-mapreduce-examples.jar 叢集的預設記憶體上。

下列 Java 程式代碼是檔案中包含的 hadoop-mapreduce-examples.jar MapReduce 應用程式來源:

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

如需撰寫您自己的 MapReduce 應用程式的指示,請參閱 開發適用於 HDInsight 的 Java MapReduce 應用程式。

執行 MapReduce

HDInsight 可以使用各種方法來執行HiveQL作業。 使用下表來決定哪一種方法適合您,然後遵循逐步解說的連結。

請使用此項目... ...若要這樣做 ...來自此 用戶端作業系統
SSH 透過 SSH 使用 Hadoop 命令 Linux、Unix、 MacOS X或 Windows
捲曲 使用 REST 從遠端提交作業 Linux、Unix、 MacOS X或 Windows
Windows PowerShell 使用 Windows PowerShell 從遠端提交作業 Windows

下一步

若要深入瞭解如何在 HDInsight 中使用數據,請參閱下列檔: