版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單元4
HDFSMapReduce和YARN技術(shù)學(xué)習(xí)目標(biāo)知識目標(biāo)技能目標(biāo)1.熟悉MapReduce和YARN。2.掌握MapReduce的使用場景及原理。3.掌握MapReduce和YARN功能與架構(gòu)。4.熟悉YARN的工作流程和部署結(jié)構(gòu)。5.掌握MapReduce和YARN的編程、調(diào)試與執(zhí)行過程。6.掌握MapReduce程序運(yùn)行流程。1.學(xué)會安裝與配置集成開發(fā)工具IDEA。2.學(xué)會用項目構(gòu)建工具M(jìn)aven創(chuàng)建項目。3.學(xué)會在Maven項目中創(chuàng)建包和Java類。4.讀懂調(diào)試單詞統(tǒng)計的程序代碼。5.讀懂pom文件并能下載依賴。6.能用Maven打包MapReduce程序。7.能將打包好的包含依賴的.jar文件上傳到HDFS。8.能準(zhǔn)備數(shù)據(jù)文件并執(zhí)行MapReduce程序單元任務(wù)任務(wù)4.1認(rèn)識MapReduce 任務(wù)4.2認(rèn)識YARN任務(wù)4.3MapReduce的工作機(jī)制
任務(wù)4.4用MapReduce編程實(shí)現(xiàn)單詞統(tǒng)計
(1)MapReduce體系結(jié)構(gòu)。(2)MapReduce工作流程。在完成大數(shù)據(jù)處理平臺Hadoop的安裝后,需要學(xué)會Hadoop核心組件的用法。本任務(wù)介紹MapReduce體系結(jié)構(gòu)和工作原理,幫助讀者學(xué)習(xí)MapReduce關(guān)鍵技術(shù)。【任務(wù)描述】【關(guān)鍵步驟】任務(wù)4.1認(rèn)識MapReduce 4.1.1MapReduce體系結(jié)構(gòu)4.1.2MapReduce工作流程任務(wù)4.1認(rèn)識MapReduce 4.1.1MapReduce體系結(jié)構(gòu)(1)Client:客戶端,用于提交作業(yè)。(2)JobTracker:作業(yè)跟蹤器。(3)TaskTracker:任務(wù)跟蹤器,負(fù)責(zé)任務(wù)管理。(4)Task:Task分為MapTask和ReduceTask兩種,均由TaskTracker啟動。
MapReduce體系結(jié)構(gòu)主要由四部分組成,分別是Client、JobTracker、TaskTracker及Task:4.1.1MapReduce體系結(jié)構(gòu)4.1.2MapReduce工作流程任務(wù)4.1認(rèn)識MapReduce 4.1.2MapReduce工作流程Hadoop中MapReduce最核心的思想就是分而治之,MapReduce包含Map和Reduce兩部分。MapReduce將一個大型的計算問題分解為一個個小的、簡單的計算任務(wù),交由MapReduce中的Map部分執(zhí)行,隨后Reduce部分會對Map部分輸出的中間結(jié)果進(jìn)行聚合統(tǒng)計,輸出最終的計算結(jié)果。(1)MapReduce1.0體系結(jié)構(gòu)及缺陷。(2)YARN體系結(jié)構(gòu)。(3)YARN和Hadoop部署方式。MapReduce1.0存在擴(kuò)展性差、可靠性差、資源利用率低、無法支持多種計算框架并存等缺陷,Hadoop2.0開始采用YARN進(jìn)行統(tǒng)一資源管理和調(diào)度,MapReduce以YARN作為運(yùn)行環(huán)境,YARN成為Hadoop的第三個核心組件。本任務(wù)學(xué)習(xí)YARN架構(gòu)思路、體系結(jié)構(gòu)和部署方式?!救蝿?wù)描述】【關(guān)鍵步驟】任務(wù)4.2認(rèn)識YARN 4.2.1MapReduce1.0體系結(jié)構(gòu)及缺陷4.2.2YARN體系結(jié)構(gòu)4.2.3YARN和Hadoop部署方式任務(wù)4.2認(rèn)識YARN 4.2.1MapReduce1.0體系結(jié)構(gòu)及缺陷MapReduce1.0體系結(jié)構(gòu)采用Master/Slave設(shè)計,包含一個JobTracker和若干個TaskTracker,具有一些缺陷:(1)擴(kuò)展性差。JobTracker同時兼?zhèn)滟Y源管理和任務(wù)調(diào)度/監(jiān)控功能,成為系統(tǒng)最大瓶頸,嚴(yán)重制約了Hadoop集群的擴(kuò)展性。(2)可靠性差。MapReduce1.0體系結(jié)構(gòu)中Master存在單點(diǎn)故障問題,一旦出現(xiàn)故障,就會導(dǎo)致整個集群不可用。(3)資源利用率低?;诓郏⊿lot)位的資源分配模型,即使一個任務(wù)用不完槽位對應(yīng)的資源,其他任務(wù)也無法使用這些空閑資源。不允許MapSlot和ReduceSlot之間共享,導(dǎo)致一種槽位資源緊張而另外一種閑置的問題。(4)無法支持多種計算框架并存。一些新的計算框架如內(nèi)存計算框架、流式計算框架和迭代式計算框架等,MapReduce1.0無法支持多種計算框架并存。4.2.1MapReduce1.0體系結(jié)構(gòu)及缺陷4.2.2YARN體系結(jié)構(gòu)4.2.3YARN和Hadoop部署方式任務(wù)4.2認(rèn)識YARN 4.2.2YARN體系結(jié)構(gòu)YARN是Hadoop2.0中的資源管理系統(tǒng),將JobTracker拆分成兩個獨(dú)立的服務(wù),即一個全局的資源管理器ResourceManager(RM)和每個應(yīng)用程序特有的ApplicationMaster(AM),將TaskTracker的功能轉(zhuǎn)化為NodeManager(NM)服務(wù)。ResourceManager:負(fù)責(zé)整個系統(tǒng)的資源管理和分配ApplicationMaster:負(fù)責(zé)單個應(yīng)用程序的管理。ResourceManager和每個節(jié)點(diǎn)上的NodeManager組成了全新的通用操作系統(tǒng),以分布式的方式管理應(yīng)用程序。4.2.2YARN體系結(jié)構(gòu)YARN采用Master/Slave架構(gòu)設(shè)計,由一個主節(jié)點(diǎn)(RM)、多個子節(jié)點(diǎn)(NM)和每個執(zhí)行任務(wù)的AM共同組成。通常會將YARN的計算節(jié)點(diǎn)和存儲節(jié)點(diǎn)部署在同一臺服務(wù)器上RM負(fù)責(zé)對各個NM上的資源進(jìn)行統(tǒng)一管理和調(diào)度。當(dāng)用戶提交一個應(yīng)用程序時,AM跟蹤和管理這個程序,向RM申請資源,要求NM啟動可以占用一定資源的任務(wù)。不同的AM被分布到不同的節(jié)點(diǎn)上,它們之間不會相互影響。4.2.2YARN體系結(jié)構(gòu)(1)ResourceManager(RM)。是一個全局的資源管理器,負(fù)責(zé)整個集群的資源管理和分配,如處理來自客戶端的請求、啟動/監(jiān)控AM、監(jiān)控NM、分配與調(diào)度資源。包括調(diào)度器(Scheduler)和應(yīng)用程序管理器(AM)兩個組件。(2)ApplicationMaster(AM)。YARN的另一個重要組件就是AM,管理YARN內(nèi)運(yùn)行的應(yīng)用程序的每個實(shí)例,負(fù)責(zé)與RM協(xié)商資源,并與RM協(xié)同工作來執(zhí)行和監(jiān)控Container,以及它們的資源消耗。(3)NodeManager(NM)。是每個節(jié)點(diǎn)的框架代理,負(fù)責(zé)啟動應(yīng)用的Container,監(jiān)控Container的資源使用情況,并把這些信息匯報給調(diào)度器,應(yīng)用對應(yīng)的AM,通過協(xié)商從調(diào)度器處獲取Container,并跟蹤這些Container的資源狀態(tài)和應(yīng)用執(zhí)行的情況。(4)Container。是對任務(wù)運(yùn)行資源的抽象,封裝了某個節(jié)點(diǎn)資源的多維度資源,如內(nèi)存、CPU、磁盤、網(wǎng)絡(luò)等,一個Container中既可以運(yùn)行AM,也可以運(yùn)行MapTask、ReduceTask、SparkTask等。(5)Client。面向用戶提交的Driver代碼,作為用戶編程的接口,與RM交互。YARN各組件的功能如下:4.2.2YARN體系結(jié)構(gòu)YARN可為各類應(yīng)用程序提供資源管理和調(diào)度功能。YARN的目標(biāo)就是實(shí)現(xiàn)“一個集群多個框架”,即在一個集群上部署一個統(tǒng)一的資源調(diào)度管理框架YARN,在YARN上可以部署各種計算框架如MapReduce、Tez、HBase、Storm、Giraph、Spark、OpenMPI等。4.2.1MapReduce1.0體系結(jié)構(gòu)及缺陷4.2.2YARN體系結(jié)構(gòu)4.2.3YARN和Hadoop部署方式任務(wù)4.2認(rèn)識YARN 4.2.3YARN和Hadoop部署方式在集群部署方面,YARN的各個組件是和Hadoop集群中的其他組件統(tǒng)一部署的。YARN的RM組件和HDFS的NameNode部署在一個節(jié)點(diǎn)上,YARN的AM、NM和HDFS的DataNode部署在一起。YARN中的(Container)容器代表了CPU、內(nèi)存、網(wǎng)絡(luò)等計算資源,它也和HDFS的DataNode部署在一起。(1)MapReduce的運(yùn)行流程。(2)MapReduce的執(zhí)行過程。MapReduce編程模型簡化了分布式系統(tǒng)中并行計算的復(fù)雜度,開發(fā)人員能夠不必關(guān)心MapReduce程序的底層實(shí)現(xiàn)細(xì)節(jié),只專注于解決業(yè)務(wù)需求。本任務(wù)簡單介紹MapReduce的運(yùn)行流程,以及MapReduce的執(zhí)行過程?!救蝿?wù)描述】【關(guān)鍵步驟】任務(wù)4.3MapReduce的工作機(jī)制
4.3.1MapReduce的運(yùn)行流程4.3.2MapReduce的執(zhí)行過程任務(wù)4.3MapReduce的工作機(jī)制
4.3.1MapReduce的運(yùn)行流程在MapReduce框架內(nèi)部,整個運(yùn)行流程可以分為數(shù)據(jù)輸入階段、Map階段、中間結(jié)果處理階段、Reduce階段和結(jié)果數(shù)據(jù)輸出階段,每個階段中的數(shù)據(jù)傳輸格式是不一樣的。(1)數(shù)據(jù)輸入階段,將經(jīng)過Hadoop框架處理的“(k,原始數(shù)據(jù)行)”格式的數(shù)據(jù)輸入Map階段。(2)數(shù)據(jù)經(jīng)過Map階段的處理之后,輸出“{(k1,v1),(k1,v2)}格式的中間結(jié)果。(3)Map階段輸出的中間結(jié)果經(jīng)由Hadoop的中間結(jié)果處理階段的處理后,形成“{(k1,[v1,v2]…}”格式的數(shù)據(jù)。(4)中間結(jié)果處理階段形成的“(k1,[v1,v2])…}”格式的數(shù)據(jù)會被輸入Reduce階段進(jìn)行處理。此時,Key相同的數(shù)據(jù)會被輸入同一個reduce()函數(shù)進(jìn)行處理。(5)數(shù)據(jù)經(jīng)過Reduce階段的處理之后,最終會形成“(k1,v3)}”格式的數(shù)據(jù)存入HDFS中。4.3.1MapReduce的運(yùn)行流程舉例WordCount:輸入一個包含大量單詞的文本文件,輸出文件中每個單詞及其出現(xiàn)頻數(shù),并按照單詞字母順序排序,每個單詞和其頻數(shù)占一行,單詞和頻數(shù)之間有間隔。,單詞統(tǒng)計。程序WordCountInput一個包含大量單詞的文本文件Output文件中每個單詞及其出現(xiàn)的次數(shù)(頻數(shù)),并按照單詞字母順序排序,每個單詞和其頻數(shù)占一行,單詞和頻數(shù)之間用逗號間隔4.3.1MapReduce的運(yùn)行流程WordCount程序的MapReduce執(zhí)行過程如圖所示:4.3.1MapReduce的運(yùn)行流程4.3.2MapReduce的執(zhí)行過程任務(wù)4.3MapReduce的工作機(jī)制
4.3.2MapReduce的執(zhí)行過程MapReduce執(zhí)行過程01MapReduce的執(zhí)行過程從作業(yè)提交到作業(yè)完成,要經(jīng)過提交(Commit)→分片(Split)→Map→分區(qū)(Partition)→排序(Sort)→組合(Combine)→溢出(Spill)→合并(Merge)→復(fù)制(Copy)→排序/歸并(Sort/Merge)→Reduce的全過程。4.3.2MapReduce的執(zhí)行過程MapReduce執(zhí)行過程01啟動MapReduce之前,要確保待處理的文件存儲在HDFS上。(1)提交。MapReduce應(yīng)用將請求提交給RM,由RM創(chuàng)建對應(yīng)的Job,一個應(yīng)用對應(yīng)一個Job(jobID,形如job_202431281420_0001)。提交的任務(wù)形式可以是Job.jar、Job.split或Job.xml。(2)分片。Job提交前,先將待處理的文件進(jìn)行分片。MapReduce框架默認(rèn)將一個塊(Block)作為一個分片??蛻舳藨?yīng)用可以重定義塊與分片的映射關(guān)系。(3)Map。Map的輸出結(jié)果先放入內(nèi)存緩沖區(qū)(Bufferinmemory)。當(dāng)緩沖區(qū)數(shù)據(jù)溢出時,將其中的數(shù)據(jù)寫入本地磁盤,之前通常需要做分區(qū)、排序、組合和合并處理。4.3.2MapReduce的執(zhí)行過程MapReduce執(zhí)行過程01(4)分區(qū)。默認(rèn)采用Hash算法進(jìn)行分區(qū),MapReduce框架根據(jù)ReduceTask個數(shù)來確定分區(qū)個數(shù)。相同Key值的記錄最終被送到相同的ReduceTask來處理。Partition的作用就是把數(shù)據(jù)歸類,每個map任務(wù)會針對輸出進(jìn)行分區(qū),以及對每個Reduce任務(wù)建立一個分區(qū)。4.3.2MapReduce的執(zhí)行過程MapReduce執(zhí)行過程01(5)排序。將Map輸出的記錄排序。例如,將('Hi','1'),('Hello','1')重新排序?yàn)椋?Hello','1'),('Hi','1')。(6)組合。局部合并,這個動作默認(rèn)是可選的。例如,將('Hi','1'),('Hi','1'),('Hello','1'),('Hello','1')合并為('Hi','2'),('Hello','2')。(7)溢出/合并。MapTask在處理后會產(chǎn)生多個溢出文件(SpillFile),對多個溢出文件進(jìn)行合并,生成一個經(jīng)過分區(qū)和排序的SpillFile,即MOF(MapOutFile)。(8)復(fù)制。復(fù)制到內(nèi)存或磁盤上(Inmemoryorondisk)。當(dāng)ReduceTask接收的數(shù)據(jù)量不大時,將其存放在內(nèi)存緩沖區(qū)中,緩沖區(qū)文件增多時,MapReduce后臺線程將它們合并成一個更大的有序文件,即Reduce階段的Merge操作,最后一次合并的結(jié)果直接輸出到reduce()函數(shù)。4.3.2MapReduce的執(zhí)行過程MapReduce執(zhí)行過程01(9)排序/合并。將從多個Map獲取的記錄排序,并對多個小文件進(jìn)行合并操作。(10)Reduce。Reduce階段有三個過程,即Copy、Sort和Reduce。
Copy:ReduceTask從各個MapTask復(fù)制MOF文件。
Sort:通常又叫Merge,將多個MOF文件合并后再排序。
Reduce:用戶自定義的Reduce邏輯。4.3.2MapReduce的執(zhí)行過程Shuffle過程詳解02Shuffle被定義為Map(映射)階段和Reduce(歸約)階段之間傳遞中間數(shù)據(jù)的過程,包括ReduceTask從各個MapTask獲取MOF文件的過程,以及對MOF的排序與合并處理,即從Map輸出到Reduce輸入的整個過程。Shuffle過程分為Map端Shuffle過程和Reduce端Shuffle過程4.3.2MapReduce的執(zhí)行過程Shuffle過程詳解02Shuffle過程分為Map端Shuffle過程和Reduce端Shuffle過程1)Map端Shuffle過程Map端產(chǎn)生的中間結(jié)果,被寫入本地磁盤,而不是HDFS。每個Map的輸出會先被寫入內(nèi)存緩沖區(qū),當(dāng)緩沖區(qū)達(dá)到閾值時,系統(tǒng)會啟動一個線程將緩沖區(qū)的數(shù)據(jù)寫入磁盤,這個過程叫作溢寫(Spill)。在Spill文件寫入之前,會先進(jìn)行二次排序,首先根據(jù)數(shù)據(jù)所屬的Partition進(jìn)行排序。每個Partition中的數(shù)據(jù)按Key來排序。Reducer根據(jù)Partition來讀取自己對應(yīng)的數(shù)據(jù)。接著運(yùn)行Combine(組合),對將要寫入磁盤的文件先進(jìn)行一次處理,減少寫入磁盤的數(shù)據(jù)量。再將數(shù)據(jù)寫入本地磁盤,產(chǎn)生Spill文件(Spill文件保存在{mapred.local.dir}指定的目錄中,Map任務(wù)結(jié)束后就會被刪除)。每個Map任務(wù)可能產(chǎn)生多個Spill文件,在每個Map端任務(wù)完成前,會通過多路歸并算法將這些Spill文件歸并成一個文件。至此,Map的Shuffle過程就結(jié)束。4.3.2MapReduce的執(zhí)行過程Shuffle過程詳解02Shuffle過程分為Map端Shuffle過程和Reduce端Shuffle過程2)Reduce端的Shuffle過程Reduce端的Shuffle主要包括三個階段,即Copy、Sort(Merge)和Reduce。Copy階段:將Map端產(chǎn)生的輸出文件復(fù)制到Reduce端。Reducer復(fù)制與自己對應(yīng)的Partition中的數(shù)據(jù)。每個Reducer會處理一個或者多個Partition,但需要先將自己對應(yīng)的Partition中的數(shù)據(jù)從每個Map的輸出結(jié)果中復(fù)制過來。Sort(Merge)階段:這個階段的主要工作是執(zhí)行歸并、排序。從Map端復(fù)制到Reduce端的數(shù)據(jù)都是有序的,所以很適合執(zhí)行歸并、排序。Reduce階段:最終在Reduce端生成一個較大的文件作為Reduce的輸入。4.3.2MapReduce的執(zhí)行過程YARN在MapReduce執(zhí)行過程中的作用03(1)ApplicationMaster:負(fù)責(zé)一個Application生命周期內(nèi)的所有工作,包括與ResourceManager調(diào)度器協(xié)商以獲取資源;將得到的資源進(jìn)一步分配給內(nèi)部任務(wù);與NodeManager通信以啟動/停止任務(wù);監(jiān)控所有任務(wù)運(yùn)行狀態(tài),并在任務(wù)運(yùn)行失敗時重新為任務(wù)申請資源以重啟任務(wù)。(2)ResourceManager負(fù)責(zé)集群中所有資源的統(tǒng)一管理和分配。它接收來自各個節(jié)點(diǎn)NodeManager的資源匯報信息,并根據(jù)收集的資源按照一定的策略分配給各個應(yīng)用程序。(3)NodeManager是每個節(jié)點(diǎn)上的代理,用于管理Hadoop集群中單個計算節(jié)點(diǎn),包括與ResourceManger保持通信,監(jiān)督Container的生命周期,監(jiān)控每個Container的資源使用(內(nèi)存、CPU等)情況,追蹤節(jié)點(diǎn)健康狀況,管理日志和不同應(yīng)用程序用到的附屬服務(wù)。(4)在YARN集群中,MapReduce組件的JobHistoryServer是唯一實(shí)例,負(fù)責(zé)收集、聚合MapReduce作業(yè)的歷史信息,并將其存儲在HDFS上。這個服務(wù)器實(shí)例是YARN集群中MapReduce作業(yè)歷史信息的唯一存儲和管理點(diǎn)。JobHistoryServer用于存儲任務(wù)的執(zhí)行記錄,執(zhí)行列表,沒有它,也可以運(yùn)行任務(wù),但是無法查詢?nèi)蝿?wù)的詳細(xì)信息。4.3.2MapReduce的執(zhí)行過程典型程序WordCount舉例04假設(shè)要分析一個大文件A里每個英文單詞出現(xiàn)的個數(shù),則利用MapReduce框架能快速實(shí)現(xiàn)這一統(tǒng)計分析。假設(shè)文件A的內(nèi)容如下:HelloWorldByeWorldHelloHadoopByeHadoopByeHadoopHelloHadoop4.3.2MapReduce的執(zhí)行過程典型程序WordCount舉例04第1步:將待處理的大文件A存放在HDFS上,大文件A被切分的數(shù)據(jù)塊A.1、A.2、A.3分別存放在DataNode#1、#2、#3上。第2步:通過WordCount分析處理程序?qū)崿F(xiàn)用戶自定義的map()函數(shù)和reduce()函數(shù)。WordCount程序?qū)⒎治鰬?yīng)用提交給ResourceManager,ResourceManager根據(jù)請求創(chuàng)建對應(yīng)的Job,并根據(jù)文件塊個數(shù)按文件塊進(jìn)行分片,創(chuàng)建3個MapTask和3個ReduceTask,這些Task運(yùn)行在Container中。第3步MapTask1、2、3的輸出是一個經(jīng)過分區(qū)與排序(假設(shè)沒有進(jìn)行Combine)的MOF文件,記錄形式如圖4.3.7③中的表所示。第4步ReduceTask從MapTask獲取MOF文件,經(jīng)過合并、排序,最后根據(jù)用戶自定義的Reduce邏輯,輸出統(tǒng)計結(jié)果。(1)任務(wù)要求及程序代碼。(2)在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞。本任務(wù)首先用Java代碼編寫MapReduce作業(yè),并在IDEA中完成程序調(diào)試和程序打包,然后將其上傳到HDFS中執(zhí)行。【任務(wù)描述】【關(guān)鍵步驟】任務(wù)4.4用MapReduce編寫程序?qū)崿F(xiàn)單詞統(tǒng)計WordCountApp實(shí)現(xiàn)單詞數(shù)量統(tǒng)計
4.4.1任務(wù)要求及程序代碼4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞任務(wù)4.4用MapReduce編寫程序?qū)崿F(xiàn)單詞統(tǒng)計WordCountApp實(shí)現(xiàn)單詞數(shù)量統(tǒng)計
4.4.1任務(wù)要求及程序代碼
任務(wù)要求:
現(xiàn)有一個包含英文單詞的文本文件MR_data.txt,文件中各英文單詞之間用Tab間隔,要求編寫一個MapReduce程序,統(tǒng)計每個單詞出現(xiàn)的次數(shù)。MR_data.txt文件內(nèi)容如下:Hello World Bye WorldHello Hadoop Bye HadoopBye Hadoop Hello Hadoop4.4.1任務(wù)要求及程序代碼程序代碼如下(1):packagecom.hw.mapreduce;importjava.io.IOException;importorg.apache.hadoop.conf.Configuration;importorg.apache.hadoop.fs.Path;importorg.apache.hadoop.io.LongWritable;importorg.apache.hadoop.io.Text;importorg.apache.hadoop.mapreduce.Job;importorg.apache.hadoop.mapreduce.Mapper;importorg.apache.hadoop.mapreduce.Reducer;importorg.apache.hadoop.mapreduce.lib.input.FileInputFormat;importorg.apache.hadoop.mapreduce.lib.output.FileOutputFormat;publicclassWordCountApp{publicstaticclassMyMapperextendsMapper<LongWritable,Text,Text,LongWritable>{@Overrideprotectedvoidmap(LongWritablekey,Textvalue,Mapper<LongWritable,Text,Text,LongWritable>.Contextcontext)throwsIOException,InterruptedException{Stringline=value.toString();String[]splited=line.split("\t");for(Stringword:splited){Textk2=newText(word);
4.4.1任務(wù)要求及程序代碼程序代碼如下(2):LongWritablev2=newLongWritable(1);context.write(k2,v2);}}}publicstaticclassMyReducerextendsReducer<Text,LongWritable,Text,LongWritable>{@Overrideprotectedvoidreduce(Textk2,Iterable<LongWritable>v2s,Reducer<Text,LongWritable,Text,LongWritable>.Contextcontext)throwsIOException,InterruptedException{longcount=0L;for(LongWritabletimes:v2s){count+=times.get();}LongWritablev3=newLongWritable(count);context.write(k2,v3);}}
4.4.1任務(wù)要求及程序代碼程序代碼如下(3):publicstaticvoidmain(String[]args)throwsException{Configurationconf=newConfiguration();Jobjob=Job.getInstance(conf,WordCountApp.class.getSimpleName());//必須指定job.setJarByClass(WordCountApp.class);//數(shù)據(jù)來自哪里FileInputFormat.setInputPaths(job,args[0]);//自定義的Mapper在哪里job.setMapperClass(MyMapper.class);//指定Mapper輸出的<k2,v2>的類型job.setMapOutputKeyClass(Text.class);job.setMapOutputValueClass(LongWritable.class);//自定義的Reducer在哪里job.setReducerClass(MyReducer.class);//指定Reducer輸出的<k3,v3>的類型job.setOutputKeyClass(Text.class);job.setOutputValueClass(LongWritable.class);//數(shù)據(jù)寫到哪里FileOutputFormat.setOutputPath(job,newPath(args[1]));//true表示將運(yùn)行進(jìn)度等信息及時輸出給用戶job.waitForCompletion(true);}}4.4.1任務(wù)要求及程序代碼4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞任務(wù)4.4用MapReduce編寫程序?qū)崿F(xiàn)單詞統(tǒng)計WordCountApp實(shí)現(xiàn)單詞數(shù)量統(tǒng)計
4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第1步:創(chuàng)建Maven項目打開IDEA,在lntelliJIDEA歡迎界面中,單擊“CreateNewProject”按鈕打開“NewProject”對話框,設(shè)置ProjectSDK為“1.8(javaversion"1.8.0_281"在“Groupid”文本框中輸入“com.huawei”,“ArtifactId”文本框中輸入“WordCountApp”,“Version”文本框中默認(rèn)是“1.0-SNAPSHOT”4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第1步:創(chuàng)建Maven項目4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第2步:新建com.hw.mapreduce包在IntelliJIDEA主界面的WordCountApp項目中新建com.hw.mapreduce包。選擇“WordCountApp”→“src”→“main”→“java”選項并右擊,在彈出的快捷菜單中選擇“New”→“package”命令,輸入包名“com.hw.mapreduce”。4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第2步:新建com.hw.mapreduce包在com.hw.mapreduce包下新建Java類,類名為“WordCountApp”。右擊“com.hw.mapreduce”,在彈出的快捷菜單中選擇“new”→“JavaClass”命令,輸入類名:WordCountApp4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第2步:新建com.hw.mapreduce包在com.hw.mapreduce包下新建Java類,類名為“WordCountApp”。右擊“com.hw.mapreduce”,在彈出的快捷菜單中選擇“new”→“JavaClass”命令輸入類名:WordCountApp4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第3步:輸入單詞數(shù)量統(tǒng)計的程序代碼將4.4.1節(jié)中的單詞數(shù)量統(tǒng)計程序代碼輸入WordCountApp類的代碼窗口中4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第4步:修改pom文件并下載依賴。<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="/POM/4.0.0"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/POM/4.0.0/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.huawei</groupId><artifactId>WordCountApp</artifactId><version>1.0-SNAPSHOT</version><properties><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><piler.source>1.8</piler.source><piler.target>1.8</piler.target></properties><repositories><repository><id>nexus-aliyun</id><name>Nexusaliyun</name><url>/nexus/content/groups/public</url></repository></repositories>
pom.xml文件中的代碼(1):4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第4步:修改pom文件并下載依賴(2)<dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version><scope>test</scope></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-client</artifactId><version>2.9.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-app</artifactId><version>2.7.7</version></dependency>
<dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-common</artifactId><version>2.7.7</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-core</artifactId><version>2.7.7</version></dependency></dependencies><build><finalName>WordCountApp</finalName><plugins><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.5.1</version><configuration><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration>
4.4.2在IDEA中調(diào)試MapReduce程序統(tǒng)計單詞第4步:修改pom文件并下載依賴(3)</plugin><plugin><artifactId>maven-assembly-plugin</artifactId><configuration><descriptorRefs><descriptorRef>jar-with-dependencies</descriptorRef></descriptorRefs></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals>
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 食醋制作工常識模擬考核試卷含答案
- 我國上市公司現(xiàn)金股利信號傳遞效應(yīng)的實(shí)證剖析與理論探究
- 蜂產(chǎn)品加工工操作評估能力考核試卷含答案
- 我國上市公司募集資金投向變更:特征、動因與治理策略
- 燃?xì)饩甙惭b工崗前實(shí)操知識水平考核試卷含答案
- 皮膚管理師安全生產(chǎn)知識競賽考核試卷含答案
- 梳理針刺非織造布制作工風(fēng)險識別模擬考核試卷含答案
- 牙骨雕刻工崗前成果考核試卷含答案
- 2026年福建莆田第五中學(xué)初中部編外教師招聘若干人備考題庫有完整答案詳解
- 陶瓷電容器制造工安全理論能力考核試卷含答案
- 復(fù)方蒲公英注射液在銀屑病中的應(yīng)用研究
- 2023屆高考語文二輪復(fù)習(xí):小說標(biāo)題的含義與作用 練習(xí)題(含答案)
- 網(wǎng)絡(luò)直播創(chuàng)業(yè)計劃書
- 大學(xué)任課老師教學(xué)工作總結(jié)(3篇)
- 3D打印增材制造技術(shù) 課件 【ch01】增材制造中的三維模型及數(shù)據(jù)處理
- 醫(yī)院保潔應(yīng)急預(yù)案
- 化工設(shè)備培訓(xùn)
- 鋼結(jié)構(gòu)安裝施工專項方案
- 高三體育生收心主題班會課件
- FZ/T 90086-1995紡織機(jī)械與附件下羅拉軸承和有關(guān)尺寸
- 登桿培訓(xùn)材料課件
評論
0/150
提交評論