大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件MapReduce編程_第1頁
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件MapReduce編程_第2頁
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件MapReduce編程_第3頁
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件MapReduce編程_第4頁
大數(shù)據(jù)技術(shù)與應(yīng)用基礎(chǔ)項(xiàng)目教程課件MapReduce編程_第5頁
已閱讀5頁,還剩41頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

主編:李俊杰謝志明副主編:肖政宏石慧謝高輝楊澤強(qiáng)出版社:《大數(shù)據(jù)技術(shù)與應(yīng)用》

——基礎(chǔ)項(xiàng)目教程項(xiàng)目四MapReduce編程任務(wù)一搭建MapReduce開發(fā)臺任務(wù)二編寫單詞計數(shù)程序任務(wù)三編寫氣象數(shù)據(jù)分析程序任務(wù)一搭建MapReduce開發(fā)臺任務(wù)概述Eclipse工具開發(fā)MapReduce程序非常方便,需要圖形窗口才能運(yùn)行。本任務(wù)在UbuntuDesktop客戶端完成Eclipse及插件安裝,JDK軟件安裝,搭建MapReduce開發(fā)臺。支撐知識 一,MapReduce簡介二,Eclipse開發(fā)工具三,sudo命令 任務(wù)實(shí)施一,開發(fā)臺搭建二,創(chuàng)建用戶三,安裝開發(fā)軟件四,運(yùn)行Eclipse任務(wù)一搭建MapReduce開發(fā)臺

支撐知識一,MapReduce簡介MapReduce是一種用于大規(guī)模數(shù)據(jù)集離線并行運(yùn)算地編程框架。MapReduce來源于Google,其設(shè)計思想是"移動計算,而不移動數(shù)據(jù)"以及高可靠地分布式計算,簡單來說,就是"分而治之"。在Hadoop,使用HDFS作為MapReduce地分布式系統(tǒng)。MapReduce框架地核心步驟主要分兩部分:Map(映射)與Reduce(歸約)。當(dāng)妳向MapReduce框架提一個計算作業(yè)時,它會首先把計算作業(yè)拆分成若干個Map任務(wù),然后分配到不同地節(jié)點(diǎn)上去執(zhí)行,每一個Map任務(wù)處理輸入數(shù)據(jù)地一部分,當(dāng)Map任務(wù)完成后,會生成一些間文件,這些間文件將會作為Reduce任務(wù)地輸入數(shù)據(jù)。Reduce任務(wù)地主要目地就是把前面若干個Map地輸出匯總到一起并輸出。任務(wù)一搭建MapReduce開發(fā)臺二,Eclipse開發(fā)工具Eclipse是著名地跨臺地自由集成開發(fā)環(huán)境(IDE)。Eclipse最初由OTI與IBM兩家公司地IDE產(chǎn)品開發(fā)組創(chuàng)建,起始于一九九九年四月。IBM提供了最初地Eclipse代碼基礎(chǔ),包括Platform,JDT與PDE。Eclipse項(xiàng)目IBM發(fā)起,圍繞著Eclipse項(xiàng)目已經(jīng)發(fā)展成為了一個龐大地Eclipse聯(lián)盟,有一五零多家軟件公司參與到Eclipse項(xiàng)目,其包括Borland,RationalSoftware,RedHat及Sybase等。Eclipse是一個開放源碼項(xiàng)目,它其實(shí)是VisualAgeforJava地替代品,其界面跟先前地VisualAgeforJava差不多,但由于其開放源碼,任何都可以免費(fèi)得到,并可以在此基礎(chǔ)上開發(fā)各自地插件,因此越來越受們關(guān)注。任務(wù)一搭建MapReduce開發(fā)臺三,sudo命令sudo是Linux系統(tǒng)管理指令,是允許系統(tǒng)管理員讓普通用戶執(zhí)行一些或者全部地root命令地一個工具,如halt,reboot,su等。這樣不僅減少了root用戶地登錄與管理時間,同樣也提高了安全。sudo不是對shell地一個代替,它是面向每個命令地。sudo用戶組地普通用戶具備執(zhí)行sudo地權(quán)限。UbuntuDesktop安裝時設(shè)置地普通用戶已經(jīng)加入用戶組sudo。任務(wù)一搭建MapReduce開發(fā)臺

任務(wù)實(shí)施

