【MapReduce篇01】MapReduce之入門概述(附思維導(dǎo)圖資料)

先知道是什么搞隐,再去了解為什么

MapReduce入門概述

MapReduce定義

MapReduce是一個基于Hadoop的分布式運算程序的編程框架

它的核心功能是將用戶編寫的業(yè)務(wù)邏輯代碼和自帶的組件組合成為一個完整的分布式運算程序,并發(fā)的運行在Hadoop集群上做祝。

MapReduce優(yōu)點

  • MapReduce易于編程:簡單的實現(xiàn)一些接口就可以實現(xiàn)分布式程序近尚,并且這個分布式程序可以分布到大量廉價的PC機器上執(zhí)行巫俺。
  • 良好的擴展性:加機器就可以增加計算能力
  • 高容錯性:所謂容錯就是當(dāng)系統(tǒng)中一臺機器故障時候,有一種機制可以將任務(wù)分配到新機器上然后繼續(xù)運行肿男,這個過程是不需要人工干涉的
  • 適合PB級上數(shù)據(jù)的離線處理:大數(shù)據(jù)的穩(wěn)定處理

MapReduce缺點

  • 不擅長實時計算:MapReduce不能像Mysql,在毫秒級或秒級返回結(jié)果
  • 不擅長流式計算:流式計算輸入數(shù)據(jù)是動態(tài)的却嗡,連續(xù)不斷的舶沛,但是MR處理的數(shù)據(jù)一定是靜態(tài)的,這是由設(shè)計決定的
  • 不擅長DAG計算:多個任務(wù)具有依賴關(guān)系窗价,后者輸入依賴前者輸出如庭,這種活MR不擅長,讀寫磁盤太多性能下降

MapReduce統(tǒng)計單詞過程

[圖片上傳失敗...(image-51ec82-1644239453599)]

默認(rèn)是按照128M進行數(shù)據(jù)切塊哦

在上圖進程一共有三種:

  • APPMaster:負責(zé)整個程序的過程調(diào)度和狀態(tài)協(xié)調(diào)

  • MapTask:負責(zé)Map階段的整個數(shù)據(jù)處理流程

  • ReduceTask:負責(zé)Reduce階段的整個數(shù)據(jù)處理流程

MapReduce編程套路

我們編寫的部分基本分為三個:Mapper撼港,Reducer和Driver

Map階段

(1)用戶自定義Mapper要繼承的父類

(2)Mapper的輸入數(shù)據(jù)格式是KV對

(3)Mapper中業(yè)務(wù)邏輯寫在map()方法中【map()對每個KV對調(diào)用一次】

(4)Mapper的輸出數(shù)據(jù)格式也是KV對

Reducer階段

(1)用戶自定義Reducer繼承自己的父類

(2)Reducer的輸入數(shù)據(jù)類型對應(yīng)Mapper的輸出數(shù)據(jù)類型坪它,也是KV

(3)Reduce業(yè)務(wù)邏輯寫在reduce()方法中【reduce()對每個KV對調(diào)用一次】

Driver階段

相當(dāng)于YARN集群的客戶端,等等程序?qū)懲甑勰担枰ㄟ^它把整個程序提交到Y(jié)ARN集群上

HELLO WORLD案例

需求

統(tǒng)計文件中單詞的出現(xiàn)的詞頻

Mapper代碼

public class WordcountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{
    
    Text k = new Text();
    IntWritable v = new IntWritable(1);
    
    @Override
    protected void map(LongWritable key, Text value, Context context)   throws IOException, InterruptedException {
        
        // 1 獲取一行
        String line = value.toString();
        
        // 2 切割
        String[] words = line.split(" ");
        
        // 3 輸出
        for (String word : words) {
            
            k.set(word);
            context.write(k, v);
        }
    }
}

Reducer階段

public class WordcountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{

int sum;
IntWritable v = new IntWritable();

    @Override
    protected void reduce(Text key, Iterable<IntWritable> values,
            Context context) throws IOException, InterruptedException {
        
        // 1 累加求和
        sum = 0;
        for (IntWritable count : values) {
            sum += count.get();
        }
        
        // 2 輸出
       v.set(sum);
        context.write(key,v);
    }
}

Driver驅(qū)動類

