小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Hadoop學(xué)習(xí)之路

 HK123COM 2019-02-14

目錄

 

正文

MapReduce是什么

首先讓我們來(lái)重溫一下 hadoop 的四大組件:

HDFS:分布式存儲(chǔ)系統(tǒng)

MapReduce:分布式計(jì)算系統(tǒng)

YARN:hadoop 的資源調(diào)度系統(tǒng)

Common:以上三大組件的底層支撐組件,主要提供基礎(chǔ)工具包和 RPC 框架等

MapReduce 是一個(gè)分布式運(yùn)算程序的編程框架,是用戶開(kāi)發(fā)“基于 Hadoop 的數(shù)據(jù)分析應(yīng)用” 的核心框架

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

為什么需要 MapReduce

1、海量數(shù)據(jù)在單機(jī)上處理因?yàn)橛布Y源限制,無(wú)法勝任

2、而一旦將單機(jī)版程序擴(kuò)展到集群來(lái)分布式運(yùn)行,將極大增加程序的復(fù)雜度和開(kāi)發(fā)難度

3、引入 MapReduce 框架后,開(kāi)發(fā)人員可以將絕大部分工作集中在業(yè)務(wù)邏輯的開(kāi)發(fā)上,而將 分布式計(jì)算中的復(fù)雜性交由框架來(lái)處理

設(shè)想一個(gè)海量數(shù)據(jù)場(chǎng)景下的數(shù)據(jù)計(jì)算需求:

單機(jī)版:磁盤受限,內(nèi)存受限,計(jì)算能力受限

分布式版:

1、 數(shù)據(jù)存儲(chǔ)的問(wèn)題,hadoop 提供了 hdfs 解決了數(shù)據(jù)存儲(chǔ)這個(gè)問(wèn)題

2、 運(yùn)算邏輯至少要分為兩個(gè)階段,先并發(fā)計(jì)算(map),然后匯總(reduce)結(jié)果

3、 這兩個(gè)階段的計(jì)算如何啟動(dòng)?如何協(xié)調(diào)?

4、 運(yùn)算程序到底怎么執(zhí)行?數(shù)據(jù)找程序還是程序找數(shù)據(jù)?

5、 如何分配兩個(gè)階段的多個(gè)運(yùn)算任務(wù)?

6、 如何管理任務(wù)的執(zhí)行過(guò)程中間狀態(tài),如何容錯(cuò)?

7、 如何監(jiān)控?

8、 出錯(cuò)如何處理?拋異常?重試?

  可見(jiàn)在程序由單機(jī)版擴(kuò)成分布式版時(shí),會(huì)引入大量的復(fù)雜工作。為了提高開(kāi)發(fā)效率,可以將 分布式程序中的公共功能封裝成框架,讓開(kāi)發(fā)人員可以將精力集中于業(yè)務(wù)邏輯。

  Hadoop 當(dāng)中的 MapReduce 就是這樣的一個(gè)分布式程序運(yùn)算框架,它把大量分布式程序都會(huì) 涉及的到的內(nèi)容都封裝進(jìn)了,讓用戶只用專注自己的業(yè)務(wù)邏輯代碼的開(kāi)發(fā)。它對(duì)應(yīng)以上問(wèn)題 的整體結(jié)構(gòu)如下:

MRAppMaster:MapReduce Application Master,分配任務(wù),協(xié)調(diào)任務(wù)的運(yùn)行

MapTask:階段并發(fā)任,負(fù)責(zé) mapper 階段的任務(wù)處理 YARNChild

ReduceTask:階段匯總?cè)蝿?wù),負(fù)責(zé) reducer 階段的任務(wù)處理 YARNChild

MapReduce做什么

簡(jiǎn)單地講,MapReduce可以做大數(shù)據(jù)處理。所謂大數(shù)據(jù)處理,即以價(jià)值為導(dǎo)向,對(duì)大數(shù)據(jù)加工、挖掘和優(yōu)化等各種處理。

  MapReduce擅長(zhǎng)處理大數(shù)據(jù),它為什么具有這種能力呢?這可由MapReduce的設(shè)計(jì)思想發(fā)覺(jué)。MapReduce的思想就是“分而治之”。

 ?。?)Mapper負(fù)責(zé)“分”,即把復(fù)雜的任務(wù)分解為若干個(gè)“簡(jiǎn)單的任務(wù)”來(lái)處理。“簡(jiǎn)單的任務(wù)”包含三層含義:一是數(shù)據(jù)或計(jì)算的規(guī)模相對(duì)原任務(wù)要大大縮??;二是就近計(jì)算原則,即任務(wù)會(huì)分配到存放著所需數(shù)據(jù)的節(jié)點(diǎn)上進(jìn)行計(jì)算;三是這些小任務(wù)可以并行計(jì)算,彼此間幾乎沒(méi)有依賴關(guān)系。

 ?。?)Reducer負(fù)責(zé)對(duì)map階段的結(jié)果進(jìn)行匯總。至于需要多少個(gè)Reducer,用戶可以根據(jù)具體問(wèn)題,通過(guò)在mapred-site.xml配置文件里設(shè)置參數(shù)mapred.reduce.tasks的值,缺省值為1。

 MapReduce 程序運(yùn)行演示

  在 MapReduce 組件里,官方給我們提供了一些樣例程序,其中非常有名的就是 wordcount 和 pi 程序。這些 MapReduce 程序的代碼都在 hadoop-mapreduce-examples-2.7.5.jar 包里,這 個(gè) jar 包在 hadoop 安裝目錄下的/share/hadoop/mapreduce/目錄里 下面我們使用 hadoop 命令來(lái)試跑例子程序,看看運(yùn)行效果

 MapReduce 示例 pi 的程序

