圖解MapReduceMapReduce整體流程圖

1.圖解MapReduceMapReduce整體流程圖

并行讀取文本中的內容,然后進行MapReduce操作

Map過程:并行讀取三行,對讀取的單詞進行map操作,每個詞都以<key,value>形式生成

reduce操作是對map的結果進行排序,合并,最后得出詞頻。

2.簡單過程:

Input:
Hello World Bye World
Hello Hadoop Bye Hadoop
Bye Hadoop Hello Hadoop
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>
Sort:
<Bye,1>
<Bye,1>
<Bye,1>
<Hadoop,1>
<Hadoop,1>
<Hadoop,1>
<Hadoop,1>
<Hello,1>
<Hello,1>
<Hello,1>
<World,1>
<World,1>
Combine:
<Bye,1,1,1>
<Hadoop,1,1,1,1>
<Hello,1,1,1>
<World,1,1>
Reduce:
<Bye,3>
<Hadoop,4>
<Hello,3>
<World,2>

MergeSort的過程(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 結果:<Hello,1><World,1> ||| <Bye,1> || <Hello,1><World,1> ||| <Hadoop,1> | <Bye,1><Hadoop,1> ||| <Bye,1> || <Hadoop,1><Hello,1> ||| <Hadoop,1> 在|||這一層級
  • MergeArray 結果:<Bye,1><Hello,1><World,1> || <Hadoop,1><Hello,1><World,1> | <Bye,1><Bye,1><Hadoop,1> || <Hadoop,1><Hadoop,1><Hello,1> 在||這一層級
  • MergeArray 結 果:<Bye,1><Hadoop,1><Hello,1><World,1><Hello,1><World,1> | <Bye,1><Bye,1><Hadoop,1><Hadoop,1><Hello,1><Hadoop,1> 在|這一層級
  • MergeArray結 果:<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.代碼實例:
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"); // 設置一個用戶定義的job名稱
? ? ? ? ? ? ? ?
? ? ? ? ? ? ? ? job.setOutputKeyClass(Text.class); // 為job的輸出數據設置Key類
? ? ? ? ? ? ? ? job.setOutputValueClass(LongWritable.class); // 為job輸出設置value類
? ? ? ? ? ? ? ? job.setMapperClass(Map.class); // 為job設置Mapper類
? ? ? ? ? ? ? ? job.setCombinerClass(Reduce.class); // 為job設置Combiner類
? ? ? ? ? ? ? ? job.setReducerClass(Reduce.class); // 為job設置Reduce類
? ? ? ? ? ? ? ?
? ? ? ?
? ? ? ? ? ? ? ?? ?? ?? ?? ?

? ? ? ? ? ? ? ? FileInputFormat.setInputPaths(job, new Path(args[0]));
? ? ? ? ? ? ? ? FileOutputFormat.setOutputPath(job, new Path(args[1]));
? ? ? ? ? ? ? ? job.waitForCompletion(true);
? ? ? ? }

}

轉載于:https://www.cnblogs.com/qiumingcheng/p/5396369.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/257372.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/257372.shtml
英文地址,請注明出處:http://en.pswp.cn/news/257372.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

阿里云推出CloudDBA,解決數據庫性能優化和問題診斷難題

問題診斷(trouble shooting) 和 性能優化(performance tunning) 一直都是數據庫領域的專業問題&#xff0c;需要資深DBA的專業技能才能勝任解決&#xff0c;但這樣的人才是稀缺的&#xff0c;無法及時滿足大部分的企業緊急需求。如果有一款產品能夠在大多數情況下&#xff0c;用…

c語言程序設計學生信息管理系統代碼,c語言程序設計學生成績管理系統源代碼.pdf...

c語言程序設計 學 生 成 績 管 理 系 統 源代碼#include#include#include#include#define MAX 80int a;typedef struct /*定義結構體數組*/{ char num[10];char name[20];int score;} Student;Student stu[MAX];int menu_select(){char c;do{system("cls");/*清屏*/p…

初探ArrayList之刪除

1.返回刪除元素的刪除方法 public E remove(int index) {rangeCheck(index);modCount;//記錄修改次數的變量E oldValue elementData(index);//根據數組下標拿到指定元素int numMoved size - index - 1;//計算移動位數if (numMoved > 0)System.arraycopy(elementData, inde…

UESTC_秋實大哥與花 2015 UESTC Training for Data StructuresProblem B

B - 秋實大哥與花 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit Status秋實大哥是一個儒雅之人&#xff0c;晝聽笙歌夜醉眠&#xff0c;若非月下即花前。 所以秋實大哥精心照料了很多花朵。現在所有的花朵排成了一行&#xff…

java的三大特性,封裝,繼承,多態

封裝 Java代碼 /** * 所謂封裝&#xff0c;就是將對象具有的成員變量和成員函數包裝和隱藏起來&#xff0c;讓外界無法直接使用&#xff0c; * 被封裝的成員只能通過某些特定的方式才能訪問。 * 實現封裝有兩個步驟&#xff1a; * 1、將不能暴露的成員隱藏起來&#x…

銀行家算法實驗報告c語言版,銀行家算法實驗報告C語言版.doc

《操作系統》課程綜合性實驗報告姓名&#xff1a; 學號&#xff1a; 2016 年 11 月 20 日實驗題目進程調度算法程序設計一、實驗目的通過對安全性算法和銀行家算法的模擬&#xff0c;進一步理解資源分配的基本概念&#xff0c;加深對資源申請&#xff0c;資源分配(銀行家算法)以…

GetModuleHandle(NULL)獲取當前DLL模塊基址?

做一項目想在DLL內部代碼實現獲取本DLL的模塊基址&#xff0c;而且不知道本DLL名稱 最簡單的方法是想到GetModuleHandle(NULL)&#xff0c;是否可以呢? 參看http://blog.csdn.net/guzhou_diaoke/article/details/8826558到的答案是否 自己嘗試了一下: DLL代碼(testDll): BOOL …

DataTable是否存在某個列的判斷

使用 DataTable.Columns.Contains方法可以判斷某個列名是否存在于某個DataTable中 //添加模擬數據 DataTable t new DataTable(); DataColumn col new DataColumn("aaa"); t.Columns.Add(col); col new DataColumn("bbb"); t.Columns.Add(col); col ne…

【評分】第三次作業-團隊展示

【評分】第三次作業-團隊展示 總結 【2017-10-10】更新&#xff1a; 分數映射至 [1,2] 分 【注意】&#xff1a; 為了保護大家隱私&#xff0c;以后發表博客&#xff1a; 涉及到學號時&#xff0c;僅提供后三位涉及到姓名時&#xff0c;僅提供名&#xff08;省略姓&#xff09;…

c語言變量為什么要定義,C語言為什么要規定對所用到的變量要“先定義,后使用”...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓int a10;以上一句話對變量a進行了聲明&#xff0c;定義以及初始化extern int a;以上一句話僅僅對變量a進行了聲明&#xff0c;將a的鏈接屬性設置為externalint *p;以上定義了一個指針int a10;int *p;p&a;以上為指針變量進行了賦…

iOS 開發--github的demo

令人驚訝的是&#xff0c;YYText 雖然代碼量很大&#xff08;超過一萬行&#xff09;&#xff0c;但它只是 ibireme 的作品之一。ibireme 利用業余時間完成了 YYKit 工具庫&#xff0c;包括&#xff1a; YYModel — 高性能的 iOS JSON 模型框架。 YYCache — 高性能的 iOS 緩存…

RabbitMQ快速安裝配置指南

RabbitMQ快速安裝配置指南 官網的安裝教程由于需要解釋原理很多廢話&#xff0c;這里總結一下在CentOS7環境下的安裝配置過程。如需理解原理&#xff0c;請看官網原文的安裝指南或翻譯1. 安裝RabbitMQ server ## 安裝epel源 yum install -y epel-release## 安裝Erlang yum inst…

[轉]基于Starling移動項目開發準備工作

最近自己趁業余時間做的flash小游戲已經開發得差不多了&#xff0c;準備再完善下ui及數值后&#xff0c;投放到國外flash游戲站。期間也萌生想法&#xff0c;想把游戲拓展到手機平臺。這兩天嘗試了下&#xff0c;除去要接入ane接口的工作&#xff0c;小游戲本身不用做任何改動就…

c語言float輸出分數,c語言同一題目求解結果用float和int輸出值差1.

c語言同一題目求解結果用float和int輸出值差1.答案:3 信息版本&#xff1a;手機版解決時間 2018-12-08 22:35已解決2018-12-08 05:38c語言同一題目求解結果用float和int輸出值差1.最佳答案2018-12-08 06:01試試這樣就好了#include main(){long i;float j,j1,j2,j4,j6,j10;j110…

《構建之法》閱讀筆記02

今天我閱讀了《構建之法》4-6章。有許多的感悟。 以前編程序總喜歡亂命名變量&#xff0c;覺得自己看的懂就行了。但讀完構建之法第四章。我知道了程序是給別人看的&#xff0c;然后那只是程序比較簡單而已。如果一個程序過于龐大&#xff0c;而變量的命名有沒有實際的意義&…

2017-10-03 前端日報

2017-10-03 前端日報 精選 你需要知道的幾類npm依賴包管理看Zepto如何實現增刪改查DOM把cookie聊清楚6 Pro Tips from React DevelopersMulti-user experiences with A-Frameclintonwoo/hackernews-react-graphql: Hacker News clone rewritten with universal JavaScript, usi…

【樸靈評注】JavaScript 運行機制詳解:再談Event Loop

PS: 我先旁觀下大師們的討論&#xff0c;得多看書了~別人說的&#xff1a;“看了一下不覺得評注對到哪里去&#xff0c;只有吹毛求疵之感。 比如同步異步介紹&#xff0c;本來就無大錯&#xff1b;比如node圖里面的OS operation&#xff0c;推敲一下就可以猜到那是指同步操作&a…

c語言 strcpy原型,淺談C語言中strcpy,strcmp,strlen,strcat函數原型

實例如下&#xff1a;//strcat(dest,src)把src所指字符串添加到dest結尾處(覆蓋dest結尾處的\0)并添加\0char *strcat(char * strDest, const char *strSrc){char *resstrDest;assert((strDest!NULL)&&(strSrc!NULL));while(*strDest)strDest;while(*strDest*strSrc){s…

angular——更多按鈕的上拉菜單(路由跳轉)

<button class"btn gray_text_btn list_item" ng-click"action.toMoreOptions()"><i class"icon ion-navicon"></i> </button> <!-------------------- 底部按鈕 -----------------------><section class&qu…

Python版——博客網站四 編寫日志創建頁

2019獨角獸企業重金招聘Python工程師標準>>> 開源地址&#xff1a;https://github.com/leebingbin/Python3.WebAPP.Blog 單從編碼來說&#xff0c;WebApp開發真正困難的地方在于編寫前端頁面。前端頁面需要混合HTML、CSS和JavaScript&#xff0c;如果對這三者沒有深…