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: