图解MapReduceMapReduce整体流程图
1.圖解MapReduceMapReduce整體流程圖
并行讀取文本中的內(nèi)容,然后進(jìn)行MapReduce操作
Map過(guò)程:并行讀取三行,對(duì)讀取的單詞進(jìn)行map操作,每個(gè)詞都以<key,value>形式生成
reduce操作是對(duì)map的結(jié)果進(jìn)行排序,合并,最后得出詞頻。
2.簡(jiǎn)單過(guò)程:
MergeSort的過(guò)程(ps:2012-10-18)Map:
<Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1><Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>
MergeSort:
- <Hello,1><World,1><Bye,1><World,1><Hello,1><Hadoop,1> | <Bye,1><Hadoop,1><Bye,1><Hadoop,1><Hello,1><Hadoop,1>
- <Hello,1><World,1><Bye,1> || <World,1><Hello,1><Hadoop,1> | <Bye,1><Hadoop,1><Bye,1> || <Hadoop,1><Hello,1><Hadoop,1>
- <Hello,1><World,1> ||| <Bye,1> || <World,1><Hello,1> ||| <Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> || <Hadoop,1><Hello,1> ||| <Hadoop,1>
- MergeArray 結(jié)果:<Hello,1><World,1> ||| <Bye,1> || <Hello,1><World,1> ||| <Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> || <Hadoop,1><Hello,1> ||| <Hadoop,1> 在|||這一層級(jí)
- MergeArray 結(jié)果:<Bye,1><Hello,1><World,1> || <Hadoop,1><Hello,1><World,1> | <Bye,1><Bye,1><Hadoop,1> || <Hadoop,1><Hadoop,1><Hello,1> 在||這一層級(jí)
- MergeArray 結(jié) 果:<Bye,1><Hadoop,1><Hello,1><World,1><Hello,1><World,1> | <Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hello,1><Hadoop,1> 在|這一層級(jí)
- MergeArray結(jié) 果:<Bye,1><Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hadoop,1><Hadoop,1><Hello,1><Hello,1><Hello,1><World,1><World,1> 排序完成
3.代碼實(shí)例:
package cn.opensv.hadoop.ch1;
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.LongWritable;
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;
/**
* Hello world!
*
*/
public class WordCount1 {
? ? ? ? public static class Map extends? ? ? ? Mapper<LongWritable, Text, Text, LongWritable> {
? ? ? ?
? ? ? ? ? ? ? ? private final static LongWritable one = new LongWritable(1);
? ? ? ? ? ? ? ? private Text word = new Text();
? ? ? ?
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void map(LongWritable key, Text value, Context context)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? throws IOException, InterruptedException {
? ? ? ? ? ? ? ? ? ? ? ? String line = value.toString();
? ? ? ? ? ? ? ? ? ? ? ? StringTokenizer tokenizer = new StringTokenizer(line);
? ? ? ? ? ? ? ? ? ? ? ? while (tokenizer.hasMoreTokens()) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? word.set(tokenizer.nextToken());
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? context.write(word, one);
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public static class Reduce extends Reducer<Text, LongWritable, Text, LongWritable> {
? ? ? ? ? ? ? ? @Override
? ? ? ? ? ? ? ? public void reduce(Text key, Iterable<LongWritable> values, Context context)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? throws IOException, InterruptedException {
? ? ? ? ? ? ? ? ? ? ? ? long sum = 0;
? ? ? ? ? ? ? ? ? ? ? ? for (LongWritable val : values)??{
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? sum += val.get();
? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ? context.write(key, new LongWritable(sum));
? ? ? ? ? ? ? ? }
? ? ? ? }
? ? ? ? public static void main(String[] args) throws Exception {
? ? ? ?
? ? ? ? ? ? ? ? Configuration cfg = new Configuration();
? ? ? ? ? ? ? ???Job job = new Job(cfg);? ?? ?? ?
? ? ? ? ? ? ? ???job.setJarByClass(WordCount1.class);? ?
? ? ? ? ? ? ? ? job.setJobName("wordcount1"); // 設(shè)置一個(gè)用戶定義的job名稱
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? job.setOutputKeyClass(Text.class); // 為job的輸出數(shù)據(jù)設(shè)置Key類
? ? ? ? ? ? ? ? job.setOutputValueClass(LongWritable.class); // 為job輸出設(shè)置value類
? ? ? ? ? ? ? ? job.setMapperClass(Map.class); // 為job設(shè)置Mapper類
? ? ? ? ? ? ? ? job.setCombinerClass(Reduce.class); // 為job設(shè)置Combiner類
? ? ? ? ? ? ? ? job.setReducerClass(Reduce.class); // 為job設(shè)置Reduce類
? ? ? ? ? ? ? ?
? ? ? ?
? ? ? ? ? ? ? ?? ?? ?? ?? ?
? ? ? ? ? ? ? ? FileInputFormat.setInputPaths(job, new Path(args[0]));
? ? ? ? ? ? ? ? FileOutputFormat.setOutputPath(job, new Path(args[1]));
? ? ? ? ? ? ? ? job.waitForCompletion(true);
? ? ? ? }
}
轉(zhuǎn)載于:https://www.cnblogs.com/qiumingcheng/p/5396369.html
總結(jié)
以上是生活随笔為你收集整理的图解MapReduceMapReduce整体流程图的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 易建联代言 OPPO Watch 3系列
- 下一篇: java的三大特性,封装,继承,多态