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

下載本文檔

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

文檔簡(jiǎn)介

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

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

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

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

一,開(kāi)發(fā)臺(tái)搭建(一)在PC機(jī)上安裝UbuntuDesktop系統(tǒng),創(chuàng)建普通用戶sw。(二)以用戶sw登錄入圖形窗口,按"Ctrl+Alt+T"組合鍵打開(kāi)終端窗口。(三)設(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開(kāi)發(fā)臺(tái)

任務(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開(kāi)發(fā)臺(tái)

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

三,安裝開(kāi)發(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開(kāi)發(fā)包到/root目錄下,安裝Eclipse開(kāi)發(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開(kāi)發(fā)臺(tái)

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

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

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

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

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

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

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

文件sw二.txt地內(nèi)容如下:Helloworld.swvtc.weleMynameishadoop任務(wù)二編寫(xiě)單詞計(jì)數(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)計(jì)實(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ù)二編寫(xiě)單詞計(jì)數(shù)程序

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

二,編寫(xiě)單詞計(jì)數(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"按鈕,彈出對(duì)話框。(五)單擊"Yes"按鈕完成WordCount項(xiàng)目地創(chuàng)建,右擊右下角窗口地"Map/ReduceLocations",選擇"NewHadooplocation…"。任務(wù)二編寫(xiě)單詞計(jì)數(shù)程序

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

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

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

(一零)按"Ctrl+Alt+T"組合鍵打開(kāi)新終端窗口,上傳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é)果如圖所示單詞計(jì)數(shù)完成。任務(wù)三編寫(xiě)氣象數(shù)據(jù)分析程序任務(wù)概述氣象數(shù)據(jù)分析主要是查找天氣數(shù)據(jù)每年最高溫度,也是比較典型地MapReduce例子。本任務(wù)主要完成天氣預(yù)報(bào)數(shù)據(jù)分析,編寫(xiě)Shell腳本,Ruby腳本,Python腳本,使用Linux管道模擬MapReduce過(guò)程;最后使用Eclipse工具編寫(xiě)分析程序,并調(diào)試運(yùn)行。支撐知識(shí) 一,Hadoop數(shù)據(jù)流二,biner 三,HadoopStreaming 任務(wù)實(shí)施一,使用Linux腳本查找每年最高氣溫二,編寫(xiě)MapReduce程序查找每年最高氣溫三,編寫(xiě)HadoopStreaming程序查找每年最高氣溫任務(wù)三編寫(xiě)氣象數(shù)據(jù)分析程序

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

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

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

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

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

一,使用Linux腳本查找每年最高氣溫(一)下載一九零一與一九零二氣象數(shù)據(jù)文件到/home/hadoop目錄下。(二)編寫(xiě)腳本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ù)三編寫(xiě)氣象數(shù)據(jù)分析程序

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

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

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論