public class WordcountDriver {

    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {

// 輸入輸出路徑需要根據(jù)自己電腦上實際的輸入輸出路徑設(shè)置
// 注意這里是在win下跑往毡,如果放到集群上路徑需要更改
args = new String[] { "e:/input/inputword", "e:/output1" };

        // 1 獲取配置信息以及封裝任務(wù)
        Configuration configuration = new Configuration();
        Job job = Job.getInstance(configuration);

        // 2 設(shè)置jar加載路徑
        job.setJarByClass(WordcountDriver.class);

        // 3 設(shè)置map和reduce類
        job.setMapperClass(WordcountMapper.class);
        job.setReducerClass(WordcountReducer.class);

        // 4 設(shè)置map輸出
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);

        // 5 設(shè)置Reduce輸出
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        
        // 6 設(shè)置輸入和輸出路徑
        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));

        // 7 提交
        boolean result = job.waitForCompletion(true);

        System.exit(result ? 0 : 1);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市靶溜,隨后出現(xiàn)的幾起案子开瞭,更是在濱河造成了極大的恐慌,老刑警劉巖罩息,帶你破解...
    沈念sama閱讀 222,104評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件嗤详,死亡現(xiàn)場離奇詭異,居然都是意外死亡瓷炮,警方通過查閱死者的電腦和手機葱色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娘香,“玉大人苍狰,你說我怎么就攤上這事办龄。” “怎么了舞痰?”我有些...
    開封第一講書人閱讀 168,697評論 0 360
  • 文/不壞的土叔 我叫張陵土榴,是天一觀的道長。 經(jīng)常有香客問我响牛,道長玷禽,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,836評論 1 298
  • 正文 為了忘掉前任呀打,我火速辦了婚禮矢赁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘贬丛。我一直安慰自己撩银,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,851評論 6 397
  • 文/花漫 我一把揭開白布豺憔。 她就那樣靜靜地躺著额获,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恭应。 梳的紋絲不亂的頭發(fā)上抄邀,一...
    開封第一講書人閱讀 52,441評論 1 310
  • 那天,我揣著相機與錄音昼榛,去河邊找鬼境肾。 笑死,一個胖子當(dāng)著我的面吹牛胆屿,可吹牛的內(nèi)容都是我干的奥喻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,992評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼非迹,長吁一口氣:“原來是場噩夢啊……” “哼环鲤!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起憎兽,我...
    開封第一講書人閱讀 39,899評論 0 276
  • 序言:老撾萬榮一對情侶失蹤楔绞,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后唇兑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體酒朵,經(jīng)...
    沈念sama閱讀 46,457評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,529評論 3 341
  • 正文 我和宋清朗相戀三年扎附,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔫耽。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,664評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖匙铡,靈堂內(nèi)的尸體忽然破棺而出图甜,到底是詐尸還是另有隱情,我是刑警寧澤鳖眼,帶...
    沈念sama閱讀 36,346評論 5 350
  • 正文 年R本政府宣布黑毅,位于F島的核電站,受9級特大地震影響钦讳,放射性物質(zhì)發(fā)生泄漏矿瘦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,025評論 3 334
  • 文/蒙蒙 一愿卒、第九天 我趴在偏房一處隱蔽的房頂上張望缚去。 院中可真熱鬧,春花似錦琼开、人聲如沸易结。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,511評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽搞动。三九已至,卻和暖如春渣刷,著一層夾襖步出監(jiān)牢的瞬間滋尉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,611評論 1 272
  • 我被黑心中介騙來泰國打工飞主, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人高诺。 一個月前我還...
    沈念sama閱讀 49,081評論 3 377
  • 正文 我出身青樓碌识,卻偏偏與公主長得像,于是被迫代替她去往敵國和親虱而。 傳聞我的和親對象是個殘疾皇子筏餐,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,675評論 2 359

推薦閱讀更多精彩內(nèi)容

  • 上一篇:083-BigData-11HDFS目錄結(jié)構(gòu) 一、MapReduce入門 1牡拇、MapReduce定義 Ma...
    AncientMing閱讀 446評論 0 1
  • MapReduce定義 Mapreduce是一個分布式運算程序的編程框架惠呼,是用戶開發(fā)“基于hadoop的數(shù)據(jù)分析應(yīng)...
    ZFH__ZJ閱讀 363評論 0 2
  • MapReduce定義 MapReduce是一個分布式運算程序的編程框架导俘,是用戶開發(fā)“基于Hadoop的數(shù)據(jù)分析應(yīng)...
    Groundhog閱讀 213評論 0 0
  • 1. MapReduce概述 MapReduce是一個分布式計算的編程框架,是用戶開發(fā)“基于Hadoop的數(shù)據(jù)分析...
    Coding小聰閱讀 291評論 0 1
  • 第1章 MapReduce概述 1.1 MapReduce定義 MapReduce是一個分布式運算程序的編程框架剔蹋,...
    jackyan163閱讀 281評論 0 2