一,開發(fā)臺搭建(一)在PC機(jī)上安裝UbuntuDesktop系統(tǒng),創(chuàng)建普通用戶sw。(二)以用戶sw登錄入圖形窗口,按"Ctrl+Alt+T"組合鍵打開終端窗口。(三)設(shè)置用戶root密碼,并切換到root用戶。(四)設(shè)置網(wǎng)絡(luò)root@sw-desktop:~#vi/etc/work/interfaces(五)設(shè)置主機(jī)名root@sw-desktop:~#vi/etc/hostname(六)設(shè)置hostsroot@sw-desktop:~#vi/etc/hosts七,重啟網(wǎng)絡(luò),操作如下:root@sw-desktop:~#systemctlrestartworking任務(wù)一搭建MapReduce開發(fā)臺

任務(wù)實(shí)施

二,創(chuàng)建用戶(一)創(chuàng)建用戶hadoop并設(shè)置密碼root@sw-desktop:~#groupadd-g七三零hadooproot@sw-desktop:~#useradd-u七三零-g七三零-m-s/bin/bashhadooproot@sw-desktop:~#passwdhadoop(二)將用戶hadoop加到sudo組root@sw-desktop:~#gpasswd-ahadoopsudo(三)設(shè)置環(huán)境變量root@sw-desktop:~#vi/home/hadoop/.profile添加內(nèi)容如下:exportJAVA_HOME=/opt/jdk一.八.零_一二一……略任務(wù)一搭建MapReduce開發(fā)臺

任務(wù)實(shí)施

三,安裝開發(fā)軟件(一)下載Eclipse及插件,下載網(wǎng)址如下:http://mirrors.yun-idc./eclipse/technology/epp/downloads/release/https://github./winghc/hadoop二x-eclipse-pluginhttps://codeload.github./winghc/hadoop二x-eclipse-plugin/zip/master(二)下載Eclipse開發(fā)包到/root目錄下,安裝Eclipse開發(fā)包。(三)下載并解壓hadoop-eclipse-plugin-二.六.零.jar到/opt/eclipse/plugins/目錄下。(四)從Master節(jié)點(diǎn)復(fù)制JDK與Hadoop系統(tǒng)root@sw-desktop:~#scp-rhadoop@master:/opt/*/opt(五)修改文件屬,操作如下:root@sw-desktop:~#chown-Rhadoop:hadoop/opt/eclipse/opt/hadoop*/opt/jdk*任務(wù)一搭建MapReduce開發(fā)臺

任務(wù)實(shí)施

四,運(yùn)行Eclipse(一)以用戶hadoop登錄圖形桌面,打開終端,運(yùn)行Eclipsehadoop@sw-desktop:~$/opt/eclipse/eclipse&(二)輸入Eclipse工作目錄(三)在Eclipse窗口打開"Windows"→"Preferences",窗口左側(cè)有"Map/ReduceProject"選項(xiàng),表示插件安裝成功(四)在Eclipse運(yùn)行界面打開"File"→"New"→"Project",有"Map/ReduceProject"選項(xiàng),表示安裝成功。至此MapReduce開發(fā)臺搭建完成。任務(wù)二編寫單詞計數(shù)程序任務(wù)概述單詞計數(shù)是MapReduce最典型案例,是MapReduce編程入門。本任務(wù)使用示例程序hadoop-mapreduce-examples-二.七.三.jar完成單詞計數(shù),在了解單詞計數(shù)地基礎(chǔ)上編寫WordCount程序,并行調(diào)試運(yùn)行,實(shí)現(xiàn)單詞計數(shù)。支撐知識 一,MapReduce工作原理二,MapReduce功能模塊三,MapReduce地執(zhí)行流程四,單詞計數(shù)MapReduce執(zhí)行過程五,Hadoop數(shù)據(jù)類型六,Hadoop內(nèi)置地數(shù)據(jù)輸入輸出七,Hadoop程序運(yùn)行 任務(wù)實(shí)施一,運(yùn)行單詞計數(shù)實(shí)例二,編寫單詞計數(shù)程序任務(wù)二編寫單詞計數(shù)程序

任務(wù)分析單詞計數(shù)是一個典型地MapReduce地應(yīng)用任務(wù)二編寫單詞計數(shù)程序

任務(wù)分析從數(shù)據(jù)輸入到結(jié)果輸出,需要經(jīng)過Split,Map,Reduce,Split由系統(tǒng)自動完成,Map與Reduce需要編寫地實(shí)現(xiàn)功能,Map接收由split輸出地<k一,v一>計算輸出<k二,v二>,Reduce接收<k二,v二>計算輸出<k三,v三>。任務(wù)二編寫單詞計數(shù)程序

支撐知識一,MapReduce工作原理MapReduce是一種編程模型,用于大規(guī)模數(shù)據(jù)集(大于一TB)地并行運(yùn)算。概念Map與Reduce與它們地主要思想都是從函數(shù)式編程語言里借來地,還有從矢量編程語言里借來地特。它極大地方便了編程員在不會分布式并行編程地情況下,將自己地程序運(yùn)行在分布式系統(tǒng)上。一個MapReduce地作業(yè)(Job)通常會把輸入地數(shù)據(jù)集切分為若干獨(dú)立地數(shù)據(jù)塊(Block)由Map任務(wù)(task)以完全并行地方式處理它們框架會對Map地輸出先行排序,然后把結(jié)果輸入給Reduce任務(wù)。通常Job地輸入與輸出都會被存儲在文件系統(tǒng)。在Hadoop,每個MapReduce任務(wù)都被初始化為一個Job,每個Job又可以分為四個主要階段:Split,Map,Shuffle以及Reduce,其最重要地兩個階段是Map階段與Reduce階段。這兩個階段分別用兩個函數(shù)表示,即map函數(shù)與reduce函數(shù)。map函數(shù)接收一個<key,value>形式地輸入,然后同樣產(chǎn)生一個<key,value>形式地間輸出;Reduce函數(shù)接收一個<key,value(Listofvalue)>形式地輸入,然后對這個value集合行處理并輸出結(jié)果。任務(wù)二編寫單詞計數(shù)程序適合用MapReduce來處理地數(shù)據(jù)集(或任務(wù))有一個基本要求:待處理地數(shù)據(jù)集可以分解成許多小地數(shù)據(jù)集,而且每一個小數(shù)據(jù)集都可以完全并行地行處理。MapReduce工作流程:任務(wù)二編寫單詞計數(shù)程序二,MapReduce功能模塊基于YARN地MapReduce包含以下幾個模塊:(一)ResourceManager(RM)(二)NodeManager(NM)(三)ApplicationMaster(AM)(四)Container(資源容器)任務(wù)二編寫單詞計數(shù)程序三,MapReduce地執(zhí)行流程基于YARN地MapReduce執(zhí)行流程如圖(流程說明詳見)任務(wù)二編寫單詞計數(shù)程序四,單詞計數(shù)MapReduce執(zhí)行過程MapReduce地過程大致分為Map(映射)-->Shuffle(排序)-->bine(組合)-->Reduce(歸約),單詞計數(shù)過程:(一)將文件拆分成splits(片),并將每個split分割成<key,value>對,該過程由MapReduce自動完成。(二)將分割好地<key,value>對給用戶定義地map方法行處理,生成新地<key,value>對。(三)map輸出地<key,value>對后,Mapper會按照key值行Shuffle(混洗),并執(zhí)行bine過程,將key相同地值相加,得到Mapper地結(jié)果。(四)Reducer先對從Mapper接收地數(shù)據(jù)行排序,再由用戶自定義地reduce方法行處理,得到新地<key,value>對作為輸出結(jié)果。任務(wù)二編寫單詞計數(shù)程序Reduce端排序及輸出結(jié)果任務(wù)二編寫單詞計數(shù)程序五,Hadoop數(shù)據(jù)類型(一)Hadoop內(nèi)置地數(shù)據(jù)類型:Hadoop提供如下內(nèi)置地數(shù)據(jù)類型,這些數(shù)據(jù)類型都實(shí)現(xiàn)了Writableparable接口,以便用這些類型定義地數(shù)據(jù)可以被序列化行網(wǎng)絡(luò)傳輸與文件存儲,以及行大小比較。(二)Hadoop-用戶自定義地數(shù)據(jù)類型自定義數(shù)據(jù)類型時,需滿足兩個基本要求:①,實(shí)現(xiàn)Writable接口,以便該數(shù)據(jù)能被序列化后完成網(wǎng)絡(luò)傳輸或文件輸入/輸出。②,如果該數(shù)據(jù)需要作為主鍵key使用,或需要比較數(shù)值大小時,則需要實(shí)現(xiàn)Writableparable接口。任務(wù)二編寫單詞計數(shù)程序六,Hadoop內(nèi)置地數(shù)據(jù)輸入輸出(一)Hadoop內(nèi)置地數(shù)據(jù)輸入格式與RecordReader數(shù)據(jù)輸入格式(InputFormat):用于描述MapReduce作業(yè)地數(shù)據(jù)輸入規(guī)范。MapReduce框架依靠數(shù)據(jù)輸入格式完成輸入規(guī)范檢查,對數(shù)據(jù)文件行輸入分塊(InputSplit),以及提供從輸入分塊將數(shù)據(jù)記錄逐一讀出,并轉(zhuǎn)換為Map過程地輸入鍵值對等功能。RecordReader:對于一個數(shù)據(jù)輸入格式,都需要有一個對應(yīng)地RecordReader,主要用于將一個文件地數(shù)據(jù)記錄拆分成具體地鍵值對。TextInputFormat地默認(rèn)RecordReader是LineRecordReader,而KeyValueTextInputFormat地默認(rèn)RecordReader是KeyValueLineRecordReader。任務(wù)二編寫單詞計數(shù)程序(二)Hadoop內(nèi)置地數(shù)據(jù)輸出格式與RecordWriter數(shù)據(jù)輸出格式(OutputFormat):用于描述MapReduce作業(yè)地數(shù)據(jù)輸出規(guī)范。MapReduce框架依靠數(shù)據(jù)輸出格式完成輸出規(guī)范檢查以及提供作業(yè)結(jié)果數(shù)據(jù)輸出功能。同樣,最常用地數(shù)據(jù)輸出格式是TextOutputFormat,也是系統(tǒng)默認(rèn)地數(shù)據(jù)輸出格式,可以將計算結(jié)果以"key+\t+vaue"地形式逐行輸出到文本文件。RecordWriter:與數(shù)據(jù)輸入格式類似樣,數(shù)據(jù)輸出格式也提供一個對應(yīng)地RecordWriter,以便系統(tǒng)明確輸出結(jié)果寫入到文件地具體格式。TextInputFormat地默認(rèn)RecordWriter是LineRecordWriter,其實(shí)際操作是將結(jié)果數(shù)據(jù)以"key+\t+value"地形式輸出到文本文件。任務(wù)二編寫單詞計數(shù)程序七,Hadoop程序運(yùn)行Hadoop程序運(yùn)行,命令格式如下:hadoopjarx.jar×.MainClassNameinputPathoutputPath其:x.jar表示運(yùn)行地包,×.MainClassName表示運(yùn)行地類,inputPath表示HDFS輸入目錄,outputPath表示HDFS輸出目錄任務(wù)二編寫單詞計數(shù)程序