[hadoop@hadoop1 ~]$ cd apps/hadoop-2.7.5/share/hadoop/mapreduce/
[hadoop@hadoop1 mapreduce]$ pwd
/home/hadoop/apps/hadoop-2.7.5/share/hadoop/mapreduce
[hadoop@hadoop1 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.5.jar pi 5 5

 

MapReduce 示例 wordcount 的程序

[hadoop@hadoop1 mapreduce]$ hadoop jar hadoop-mapreduce-examples-2.7.5.jar wordcount /wc/input1/ /wc/output1/

查看結(jié)果

[hadoop@hadoop1 mapreduce]$ hadoop fs -cat /wc/output1/part-r-00000

其他程序

那除了這兩個(gè)程序以外,還有沒(méi)有官方提供的其他程序呢,還有就是它們的源碼在哪里呢?

我們打開(kāi) mapreduce 的源碼工程,里面有一個(gè) hadoop-mapreduce-project 項(xiàng)目:

里面有一個(gè)例子程序的子項(xiàng)目:hadoop-mapreduce-examples

其中 src 是例子程序源碼目錄,pom.xml 是該項(xiàng)目的 maven 管理配置文件,我們打開(kāi)該文件, 找到第 127 行,它告訴了我們例子程序的主程序入口:

找到src\main\java\org\apache\hadoop\examples目錄

打開(kāi)主入口程序,看源代碼:

找到這一步,我們就能知道其實(shí) wordcount 程序的實(shí)際程序就是 WordCount.class,這就是我 們想要找的例子程序的源碼。

WordCount.java源碼

View Code

MapReduce 示例程序編寫及編碼規(guī)范

上一步,我們查看了 WordCount 這個(gè) MapReduce 程序的源碼編寫,可以得出幾點(diǎn)結(jié)論:

1、 該程序有一個(gè) main 方法,來(lái)啟動(dòng)任務(wù)的運(yùn)行,其中 job 對(duì)象就存儲(chǔ)了該程序運(yùn)行的必要 信息,比如指定 Mapper 類和 Reducer 類 job.setMapperClass(TokenizerMapper.class); job.setReducerClass(IntSumReducer.class);

2、 該程序中的 TokenizerMapper 類繼承了 Mapper 類

3、 該程序中的 IntSumReducer 類繼承了 Reducer 類

總結(jié):MapReduce 程序的業(yè)務(wù)編碼分為兩個(gè)大部分,一部分配置程序的運(yùn)行信息,一部分 編寫該 MapReduce 程序的業(yè)務(wù)邏輯,并且業(yè)務(wù)邏輯的 map 階段和 reduce 階段的代碼分別繼 承 Mapper 類和 Reducer 類

編寫自己的 Wordcount 程序

View Code

MapReduce 程序編寫規(guī)范

1、用戶編寫的程序分成三個(gè)部分:Mapper,Reducer,Driver(提交運(yùn)行 MR 程序的客戶端)

2、Mapper 的輸入數(shù)據(jù)是 KV 對(duì)的形式(KV 的類型可自定義)

3、Mapper 的輸出數(shù)據(jù)是 KV 對(duì)的形式(KV 的類型可自定義)

4、Mapper 中的業(yè)務(wù)邏輯寫在 map()方法中

5、map()方法(maptask 進(jìn)程)對(duì)每一個(gè)<k,v>調(diào)用一次

6、Reducer 的輸入數(shù)據(jù)類型對(duì)應(yīng) Mapper 的輸出數(shù)據(jù)類型,也是 KV 對(duì)的形式

7、Reducer 的業(yè)務(wù)邏輯寫在 reduce()方法中

8、Reducetask 進(jìn)程對(duì)每一組相同 k 的<k,v>組調(diào)用一次 reduce()方法

9、用戶自定義的 Mapper 和 Reducer 都要繼承各自的父類

10、整個(gè)程序需要一個(gè) Drvier 來(lái)進(jìn)行提交,提交的是一個(gè)描述了各種必要信息的 job 對(duì)象

WordCount 的業(yè)務(wù)邏輯

1、 maptask 階段處理每個(gè)數(shù)據(jù)分塊的單詞統(tǒng)計(jì)分析,思路是每遇到一個(gè)單詞則把其轉(zhuǎn)換成 一個(gè) key-value 對(duì),比如單詞 hello,就轉(zhuǎn)換成<’hello’,1>發(fā)送給 reducetask 去匯總

2、 reducetask 階段將接受 maptask 的結(jié)果,來(lái)做匯總計(jì)數(shù)

MapReduce 運(yùn)行方式及 Debug

集群運(yùn)行模式

打 jar 包,提交任務(wù)到集群運(yùn)行,適用:生產(chǎn)環(huán)境,不適用:測(cè)試,調(diào)試,開(kāi)發(fā)

要點(diǎn)一:首先要把代碼打成 jar 上傳到 linux 服務(wù)器

要點(diǎn)二:用 hadoop jar 的命令去提交代碼到 yarn 集群運(yùn)行

要點(diǎn)三:處理的數(shù)據(jù)和輸出結(jié)果應(yīng)該位于 hdfs 文件系統(tǒng)

要點(diǎn)四:如果需要在 windows 中的 eclipse 當(dāng)中直接提交 job 到集群,則需要修改 YarnRunner 類,這個(gè)比較復(fù)雜,不建議使用

本地運(yùn)行模式

Eclipse 開(kāi)發(fā)環(huán)境下本地運(yùn)行,好處是方便調(diào)試和測(cè)試

直接在IDE環(huán)境中進(jìn)行環(huán)境 : eclipse

1、直接運(yùn)行在本地,讀取本地?cái)?shù)據(jù)

2、直接運(yùn)行在本地,讀取遠(yuǎn)程的文件系統(tǒng)的數(shù)據(jù)

3、直接在IDE中提交任務(wù)給YARN集群運(yùn)行

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多