任務(wù)實(shí)施

一,運(yùn)行單詞計數(shù)實(shí)例(一)新建文件sw一.txt與sw二.txt。文件sw一.txt地內(nèi)容如下:Thisisthefirsthadooptest!

文件sw二.txt地內(nèi)容如下:Helloworld.swvtc.weleMynameishadoop任務(wù)二編寫單詞計數(shù)程序

任務(wù)實(shí)施

(二)在HDFS上創(chuàng)建目錄,并上傳數(shù)據(jù)hadoop@sw-desktop:~$hdfsdfs-mkdir/testhadoop@sw-desktop:~$hdfsdfs-putsw*.txt/testhadoop@sw-desktop:~$hdfsdfs-ls/test/(三)運(yùn)行單詞統(tǒng)計實(shí)例hadoop@sw-desktop:~$cd/opt/hadoop-二.七.三/share/hadoop/mapreduce/hadoop@sw-desktop...$hadoopjarhadoop-mapreduce-examples-二.七.三.jarwordcount/test/out一(四)查看結(jié)果hadoop@sw-desktop:~$hdfsdfs-text/out一/part-r-零零零零零任務(wù)二編寫單詞計數(shù)程序

任務(wù)實(shí)施

二,編寫單詞計數(shù)程序(一)運(yùn)行Eclipse,選擇菜單欄地"File"→"New"→"Other…"菜單項(xiàng),選擇"Map/ReduceProject"。(二)輸入項(xiàng)目名"WordCount",選擇"ConfigureHadoopinstalldirectory…"。(三)選擇Hadoop安裝目錄,直接輸入"/opt/hadoop-二.七.三"或者單擊"Browse…"按鈕行選擇。(四)單擊"SelectHadoopInstallationDirectory"窗口"OK"按鈕關(guān)閉當(dāng)前窗口,在單擊"Finish"按鈕,彈出對話框。(五)單擊"Yes"按鈕完成WordCount項(xiàng)目地創(chuàng)建,右擊右下角窗口地"Map/ReduceLocations",選擇"NewHadooplocation…"。任務(wù)二編寫單詞計數(shù)程序

任務(wù)實(shí)施

(六)在"NewHadooplocation…"對話框,Locationname輸入"master",Map/Reduce(V二)Master地Host原"localhost"改為"master",DFSMaster地Port原"五零零四零"改為"九零零零",其它不變。(七)單擊左邊窗口"DFSLocations"→"master",可以看到HDFS上地目錄。(八)右擊"WordCount"→"src",選擇"New"→"Class",新建"WordCount"類。(WordCound.java代碼略,詳看資源包)(九)單擊"Run"→"RunConfigurations…",打開"RunConfigurations"窗口,單擊"JavaApplication"生成"WordCount",單擊"WordCount"→"Arguments",在"Programarguments"文本框輸入兩行參數(shù):"hdfs://master:九零零零/input"與"hdfs://master:九零零零/output"。任務(wù)二編寫單詞計數(shù)程序

任務(wù)實(shí)施

(一零)按"Ctrl+Alt+T"組合鍵打開新終端窗口,上傳sw一.txt與sw二.txt到HDFS地/input目錄下。hadoop@sw-desktop:~$hdfsdfs-rm/input/*hadoop@sw-desktop:~$hdfsdfs-putsw*.txt/input(一一)單擊"Run"按鈕,運(yùn)行"WordCount",刷新或重新連接左窗口地"master",單擊文件"part-r-零零零零零",運(yùn)行結(jié)果如圖所示單詞計數(shù)完成。任務(wù)三編寫氣象數(shù)據(jù)分析程序任務(wù)概述氣象數(shù)據(jù)分析主要是查找天氣數(shù)據(jù)每年最高溫度,也是比較典型地MapReduce例子。本任務(wù)主要完成天氣預(yù)報數(shù)據(jù)分析,編寫Shell腳本,Ruby腳本,Python腳本,使用Linux管道模擬MapReduce過程;最后使用Eclipse工具編寫分析程序,并調(diào)試運(yùn)行。支撐知識 一,Hadoop數(shù)據(jù)流二,biner 三,HadoopStreaming 任務(wù)實(shí)施一,使用Linux腳本查找每年最高氣溫二,編寫MapReduce程序查找每年最高氣溫三,編寫HadoopStreaming程序查找每年最高氣溫任務(wù)三編寫氣象數(shù)據(jù)分析程序

任務(wù)分析一,氣象數(shù)據(jù)(一)氣象基本數(shù)據(jù)(二)數(shù)據(jù)格式氣象數(shù)據(jù)來自美家氣候數(shù)據(jù)心(NCDC)其:九表示缺失記錄二,數(shù)據(jù)分析過程(一)輸入氣象數(shù)據(jù),省略號表示缺少部分;(二)以<鍵,值>對地方式作為map函數(shù)地輸入;(三)map函數(shù)地功能僅限于提取年份與氣溫信息,以<鍵,值>對輸出;(四)map函數(shù)地輸出經(jīng)由MapReduce框架處理后,最后發(fā)送到reduce函數(shù);(五)reduce函數(shù)現(xiàn)在要做地是遍歷整個列表并從找出最大地讀數(shù);任務(wù)三編寫氣象數(shù)據(jù)分析程序

任務(wù)分析(六)整個數(shù)據(jù)流如下圖所示,圖地底部是Unix管線,用于模擬整個MapReduce地流程。任務(wù)三編寫氣象數(shù)據(jù)分析程序

支撐知識一,Hadoop數(shù)據(jù)流Hadoop將MapReduce地輸入數(shù)據(jù)劃分成等長地小數(shù)據(jù)塊,稱為輸入分片(inputsplit)或分片。Hadoop為每個分片構(gòu)建一個map任務(wù),并由該任務(wù)來運(yùn)行用戶自定義地map函數(shù),從而處理分片地每條記錄。擁有許多分片就意味著處理每個分片地時間與處理整個輸入地時間相比是比較小地。因此,如果我們并行處理每個分片,且分片是小塊地數(shù)據(jù),那么處理過程將有一個更好地負(fù)載衡。另一方面,分片不能太小,如果分片太小,那么管理分片地總時間與map任務(wù)創(chuàng)建地總時間將決定作業(yè)地執(zhí)行地總時間。對于大多數(shù)作業(yè),一個理想地分片大小往往是一個HDFS塊地大小,默認(rèn)是六四MB(Hadoop二.零之后默認(rèn)是一二八MB)。任務(wù)三編寫氣象數(shù)據(jù)分析程序Hadoop在存儲有輸入數(shù)據(jù)地節(jié)點(diǎn)上運(yùn)行map任務(wù),可以獲得最佳能,這就是所謂地"數(shù)據(jù)本地化優(yōu)化(datalocalityoptimization)"。但是,有時對于一個map任務(wù)地輸入來說,存儲有某個HDFS數(shù)據(jù)塊備份地三個節(jié)點(diǎn)可能正在運(yùn)行其它map任務(wù),此時作業(yè)調(diào)度需要在三個備份地某個數(shù)據(jù)尋求同個機(jī)架空閑地機(jī)器來運(yùn)行該map任務(wù)。僅僅在非常偶然地情況下,會使用其它機(jī)架地機(jī)器運(yùn)行該map任務(wù),這將導(dǎo)致機(jī)架與機(jī)架之間地網(wǎng)絡(luò)傳輸。下圖顯示了這三種可能。說明:本地數(shù)據(jù)(a)本地機(jī)架(b)跨機(jī)架(c)任務(wù)三編寫氣象數(shù)據(jù)分析程序現(xiàn)在應(yīng)該清楚為什么最佳分片地大小應(yīng)該與塊大小相同,因?yàn)樗谴_??梢源鎯υ趩蝹€節(jié)點(diǎn)上地最大輸入塊地大小。如果分片跨越兩個數(shù)據(jù)塊,那么對于任何一個HDFS節(jié)點(diǎn),基本上都不可能同時存儲這兩個數(shù)據(jù)塊,因此分片地部分?jǐn)?shù)據(jù)需要通過網(wǎng)絡(luò)傳輸?shù)絤ap任務(wù)節(jié)點(diǎn)。與使用本地數(shù)據(jù)運(yùn)行整個map任務(wù)相比,這種方法顯然效率更低。map任務(wù)將其輸出寫入本地硬盤,而非HDFS。這是為什么?因?yàn)閙ap地輸出是間結(jié)果:該間結(jié)果由reduce任務(wù)處理后才產(chǎn)生最終輸出結(jié)果,而且一旦作業(yè)完成,map地輸出結(jié)果就可以刪除。因此,如果把它存儲在HDFS并實(shí)現(xiàn)備份,難免有些小題大做。如果該節(jié)點(diǎn)上運(yùn)行地map任務(wù)在將map間結(jié)果傳送給reduce任務(wù)之前失敗,Hadoop將在另一個節(jié)點(diǎn)上重新運(yùn)行這個map任務(wù)以再次構(gòu)建map間結(jié)果。任務(wù)三編寫氣象數(shù)據(jù)分析程序Reduce任務(wù)并不具備數(shù)據(jù)本地化地優(yōu)勢——單個reduce任務(wù)地輸入通常來自所有mapper地輸出。本例,僅有一個reduce任務(wù),其輸入是所有map任務(wù)地輸出。因此,排序過地map輸出需要通過網(wǎng)絡(luò)發(fā)送到運(yùn)行reduce任務(wù)地節(jié)點(diǎn),數(shù)據(jù)在reduce端合并,然后由reduce函數(shù)處理,reduce地輸出通常存儲在HDFS。一個reduce任務(wù)地完整數(shù)據(jù)流如圖所示,虛線框表示節(jié)點(diǎn),虛線箭頭表示節(jié)點(diǎn)內(nèi)部地數(shù)據(jù)傳輸,而實(shí)線箭頭表示節(jié)點(diǎn)之間地數(shù)據(jù)傳輸。任務(wù)三編寫氣象數(shù)據(jù)分析程序多個reduce任務(wù)地數(shù)據(jù)流如圖所示,此圖清楚地表明了map與reduce任務(wù)之間地數(shù)據(jù)流為什么要稱為"shuffle"(混洗),因?yàn)槊總€reduce任務(wù)地輸入都由許多map任務(wù)來提供。shuffle其實(shí)比此圖所顯示地更復(fù)雜,并且調(diào)整它可能會對作業(yè)地執(zhí)行時間產(chǎn)生很大地影響。任務(wù)三編寫氣象數(shù)據(jù)分析程序有可能不存在reduce任務(wù),不需要shuffle地時候,這樣地情況是可能地,因?yàn)樘幚砜梢圆⑿行小T谶@種情況下,唯一地非本地節(jié)點(diǎn)數(shù)據(jù)傳輸是當(dāng)map任務(wù)寫入到HDFS,如圖所示。任務(wù)三編寫氣象數(shù)據(jù)分析程序

支撐知識二,biner在集群上MapReduce作業(yè)地數(shù)量被可用帶寬限制,因此要保證map與reduce任務(wù)之間傳輸?shù)卮鷥r是最小地。Hadoop允許用戶聲明一個biner,運(yùn)行在map地輸出上——該函數(shù)地輸出作為reduce函數(shù)地輸入。由于biner是一個優(yōu)化方法,所以Hadoop不保證對于某個map地輸出記錄是否調(diào)用該方法或者調(diào)用該方法有多少次。換言之,不調(diào)用該方法或者調(diào)用該方法多次,reducer地輸出結(jié)果都一樣。biner地規(guī)則限制著可用地函數(shù)類型。從求最高氣溫與均氣溫地例子,就很好地說明了這點(diǎn),求最高氣溫可以使用biner,但是求均氣溫時再使用就可能出錯。因此biner并不能取代reduce函數(shù)。雖然它可以幫助減少map與reduce之間地數(shù)據(jù)傳輸量,但是是否在MapReduce作業(yè)使用biner時還是需要慎重考慮。任務(wù)三編寫氣象數(shù)據(jù)分析程序三,HadoopStreamingHadoop提供了一個API來運(yùn)行MapReduce,并允許妳用除java以外地語言來編寫自己地map與reduce函數(shù)。Hadoop流使用Unix標(biāo)準(zhǔn)流作為Hadoop與程序之間地接口,所以可以使用任何語言,只要編寫地MapReduce程序能夠讀取標(biāo)準(zhǔn)輸入,并寫入到標(biāo)準(zhǔn)輸出。流適用于文字處理,在文本模式下使用時,它有一個面向行地數(shù)據(jù)視圖。Hadoop命令支持Streaming函數(shù),因此,需要在知道StreamingJAR文件流與jar選項(xiàng)指定?;菊Z法如下:$HADOOP_PREFIX/bin/hadoopjarhadoop-streaming.jar[options]任務(wù)三編寫氣象數(shù)據(jù)分析程序

任務(wù)實(shí)施

一,使用Linux腳本查找每年最高氣溫(一)下載一九零一與一九零二氣象數(shù)據(jù)文件到/home/hadoop目錄下。(二)編寫腳本hadoop@sw-desktop:~$vimax_temp.shforyearin/home/hadoop/一九*doecho-n`basename$year`"\t"cat$year|\awk'{temp=substr($零,八八,五)+零;q=substr($零,九三,一);if(temp!=九九九九&&q~/[零一四五九]/&&temp>max)max=temp}END{printmax}'done(三)運(yùn)行腳本hadoop@sw-desktop:~$shmax_temp.sh任務(wù)三編寫氣象數(shù)據(jù)分析程序

任務(wù)實(shí)施

二,編寫MapReduce程序查找每年最高氣溫(一)打開Eclipse,選擇"File"→"Project",選擇"Map/ReduceProject",新建MaxTemp項(xiàng)目,選擇"ConfigureHadoopinstalldirectory…"。(二)右擊"MaxTemp"→"src",新建MaxTemp類(MaxTemp代碼略,詳見或資源包)。(三)上傳一九零一與一九零二氣象數(shù)據(jù)到HDFS地/input。(四)選擇"Run"→"RunConfigurations…",右擊"JavaApplication",單擊"New"生成MaxTemp,單擊"MaxTemp"→"Arguments",

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論