第章Hadoo-分布式大數(shù)據(jù)系統(tǒng)_第1頁
第章Hadoo-分布式大數(shù)據(jù)系統(tǒng)_第2頁
第章Hadoo-分布式大數(shù)據(jù)系統(tǒng)_第3頁
第章Hadoo-分布式大數(shù)據(jù)系統(tǒng)_第4頁
第章Hadoo-分布式大數(shù)據(jù)系統(tǒng)_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費(fèi)閱讀

付費(fèi)下載

下載本文檔

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

文檔簡介

云計(jì)算與大數(shù)據(jù)技術(shù)

人民郵電出版社王鵬黃焱安俊秀張逸琴編著

目錄第1章云計(jì)算與大數(shù)據(jù)基礎(chǔ)第2章云計(jì)算與大數(shù)據(jù)的相關(guān)技術(shù)第3章虛擬化技術(shù)第4章集群系統(tǒng)基礎(chǔ)第5章MPI—面向計(jì)算第6章Hadoop—分布式大數(shù)據(jù)系統(tǒng)第7章HPCC—面向數(shù)據(jù)的高性能計(jì)算集群系統(tǒng)第8章Storm—基于拓?fù)涞牧鲾?shù)據(jù)實(shí)時(shí)計(jì)算系統(tǒng)第9章服務(wù)器與數(shù)據(jù)中心第10章云計(jì)算大數(shù)據(jù)仿真技術(shù)CONTENTS第6章Hadoop—分布式大數(shù)據(jù)系統(tǒng)第6章Hadoop—分布式大數(shù)據(jù)系統(tǒng)《云計(jì)算與大數(shù)據(jù)技術(shù)》

第6章Hadoop—分布式大數(shù)據(jù)系統(tǒng)6.1Hadoop概述6.2HDFS6.2.1HDFS文件系統(tǒng)的原型GFS6.2.2HDFS文件的基本結(jié)構(gòu)6.2.3HDFS的存儲過程6.3MapReduce編程框架

6.3.1MapReduce的發(fā)展歷史6.3.2MapReduce的基本工作過程6.3.3LISP中的MapReduce6.3.4MapReduce的特點(diǎn)6.4實(shí)現(xiàn)Map/Reduce的C語言實(shí)例6.5建立Hadoop開發(fā)環(huán)境6.5.1相關(guān)準(zhǔn)備工作6.5.2JDK的安裝配置6.5.3下載、解壓Hadoop,配置Hadoop環(huán)境變量6.5.4修改Hadoop配置文件6.5.5將配置好的Hadoop文件復(fù)制到其他節(jié)點(diǎn)6.5.6啟動、停止Hadoop6.5.7在Hadoop系統(tǒng)上運(yùn)行測試程序WordCountHadoop是由Apache軟件基金會研發(fā)的一種開源、高可靠、伸縮性強(qiáng)的分布式計(jì)算系統(tǒng),主要用于對大于1TB的海量數(shù)據(jù)的處理。Hadoop采用Java語言開發(fā),是對Google的MapReduce核心技術(shù)的開源實(shí)現(xiàn)。目前Hadoop的核心模塊包括系統(tǒng)HDFS(HadoopDistributedFileSystem,Hadoop分布式文件系統(tǒng))和分布式計(jì)算框架MapReduce,這一結(jié)構(gòu)實(shí)現(xiàn)了計(jì)算和存儲的高度耦合,十分有利于面向數(shù)據(jù)的系統(tǒng)架構(gòu),因此已成為大數(shù)據(jù)技術(shù)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。Hadoop設(shè)計(jì)時(shí)有以下的幾點(diǎn)假設(shè):服務(wù)器失效是正常的;存儲和處理的數(shù)據(jù)是海量的;文件不會被頻繁寫入和修改;機(jī)柜內(nèi)的數(shù)據(jù)傳輸速度大于機(jī)柜間的數(shù)據(jù)傳輸速度;海量數(shù)據(jù)的情況下移動計(jì)算比移動數(shù)據(jù)更高效。6.1Hadoop概述Hadoop是Apache開源組織的分布式計(jì)算系統(tǒng),其分為第一代Hadoop和第二代Hadoop。第一代Hadoop包含0.20.x、0.21.x、0.22.x三個(gè)版本,0.20.x最后演化成了1.0.x版本,第二代Hadoop包含0.23.x和2.x兩個(gè)版本,2.x本版比0.23.x版本增加了NameNodeHA和Wire-compatibility兩個(gè)特性,版本發(fā)展如圖6.1所示。圖6.1Hadoop本版發(fā)展路線6.1Hadoop概述Hadoop與MPI在數(shù)據(jù)處理上的差異主要體現(xiàn)在數(shù)據(jù)存儲與數(shù)據(jù)處理在系統(tǒng)中位置不同,MPI是計(jì)算與存儲分離,Hadoop是計(jì)算向存儲遷移,如圖6.2所示。圖6.2Hadoop與MPI在數(shù)據(jù)處理上的差異6.1Hadoop概述在MPI中數(shù)據(jù)存儲的節(jié)點(diǎn)和數(shù)據(jù)處理的節(jié)點(diǎn)往往是不同的,一般在每次計(jì)算開始時(shí)MPI需要從數(shù)據(jù)存儲節(jié)點(diǎn)讀取需要處理的數(shù)據(jù)分配給各個(gè)計(jì)算節(jié)點(diǎn)對數(shù)據(jù)進(jìn)行處理,因此MPI中數(shù)據(jù)存儲和數(shù)據(jù)處理是分離的。對于計(jì)算密集型的應(yīng)用MPI能表現(xiàn)出良好的性能,但對于處理TB級數(shù)據(jù)的數(shù)據(jù)密集型應(yīng)用由于網(wǎng)絡(luò)數(shù)據(jù)傳輸速度很慢,MPI的性能會大大降低,甚至?xí)讲豢扇淌艿牡夭?,所以對于?gòu)建在MPI上的并行計(jì)算系統(tǒng)網(wǎng)絡(luò)通訊速度一直是一個(gè)重要的性能指標(biāo),用“計(jì)算換通信”也是MPI并行程序設(shè)計(jì)中的基本原則。6.1Hadoop概述在Hadoop中由于有HDFS文件系統(tǒng)的支持,數(shù)據(jù)是分布式存儲在各個(gè)節(jié)點(diǎn)的,計(jì)算時(shí)各節(jié)點(diǎn)讀取存儲在自己節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行處理,從而避免了大量數(shù)據(jù)在網(wǎng)絡(luò)上的傳遞,實(shí)現(xiàn)“計(jì)算向存儲的遷移”。6.2HDFSHadoop系系統(tǒng)統(tǒng)實(shí)實(shí)現(xiàn)現(xiàn)對對大大數(shù)數(shù)據(jù)據(jù)的的自自動動并并行行處處理理,,是是一一種種數(shù)數(shù)據(jù)據(jù)并并行行方方法法,,這這種種方方法法實(shí)實(shí)現(xiàn)現(xiàn)自自動動并并行行處處理理時(shí)時(shí)需需要要對對數(shù)數(shù)據(jù)據(jù)進(jìn)進(jìn)行行劃劃分分,,而而對對數(shù)數(shù)據(jù)據(jù)的的劃劃分分在在Hadoop系系統(tǒng)統(tǒng)中中從從數(shù)數(shù)據(jù)據(jù)的的存存儲儲就就開開始始了了,,因因此此文文件件系系統(tǒng)統(tǒng)是是Hadoop系系統(tǒng)統(tǒng)的的重重要要組組成成部部分分,,也也是是Hadoop實(shí)實(shí)現(xiàn)現(xiàn)自自動動并并行行框框架架的的基基礎(chǔ)礎(chǔ)。。Hadoop的的文文件件系系統(tǒng)統(tǒng)稱稱為為HDFS((HadoopDistributedFileSystem))。。6.2.1HDFS文件系系統(tǒng)的原原型GFSHadoop中中的HDFS原原型來自自Google文文件系系統(tǒng)(GoogleFileSystem,GFS),為了了滿足Google迅迅速增長長的數(shù)據(jù)據(jù)處理要要求,Google設(shè)設(shè)計(jì)并實(shí)實(shí)現(xiàn)了GFS。。Google文文件系統(tǒng)統(tǒng)是一個(gè)個(gè)可擴(kuò)展展的分布布式文件件系統(tǒng),,用于對對大量數(shù)數(shù)據(jù)進(jìn)行行訪問的的大型、、分布式式應(yīng)用。。它運(yùn)行于于廉價(jià)的的普通硬硬件上,,但可以以提供容容錯(cuò)功能能。它可可以給大大量的用用戶提供供總體性性能較高高的服務(wù)務(wù),也可可以提供供容錯(cuò)功功能。我們認(rèn)為為GFS是一種種面向不不可信服服務(wù)器節(jié)節(jié)點(diǎn)而設(shè)設(shè)計(jì)的文文件系統(tǒng)統(tǒng)。谷歌“三三寶”是“Google文文件系統(tǒng)統(tǒng)”、“BigTable大表表”、“MapReduce算算法”,有了了自己的的文件系系統(tǒng),谷谷歌就可可以有效效地組織織龐大的的數(shù)據(jù)、、服務(wù)器器和存儲儲,并用用它們工工作。作作為谷歌歌“三寶寶”的其其中之一一,GFS的技技術(shù)優(yōu)勢勢不言而而喻。6.2.1HDFS文件系系統(tǒng)的原原型GFSGFS為為分布式式結(jié)構(gòu),,它是一一個(gè)高度容錯(cuò)錯(cuò)網(wǎng)絡(luò)文文件系統(tǒng)統(tǒng),主要由由一個(gè)Master((主)和和眾多chunkserver(大大塊設(shè)備備)構(gòu)成成的,體體系結(jié)構(gòu)構(gòu)如圖6.3所所示。圖6.3GFS的體體系結(jié)構(gòu)構(gòu)6.2.1HDFS文件系系統(tǒng)的原原型GFS下面簡單單描述一一下GFS的的工作過過程。(1)客客戶端使使用固定定大小的的塊將應(yīng)應(yīng)用程序序指定的的文件名名和字節(jié)節(jié)偏移轉(zhuǎn)轉(zhuǎn)換成文文件的一一個(gè)塊索索引,向向Master發(fā)送包包含文件件名和塊塊索引的的請求。。(2)Master收收到客戶戶端發(fā)來來的請求求,Master向塊塊服務(wù)器器發(fā)出指指示,同同時(shí)時(shí)刻刻監(jiān)控眾眾多chunkserver的狀態(tài)態(tài)。chunkserver緩存Master從從客戶端端收到的的文件名名和塊索索引等信信息。6.2.1HDFS文件系系統(tǒng)的原原型GFS(3)Master通通過和chunkserver的交交互,向向客戶端端發(fā)送chunk-handle和和副本位位置。其其中文件件被分成成若干個(gè)個(gè)塊,而而每個(gè)塊塊都是由由一個(gè)不不變的、、全局惟惟一的64位的的chunk-handle標(biāo)識。。Handle是由Master在在塊創(chuàng)建建時(shí)分配配的。而而出于安安全性考考慮,每每一個(gè)文文件塊都都要被復(fù)復(fù)制到多多個(gè)chunkserver上,一一般默認(rèn)認(rèn)3個(gè)副副本。(4)客客戶端向向其中的的一個(gè)副副本發(fā)出出請求,,請求指指定了chunkhandle((chunkserver以以chunkhandle標(biāo)識chunk)和和塊內(nèi)的的一個(gè)字字節(jié)區(qū)間間。(5)客客戶端從從chunkserver獲獲得塊數(shù)數(shù)據(jù),任任務(wù)完成成。6.2.1HDFS文件系系統(tǒng)的原原型GFS通常Client可以以在一個(gè)個(gè)請求中中詢問多多個(gè)chunk的地址址,而Master也也可以很很快回應(yīng)應(yīng)這些請請求。GFS是是可以被被多個(gè)用用戶同時(shí)時(shí)訪問的的,一般般情況下下,Application和chunkserver是可以以在同一一臺機(jī)子子上的,,主要的的數(shù)據(jù)流流量是通通過Application和chunkserver之間,,數(shù)據(jù)訪訪問的本本地性極極大地減減少了Application與Master之之間的交交互訪問問,減少少了Master的負(fù)負(fù)荷量,,提高了了文件系系統(tǒng)的性性能。6.2.1HDFS文件系系統(tǒng)的原原型GFS客戶端從從來不會會從Master讀和和寫文件件數(shù)據(jù)。。客戶端端只是詢詢問Master它應(yīng)應(yīng)該和哪哪個(gè)chunkserver聯(lián)系系。Client在一一段限定定的時(shí)間間內(nèi)將這這些信息息緩存,,在后續(xù)續(xù)的操作作中客戶戶端直接接和chunkserver交互。。由于Master對對于讀和和寫的操操作極少少,所以以極大地地減小了了Master的工作作負(fù)荷,,真正提提高了Master的的利用性性能。Master保保存著三三類元數(shù)數(shù)據(jù)(metadata)::文件名名和塊的的名字空空間、從從文件到到塊的映映射、副副本位置置。所有有的metadata都放在在內(nèi)存中中。操作作日志的的引入可可以更簡簡單、更更可靠地地更新Master的的信息。。6.2.1HDFS文件系系統(tǒng)的原原型GFS為GFS的控制制和神經(jīng)經(jīng)系統(tǒng),,副本為為Master的備份份,Chunk主要用用來和用用戶交換換數(shù)據(jù)。。網(wǎng)絡(luò)中中的主機(jī)機(jī)癱瘓,,不會對對整個(gè)系系統(tǒng)造成成大的影影響,替替換上去去的主機(jī)機(jī)會自動動重建數(shù)數(shù)據(jù)。即即使Master癱瘓瘓,也會會有Shadow作為為替補(bǔ),,并且Shadow在在一定時(shí)時(shí)候也會會充當(dāng)Master來來提供控控制和數(shù)數(shù)據(jù)交換換。Google每天天有大量量的硬盤盤損壞,,但是由由于有GFS,,這些硬硬盤的損損壞是允允許的。。有人形象地比比喻:分布式式的文件系統(tǒng)統(tǒng)被分塊為很很多細(xì)胞單元元,一旦細(xì)胞胞損壞,神經(jīng)經(jīng)系統(tǒng)(Master))會迅速發(fā)現(xiàn)現(xiàn)并有相應(yīng)的的冗余措施來來使系統(tǒng)正常常運(yùn)行,這些些細(xì)胞可以看看作很多GFS主機(jī)。這這一工作方式式就是人類大大腦的工作方方式。文文件系統(tǒng)的原原型GFS當(dāng)然,作為Google的技術(shù)術(shù)基石,GFS可以給大量的的用戶提供總總體性能較高高的服務(wù),具有以下優(yōu)勢勢:(1)Google采用用的存儲方法法是大量、分分散的普通廉廉價(jià)服務(wù)器的的存儲方式,,極大降低了了成本。(2)對大文文件數(shù)據(jù)快速速存取,這個(gè)個(gè)毫無疑問是是可以達(dá)到的的。(3)容易擴(kuò)擴(kuò)展,它是成成本很低的普普通電腦,支支持動態(tài)插入入節(jié)點(diǎn);(4)容錯(cuò)能能力強(qiáng),它的的數(shù)據(jù)同時(shí)會會在多個(gè)chunkserver上上進(jìn)行備份,,具有相當(dāng)強(qiáng)強(qiáng)的容錯(cuò)性;;(5)高效訪訪問,它是通通過Bigtable來實(shí)現(xiàn)的,,它是GoogleFileSystem上層的結(jié)構(gòu)構(gòu)。GFS在在實(shí)現(xiàn)分布式式文件系統(tǒng)的的做法上面很很多都是簡單單的,但是確確實(shí)非常高效效。(6)GFS相對于HDFS穩(wěn)定性性是無庸置疑疑的,并在Google系統(tǒng)中得到到了采用且穩(wěn)穩(wěn)定的運(yùn)行。。文文件的基本結(jié)結(jié)構(gòu)HDFS是一一種典型的主從式的分布布式文件系統(tǒng)統(tǒng),該文件系統(tǒng)統(tǒng)完全是仿照照Google的GFS文件系統(tǒng)而而設(shè)計(jì)的,HDFS的架架構(gòu)如圖6.4所示。圖6.4HDFS的的架構(gòu)文文件的基本結(jié)結(jié)構(gòu)HDFS由一一個(gè)名叫Namenode的主節(jié)點(diǎn)點(diǎn)和多個(gè)名叫叫Datanode的子子節(jié)點(diǎn)組成。。Namenode存儲著著文件系統(tǒng)的的元數(shù)據(jù),這這些元數(shù)據(jù)包包括文件系統(tǒng)統(tǒng)的名字空間間等,向用戶戶映射文件系系統(tǒng),并負(fù)責(zé)責(zé)管理文件的的存儲等服務(wù)務(wù),但實(shí)際的的數(shù)據(jù)并不存存放在Namenode。Namenode的的作用就像是是文件系統(tǒng)的的總指揮,并并向訪問文件件系統(tǒng)的客戶戶機(jī)提供文件件系統(tǒng)的映射射,這種做法法并不是Google或或Hadoop的創(chuàng)新,,這和傳統(tǒng)并并行計(jì)算系統(tǒng)統(tǒng)中的單一系系統(tǒng)映像(SingleSystemImage)的的做法相同。。HDFS中的的Datanode用于于實(shí)際對數(shù)據(jù)據(jù)的存放,對對Datanode上數(shù)數(shù)據(jù)的訪問并并不通過Namemode,而是與與用戶直接建建立數(shù)據(jù)通信信。Hadoop啟動后我們們能看到Namenode和Datanode這兩個(gè)進(jìn)程程。文文件的基本結(jié)結(jié)構(gòu)HDFS的工工作過程是這樣的:用戶請求創(chuàng)建建文件的指令令由Namenode進(jìn)進(jìn)行接收,Namenode將存儲儲數(shù)據(jù)的Datanode的IP返返回給用戶,,并通知其他他接收副本的的Datanode,由由用戶直接與與Datanode進(jìn)行行數(shù)據(jù)傳送。。Namenode同時(shí)時(shí)存儲相關(guān)的的元數(shù)據(jù)。整個(gè)文件系統(tǒng)統(tǒng)采用標(biāo)準(zhǔn)TCP/IP協(xié)議通信,,實(shí)際是架設(shè)設(shè)在Linux文件系統(tǒng)統(tǒng)上的一個(gè)上上層文件系統(tǒng)統(tǒng)。HDFS上的一個(gè)典典型文件大小小一般都在G字節(jié)至T字字節(jié)。文文件的基本結(jié)結(jié)構(gòu)主從式是云計(jì)計(jì)算系統(tǒng)的一一種典型架構(gòu)構(gòu)方法,系統(tǒng)統(tǒng)通過主節(jié)點(diǎn)點(diǎn)屏蔽底層的的復(fù)雜結(jié)構(gòu),,并向用戶提提供方便的文文件目錄映射射。有些改進(jìn)進(jìn)的主從式架架構(gòu)可能會采采用分層的主主從式方法,,以減輕主節(jié)節(jié)點(diǎn)的負(fù)荷。。的的存儲過程HDFS在對對一個(gè)文件進(jìn)進(jìn)行存儲時(shí)有有兩個(gè)重要的的策略:一個(gè)是副本策略,一個(gè)是分塊策略。副本策略保保證了文件件存儲的高高可靠性;;分塊策略保保證數(shù)據(jù)并并發(fā)讀寫的的效率并且且是MapReduce實(shí)現(xiàn)現(xiàn)并行數(shù)據(jù)據(jù)處理的基基礎(chǔ)。6.2.3HDFS的存儲儲過程HDFS的的分塊策略略:通常HDFS在存存儲一個(gè)文文件會將文文件切為64MB大大小的塊來來進(jìn)行存儲儲,數(shù)據(jù)塊塊會被分別別存儲在不不同的Datanode節(jié)點(diǎn)點(diǎn)上,這一一過程其實(shí)實(shí)就是一種種數(shù)據(jù)任務(wù)務(wù)的切分過過程,在后后面對數(shù)據(jù)據(jù)進(jìn)行MapReduce操操作時(shí)十分分重要,同同時(shí)數(shù)據(jù)被被分塊存儲儲后在數(shù)據(jù)據(jù)讀寫時(shí)能能實(shí)現(xiàn)對數(shù)數(shù)據(jù)的并發(fā)發(fā)讀寫,提提高數(shù)據(jù)讀讀寫效率。。HDFS采采用64MB這樣較較大的文件件分塊策略有以下3個(gè)個(gè)優(yōu)點(diǎn):(1)降低低客戶端與與主服務(wù)器器的交互代代價(jià);(2)降低低網(wǎng)絡(luò)負(fù)載載;(3)減少少主服務(wù)器器中元數(shù)據(jù)據(jù)的大小。。6.2.3HDFS的存儲儲過程HDFS的的副本策略略:HDFS對對數(shù)據(jù)塊典典型的副本本策略為3個(gè)副本,,第一個(gè)副本本存放在本本地節(jié)點(diǎn),,第二個(gè)副本本存放在同同一個(gè)機(jī)架架的另一個(gè)個(gè)節(jié)點(diǎn),第三個(gè)本副副本存放在在不同機(jī)架架上的另一一個(gè)節(jié)點(diǎn)。。這樣的副本本策略保證證了在HDFS文件件系統(tǒng)中存存儲的文件件具有很高高的可靠性性。6.2.3HDFS的存儲儲過程一個(gè)文件寫寫入HDFS的基本本過程可以描述如如下:寫入操作首首先由Namenode為該該文件創(chuàng)建建一個(gè)新的的記錄,該該記錄為文文件分配存存儲節(jié)點(diǎn)包包括文件的的分塊存儲儲信息,在在寫入時(shí)系系統(tǒng)會對文文件進(jìn)行分分塊,文件件寫入的客客戶端獲得得存儲位置置的信息后后直接與指指定的Datanode進(jìn)行行數(shù)據(jù)通信信,將文件件塊按Namenode分配配的位置寫寫入指定的的Datanode,數(shù)據(jù)塊塊在寫入時(shí)時(shí)不再通過過Namenode,因此Namenode不不會成為數(shù)數(shù)據(jù)通信的的瓶頸。6.3MapReduce編程框架架在云計(jì)算和和大數(shù)據(jù)技技術(shù)領(lǐng)域被被廣泛提到到并被成功功應(yīng)用的一一項(xiàng)技術(shù)就就是MapReduce。MapReduce是Google系系統(tǒng)和Hadoop系統(tǒng)中的的一項(xiàng)核心心技術(shù)。6.3.1MapReduce的發(fā)發(fā)展歷史MapReduce出現(xiàn)的歷歷史要追述述到1956年,圖圖靈獎獲得得者著名的的人工智能能專家McCarthy首次次提出了LISP語語言的構(gòu)想想,而在LISP語語言中就包包含了現(xiàn)在在我們所采采用的MapReduce功功能。LISP語語言是一種種用于人工工智能領(lǐng)域域的語言,,在人工智智能領(lǐng)域有有很多的應(yīng)應(yīng)用,LISP在1956年年設(shè)計(jì)時(shí)主主要是希望望能有效地地進(jìn)行“符符號運(yùn)算””。LISP是是一種表處處理語言,,其邏輯簡簡單但結(jié)構(gòu)構(gòu)不同于其其他的高級級語言。1960年年,McCarthy更是極極有預(yù)見性性地提出::“今后計(jì)計(jì)算機(jī)將會會作為公共共設(shè)施提供供給公眾””,這一觀觀點(diǎn)已與現(xiàn)現(xiàn)在人們對對云計(jì)算的的定義極為為相近了,,所以我們們把McCarthy稱為““云計(jì)算之之父”。MapReduce在McCarthy提出時(shí)時(shí)并沒有考考慮到其在在分布式系系統(tǒng)和大數(shù)數(shù)據(jù)上會有有如此大的的應(yīng)用前景景,只是作作為一種函函數(shù)操作來來定義的。。6.3.1MapReduce的發(fā)發(fā)展歷史2004年年Google公司司的Dean發(fā)表文文章將MapReduce這這一編程模模型在分布布式系統(tǒng)中中的應(yīng)用進(jìn)進(jìn)行了介紹紹,從此MapRuduce分布式編編程模型進(jìn)進(jìn)入了人們們的視野。??梢哉J(rèn)為分分布式MapReduce是是由Google公公司首先提提出的。Hadoop跟進(jìn)了了Google的這這一思想,,可以認(rèn)為為Hadoop是一一個(gè)開源版版本的Google系統(tǒng),正正是由于Hadoop的跟進(jìn)進(jìn)才使普通通用戶得以以開發(fā)自己己的基于MapReduce框架的云云計(jì)算應(yīng)用用系統(tǒng)。6.3.2MapReduce的基基本工作過過程MapReduce是一種處處理大數(shù)據(jù)據(jù)集的編程程模式,它它借鑒了最最早出現(xiàn)在在LISP語言和其其他函數(shù)語語言中的map和reduce操作,,MapReduce的基本本過程為::用戶通過map函數(shù)數(shù)處理key/value對對,從而產(chǎn)產(chǎn)生一系列列不同的key/value對,reduce函數(shù)將key值相相同的key/value對對進(jìn)行合并并?,F(xiàn)實(shí)中中的很多處處理任務(wù)都都可以利用用這一模型型進(jìn)行描述述。通過MapReduce框架能實(shí)實(shí)現(xiàn)基于數(shù)數(shù)據(jù)切分的的自動并行行計(jì)算,大大大簡化了了分布式編編程的難度度,并為在在相對廉價(jià)價(jià)的商品化化服務(wù)器集集群系統(tǒng)上上實(shí)現(xiàn)大規(guī)規(guī)模的數(shù)據(jù)據(jù)處理提供供了可能。。6.3.2MapReduce的基基本工作過過程MapReduce的過程其其實(shí)非常簡簡單,我們們用一個(gè)實(shí)實(shí)際的例子子來說明MapReduce的編程模模型。假設(shè)設(shè)我們需要要對一個(gè)文文件example.txt中出現(xiàn)的的單詞次數(shù)數(shù)進(jìn)行統(tǒng)計(jì)計(jì),這就是是著名的wordcount例子,在在這個(gè)例子子中MapReduce的編編程模型可可以這樣來來描述:用戶需要處處理的文件件example.txt已已被分為多多個(gè)數(shù)據(jù)片片存儲在集集群系統(tǒng)中中不同的節(jié)節(jié)點(diǎn)上了,,用戶先使使用一個(gè)Map函數(shù)數(shù)—Map(example.txt,文件件內(nèi)容),,在這個(gè)Map函數(shù)數(shù)中key值為example.txt,key通常是是指一個(gè)具具有唯一值值的標(biāo)識,,value值就是是example.txt文文件中的內(nèi)內(nèi)容。Map操作作程序通常常會被分布布到存有文文件example.txt數(shù)據(jù)片段段的節(jié)點(diǎn)上上發(fā)起,這這個(gè)Map操作將產(chǎn)產(chǎn)生一組中中間key/value對((word,count)),6.3.2MapReduce的基基本工作過過程這里的word代表表出現(xiàn)在文文件example.txt片段中的的任一個(gè)單單詞,每個(gè)個(gè)Map操操作所產(chǎn)生生的key/value對只只代表example.txt一部分分內(nèi)容的統(tǒng)統(tǒng)計(jì)值。Reduce函數(shù)將將接收集群群中不同節(jié)節(jié)點(diǎn)Map函數(shù)生成成的中間key/value對,并將將Key相相同的key/value對對進(jìn)行合并并,在這個(gè)個(gè)例子中Reduce函數(shù)將將對所有key值相相同的value值值進(jìn)行求和和合并,最最后輸出的的key/value對就是是(word,count),其中中count就是這這個(gè)單詞在在文件example.txt中出現(xiàn)現(xiàn)的總的次次數(shù)。的的基基本本工工作作過過程程下面面我我們們通通過過一一個(gè)個(gè)簡單單例例子子來講講解解MapReduce的的基基本本原原理理。1..任任務(wù)務(wù)的的描描述述來自自江江蘇蘇、、浙浙江江、、山山東東三三個(gè)個(gè)省省的的9所所高高校校聯(lián)聯(lián)合合舉舉行行了了一一場場編編程程大大賽賽,,每每個(gè)個(gè)省省有有3所所高高校校參參加加,,每每所所高高校校各各派派5名名隊(duì)隊(duì)員員參參賽賽,,各各所所高高校校的的比比賽賽平平均均成成績績?nèi)缛绫肀?.1所所示示。。江蘇省浙江省山東省南京大學(xué)90浙江大學(xué)95山東大學(xué)92東南大學(xué)93浙江工業(yè)大學(xué)84中國海洋大學(xué)85河海大學(xué)84寧波大學(xué)88青島大學(xué)87表6.1原原始始比比賽賽成成績績的的基基本本工工作作過過程程我們們可可以以用用如如表表6.2所所示示的的形形式式來來表表示示成成績績,,這這樣樣每每所所高高校校就就具具備備了了所所屬屬省省份份和和平平均均分分?jǐn)?shù)數(shù)這這兩兩個(gè)個(gè)屬屬性性,,即即<高高校校名名稱稱::{所所屬屬省省份份,,平平均均分分?jǐn)?shù)數(shù)}>。。南京大學(xué):{江蘇省,90}東南大學(xué):{江蘇省,93}河海大學(xué):{江蘇省,84}浙江大學(xué):{浙江省,95}浙江工業(yè)大學(xué):{浙江省,84}寧波大學(xué):{浙江省,88}山東大學(xué):{山東省,92}中國海洋大學(xué):{山東省,85}青島大學(xué):{山東省,87}表6.2增增加加屬屬性性信信息息后后的的比比賽賽成成績績的的基基本本工工作作過過程程統(tǒng)計(jì)計(jì)各各個(gè)個(gè)省省份份高高校校的的平平均均分分?jǐn)?shù)數(shù)時(shí)時(shí),,高高校校的的名名稱稱并并不不是是很很重重要要,,我我們們略略去去高高校校名名稱稱,,如如表表6.3所所示示。。江蘇省,90江蘇省,93江蘇省,84浙江省,95浙江省,84浙江省,88山東省,92山東省,85山東省,87表6.3略略去去高高校校名名稱稱后后的的比比賽賽成成績績接下下來來對對各各個(gè)個(gè)省省份份的的高高校校的的成成績績進(jìn)進(jìn)行行匯匯總總,,如如表表6.4所所示示。。江蘇省,90、93、84浙江省,95、84、88山東省,92、85、87表6.4各各省省比比賽賽成成績績匯匯總總的的基基本本工工作作過過程程計(jì)算算求求得得各各省省高高校校的的平平均均值值如如表表6.5所所示示。。表6.5各各省省平平均均成成績績江蘇省,89浙江省,89山東省,88以上上為為計(jì)計(jì)算算各各省省平平均均成成績績的的主主要要步步驟驟,,我我們們可可以以用用MapReduce來來實(shí)實(shí)現(xiàn)現(xiàn),,其其詳詳細(xì)細(xì)步步驟驟如如下下::2..任任務(wù)務(wù)的的MapReduce實(shí)實(shí)現(xiàn)現(xiàn)MapReduce包包含含Map、、Shuffle和和Reduce三三個(gè)個(gè)步步驟驟,,其其中中Shuffle由由Hadoop自自動動完完成成,,Hadoop的的使使用用者者可可以以無無需需了了解解并并行行程程序序的的底底層層實(shí)實(shí)現(xiàn)現(xiàn),,只只需需關(guān)關(guān)注注Map和和Reduce的的實(shí)實(shí)現(xiàn)現(xiàn)。。的的基基本本工工作作過過程程1.MapInput::<高高校校名名稱稱,,{所所屬屬省省份份,,平平均均分分?jǐn)?shù)數(shù)}>在Map部部分分,,我我們們需需要要輸輸入入<Key,Value>數(shù)數(shù)據(jù)據(jù),,這這里里Key是是高高校校的的名名稱稱,,Value是是屬屬性性值值,,即即所所屬屬省省份份和和平平均均分分?jǐn)?shù)數(shù),,如如表表6.6所所示示。。Key:南京大學(xué)Value:{江蘇省,90}Key:東南大學(xué)Value:{江蘇省,93}Key:河海大學(xué)Value:{江蘇省,84}Key:浙江大學(xué)Value:{浙江省,95}Key:浙江工業(yè)大學(xué)Value:{浙江省,84}Key:寧波大學(xué)Value:{浙江省,88}Key:山東大學(xué)Value:{山東省,92}Key:中國海洋大學(xué)Value:{山東省,85}Key:青島大學(xué)Value:{山東省,87}表6.6MapInput數(shù)數(shù)據(jù)據(jù)的的基基本本工工作作過過程程2.MapOutput::<所所屬屬省省份份,,平平均均分分?jǐn)?shù)數(shù)>對所所屬屬省省份份平平均均分分?jǐn)?shù)數(shù)進(jìn)進(jìn)行行重重分分組組,,去去除除高高校校名名稱稱,,將將所所屬屬省省份份變變?yōu)闉镵ey,,平平均均分分?jǐn)?shù)數(shù)變變?yōu)闉閂alue,,如如表表6.7所所示示。。Key:江蘇省Value:90Key:江蘇省Value:93Key:江蘇省Value:84Key:浙江省Value:95Key:浙江省Value:84Key:浙江省Value:88Key:山東省Value:92Key:山東省Value:85Key:山東省Value:87表6.7MapOutput數(shù)數(shù)據(jù)據(jù)的的基基本本工工作作過過程程3.ShuffleOutput:<所屬屬省份份,List((平均均分?jǐn)?shù)數(shù))>Shuffle由Hadoop自自動完完成,,其任任務(wù)是是實(shí)現(xiàn)現(xiàn)Map,,對Key進(jìn)行行分組組,用用戶可可以獲獲得Value的列列表,,即List<Value>,如如表6.8所示示。Key:江蘇省List<Value>:90、93、84Key:浙江省List<Value>:95、84、88Key:山東省List<Value>:92、85、87表6.8ShuffleOutput數(shù)據(jù)據(jù)4.ReduceInput:<所屬屬省份份,List((平均均分?jǐn)?shù)數(shù))>表6.8中中的內(nèi)內(nèi)容將將作為為Reduce任務(wù)務(wù)的輸輸入數(shù)數(shù)據(jù),,即從從Shuffle任任務(wù)中中獲得得的((Key,List<Value>))。6.3.2MapReduce的基基本工工作過過程5.ReduceOutput::<所所屬省省份,,平均均分?jǐn)?shù)數(shù)>Reduce任任務(wù)的的功能能是完完成用用戶的的計(jì)算算邏輯輯,,,這里里的任任務(wù)是是計(jì)算算每個(gè)個(gè)省份份的高高校學(xué)學(xué)生的的比賽賽平均均成績績,獲獲得的的最終終結(jié)果果如表表6.9所所示。。江蘇省,89浙江省,89山東省,88表6.9ReduceOutput數(shù)數(shù)據(jù)中中的MapReduce為了進(jìn)進(jìn)一步步理解解MapReduce,,我們們簡單單介紹紹最早早使用用Map和和Reduce的LISP語語言中中的Map和Reduce操操作。。下面的的LISP語句句定義義的這這個(gè)Map操作作是將將向量量(12345)和和向量量(109876))進(jìn)行行相乘乘的操操作,,輸出出也為為向量量(1018242830))。(map'vector#*#(12345)#(109876))->#(1018242830)這個(gè)Map操作作對應(yīng)應(yīng)于向向量到到向量量的映映射,,兩個(gè)個(gè)向量量按乘乘積關(guān)關(guān)系進(jìn)進(jìn)行映映射。。中中的MapReduce下面的的LISP語句句定義義的這這個(gè)Reduce操操作是是將向向量(中中的元元素進(jìn)進(jìn)行求求和的的Reduce操作作,輸輸出結(jié)結(jié)果為為55。這個(gè)Reduce操操作對對應(yīng)于于向量量的約約簡,,它將將向量量按求求和的的關(guān)系系約簡簡為一一個(gè)值值??梢钥纯闯觯?,在LISP語語言中中Map和和Reduce只是是作為為一種種操作作定義義,并并沒有有體現(xiàn)現(xiàn)出任任何的的分布布式計(jì)計(jì)算的的特征征。6.3.4MapReduce的特特點(diǎn)MapReduce主要要具有有以下下幾個(gè)個(gè)特點(diǎn):(1))需要要在集集群條條件下下使用用。MapReduce的主主要作作用是是實(shí)現(xiàn)現(xiàn)對大大數(shù)據(jù)據(jù)的分分布式式處理理,其其設(shè)計(jì)計(jì)時(shí)的的基本本要求求就是是在大大規(guī)模模集群群條件件下的的(雖雖然一一些系系統(tǒng)可可以在在單機(jī)機(jī)下運(yùn)運(yùn)行,,但這這種條條件下下只具具有仿仿真運(yùn)運(yùn)行的的意義義),,Google作為為分布布式MapReduce提出出者,,它本本身就就是世世界上上最大大的集集群系系統(tǒng),,所以以MapReduce天天然需需要在在集群群系統(tǒng)統(tǒng)下運(yùn)運(yùn)行才才能有有效。。6.3.4MapReduce的特特點(diǎn)(2))需要要有相相應(yīng)的的分布布式文文件系系統(tǒng)的的支持持。這里要要注意意的是是單獨(dú)獨(dú)的MapReduce模式式并不不具有有自動動的并并行性性能,,就像像它在在LISP語言言中的的表現(xiàn)現(xiàn)一樣樣,它它只有有與相相應(yīng)的的分布布式文文件系系統(tǒng)相相結(jié)合合才能能完美美地體體現(xiàn)MapReduce這種種編程程框架架的優(yōu)優(yōu)勢。。如Google系統(tǒng)統(tǒng)對應(yīng)應(yīng)的分分布式式文件件系統(tǒng)統(tǒng)為GFS,Hadoop系系統(tǒng)對對應(yīng)的的分布布式文文件系系統(tǒng)為為HDFS。MapReduce能實(shí)實(shí)現(xiàn)計(jì)計(jì)算的的自動動并行行化很很大程程度上上是由由于分分布式式文件件系統(tǒng)統(tǒng)在對對文件件存儲儲時(shí)就就實(shí)現(xiàn)現(xiàn)了對對大數(shù)數(shù)據(jù)文文件的的切分分,這這種并并行方方法也也叫數(shù)數(shù)據(jù)并并行方方法。。數(shù)據(jù)據(jù)并行行方法法避免免了對對計(jì)算算任務(wù)務(wù)本身身的人人工切切分,,降低低了編編程的的難度度,而而像MPI往往往需要要人工工對計(jì)計(jì)算任任務(wù)進(jìn)進(jìn)行切切分,,因此此分布布式編編程難難度較較大。。6.3.4MapReduce的特特點(diǎn)(3))可以以在商商品化化集群群條件件下運(yùn)運(yùn)行,,不需需要特特別的的硬件件支持持.和高性性能計(jì)計(jì)算不不同,,基于于MapReduce的的系統(tǒng)統(tǒng)往往往不需需要特特別的的硬件件支持持,按按Google的報(bào)報(bào)道,,他們們的實(shí)實(shí)驗(yàn)系系統(tǒng)中中的節(jié)節(jié)點(diǎn)就就是基基于典典型的的雙核核X86的的系統(tǒng)統(tǒng),配配置2~4GB的內(nèi)內(nèi)存,,網(wǎng)絡(luò)絡(luò)為百百兆網(wǎng)網(wǎng)和千千兆網(wǎng)網(wǎng)構(gòu)成成,存存儲設(shè)設(shè)備的的便宜宜的IDE硬盤盤。6.3.4MapReduce的特特點(diǎn)(4))假設(shè)設(shè)節(jié)點(diǎn)點(diǎn)的失失效為為正常常情況況。傳統(tǒng)的的服務(wù)務(wù)器通通常被被認(rèn)為為是穩(wěn)穩(wěn)定的的,但但在服服務(wù)器器數(shù)量量巨大大或采采用廉廉價(jià)服服務(wù)的的條件件下,,服務(wù)務(wù)器的的實(shí)效效將變變得常常見,,所以以通常常基于于MapReduce的的分布布式計(jì)計(jì)算系系統(tǒng)采采用了了存儲儲備份份、計(jì)計(jì)算備備份和和計(jì)算算遷移移等策策略來來應(yīng)對對,從從而實(shí)實(shí)現(xiàn)在在單節(jié)節(jié)點(diǎn)不不穩(wěn)定定的情情況下下保持持系統(tǒng)統(tǒng)整個(gè)個(gè)的穩(wěn)穩(wěn)定性性。6.3.4MapReduce的特特點(diǎn)(5))適合合對大大數(shù)據(jù)據(jù)進(jìn)行行處理理。由于基基于MapReduce的系系統(tǒng)并并行化化是通通過數(shù)數(shù)據(jù)切切分實(shí)實(shí)現(xiàn)的的數(shù)據(jù)據(jù)并行行,同同時(shí)計(jì)計(jì)算程程序啟啟動時(shí)時(shí)需要要向各各節(jié)點(diǎn)點(diǎn)拷貝貝計(jì)算算程序序,過過小的的文件件在這這種模模式下下工作作反而而會效效率低低下。。Google的實(shí)實(shí)驗(yàn)也也表明明一個(gè)個(gè)由150秒時(shí)時(shí)間完完成的的計(jì)算算任務(wù)務(wù),程程序啟啟動階階段的的時(shí)間間就花花了60秒秒,可可以想想象,,如果果計(jì)算算任務(wù)務(wù)數(shù)據(jù)據(jù)過小小,這這樣的的花費(fèi)費(fèi)是不不值得得的,,同時(shí)時(shí)對過過小的的數(shù)據(jù)據(jù)進(jìn)行行切分分也無無必要要。所所以MapReduce更適適合進(jìn)進(jìn)行大大數(shù)據(jù)據(jù)的處處理。。6.3.4MapReduce的特特點(diǎn)(6))計(jì)算算向存存儲遷遷移。。傳統(tǒng)的的高性性能計(jì)計(jì)算數(shù)數(shù)據(jù)集集中存存儲,,計(jì)算算時(shí)數(shù)數(shù)據(jù)向向計(jì)算算節(jié)點(diǎn)點(diǎn)拷貝貝,而而基于于MapReduce的的分布布式系系統(tǒng)在在數(shù)據(jù)據(jù)存儲儲時(shí)就就實(shí)現(xiàn)現(xiàn)了分分布式式存儲儲,一一個(gè)較較大的的文件件會被被切分分成大大量較較小的的文件件存儲儲于不不同的的節(jié)點(diǎn)點(diǎn),系系統(tǒng)調(diào)調(diào)度機(jī)機(jī)制在在啟動動計(jì)算算時(shí)會會將計(jì)計(jì)算程程序盡盡可能能分發(fā)發(fā)給需需要處處理的的數(shù)據(jù)據(jù)所在在的節(jié)節(jié)點(diǎn)。。計(jì)算算程序序的大大小通通常會會比數(shù)數(shù)據(jù)文文件小小的多多,所所以遷遷移計(jì)計(jì)算的的網(wǎng)絡(luò)絡(luò)代價(jià)價(jià)要比比遷移移數(shù)據(jù)據(jù)小的的多。。6.3.4MapReduce的特特點(diǎn)(7))MapReduce的的計(jì)算算效率率會受受最慢慢的Map任務(wù)務(wù)影響響。由于Reduce操操作的的完成成需要要等待待所有有Map任任務(wù)的的完成成,所所以如如果Map任務(wù)務(wù)中有有一個(gè)個(gè)任務(wù)務(wù)出現(xiàn)現(xiàn)了延延遲,,則整整個(gè)MapReduce操作作將受受最慢慢的Map任務(wù)務(wù)的影影響。。6.4實(shí)實(shí)現(xiàn)Map/Reduce的C語語言實(shí)例例Map/Reduce操作代代表了一一大類的的數(shù)據(jù)處處理操作作方式,,為了讓讓大家對對Map/Reduce的工工作過程程有一個(gè)個(gè)直觀的的了解,,下面的的程序采采用C語語言實(shí)現(xiàn)現(xiàn)了一個(gè)個(gè)簡單經(jīng)經(jīng)典的Map/Reduce計(jì)算,,計(jì)算從控控制臺輸輸入的字字符串中中單詞的的計(jì)數(shù),,這一計(jì)計(jì)算過程程都是在在同一個(gè)個(gè)節(jié)點(diǎn)上上完成的的,并未未實(shí)現(xiàn)計(jì)計(jì)算的并并行化,,歷史上上的Lisp語語言也是是運(yùn)行在在單機(jī)的的上的程程序,這個(gè)例子子的主要要目的是是讓大家家理解這這一操作作的過程程。程序序中的my_map()和my_reduce()函數(shù)數(shù)分別實(shí)實(shí)現(xiàn)了對對字符串串的Map和Reduce操操作。6.4實(shí)實(shí)現(xiàn)Map/Reduce的C語語言實(shí)例例程序6.1輸入:thisismapreducehellomaphelloreduce6.4實(shí)實(shí)現(xiàn)Map/Reduce的C語語言實(shí)例例輸出:Thisismapresults:<this1><is1><map1><reduce1><hello1><map1><hello1><reduce1>Thisisreduceresults:<this1><is1><map2><reduce2><hello2>此運(yùn)行實(shí)實(shí)例中我我們從控控制臺輸輸入字符符串“thisismapreducehellomaphelloreduce”,,程序通通過Map和Reduce過過程對字字符串的的的單詞詞出現(xiàn)的的頻率進(jìn)進(jìn)行統(tǒng)計(jì)計(jì),并輸輸出了結(jié)結(jié)果,這這是一個(gè)個(gè)典型的的Map/Reduce過程程。6.5建建立Hadoop開開發(fā)環(huán)境境本節(jié)使用用三個(gè)Linux虛擬擬機(jī)來構(gòu)構(gòu)建Hadoop集群群環(huán)境,,其中一一個(gè)虛擬擬機(jī)作為為NameNode((Master節(jié)點(diǎn))),另外外兩個(gè)虛虛擬機(jī)作作為DataNode(Slave節(jié)點(diǎn))),如圖圖6.5所示。。在3個(gè)個(gè)節(jié)點(diǎn)下下3個(gè)虛虛擬機(jī)的的機(jī)器名名和IP地址信信息如下下。虛擬機(jī)1:主機(jī)機(jī)名為vm1,,IP為為01,作為為NameNode使使用;虛擬機(jī)2:主機(jī)機(jī)名為vm2,,IP為為02,作為為DataNode使使用;虛擬機(jī)3:主機(jī)機(jī)名為vm3,,IP為為03,作為為DataNode使使用。圖6.5Hadoop集集群配置置相相關(guān)準(zhǔn)備備工作相相關(guān)準(zhǔn)備備工作相相關(guān)準(zhǔn)備備工作(4)新新建用戶戶“hadoop”。。在每個(gè)節(jié)節(jié)點(diǎn)上使使用useradd指指令新建建一個(gè)用用戶hadoop,并并設(shè)置密密碼。useraddhadooppasswdhadoop(5)永永久關(guān)閉閉每個(gè)節(jié)節(jié)點(diǎn)的防防火墻((root權(quán)限限)。在每個(gè)節(jié)節(jié)點(diǎn)上執(zhí)執(zhí)行以下下指令,,這樣將將永久性性的關(guān)閉閉每個(gè)階階段的防防火墻chkconfigiptablesoff//永永久性生生效,重重啟后不不會復(fù)原原相相關(guān)準(zhǔn)備備工作(6)配配置ssh實(shí)現(xiàn)現(xiàn)Hadoop結(jié)點(diǎn)間間用戶的的無密碼碼訪問Hadoop需需要在各各個(gè)結(jié)點(diǎn)點(diǎn)間進(jìn)行行信息傳傳遞,因因此需要要實(shí)現(xiàn)結(jié)結(jié)點(diǎn)間的的無密碼碼訪問,,這與采采用MPI進(jìn)行行并行程程序設(shè)計(jì)計(jì)相同,,否則系系統(tǒng)會不不停地向向你請求求密碼驗(yàn)驗(yàn)證。這里的配配置在各各個(gè)節(jié)點(diǎn)點(diǎn)的hadoop用戶戶下進(jìn)行行。配置過程程與MPI部分分的配置置過程相相關(guān),這這里不再再詳述,,配置完完成后使使用ssh指令令可以在在三個(gè)虛虛擬機(jī)之之間實(shí)現(xiàn)現(xiàn)無密碼碼訪問。。6.5.2JDK的安裝裝配置Hadoop是是采用Java編寫的的,每個(gè)個(gè)虛擬機(jī)機(jī)上均需需要安裝裝Java的JDK,,JDK的安裝裝配置需需在root用用戶下進(jìn)進(jìn)行,具具體步驟驟如下。。(1)在在Sun官方網(wǎng)網(wǎng)站下載載JDK軟件包包jdk-7u45-linux-x64.tar.gz。(2)新新建目錄錄/usr/java,將下下載的JDK軟軟件包進(jìn)進(jìn)行進(jìn)行行解壓。。mkdir/usr/javatar–6.5.2JDK的安裝裝配置(3)配配置Java環(huán)環(huán)境變量量。#setjavaenvironmentexportCLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATHexportPATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH6.5.2JDK的安裝裝配置(4)保保存了Java環(huán)境變變量之后后,在命命令行中中鍵入如如下命令令,使環(huán)環(huán)境變量量生效::source/etc/profile//使環(huán)境境變量設(shè)設(shè)置生效效通過which命令測測試JDK的安安裝是否否成功::whichjava系統(tǒng)顯示示如下信信息:此時(shí)JDK配置置成功,,接下來來可進(jìn)行行Hadoop的安裝裝配置。。6.5.2JDK的安裝裝配置程序6.2publicclasstest{publicstaticvoidmain(Stringargs[]){System.out.println("Thisisahadooptestprogram!JDKsuccessed!");}}6.5.2JDK的安裝裝配置編譯測試試程序::javactest.java運(yùn)行測試試程序::javatest如果輸出出為:Thisisahadooptestprogram!JDKsuccessed!表明JDK已成成功安裝裝,并能能成功編編譯執(zhí)行行Java程序序。下下載、解解壓Hadoop,配配置Hadoop環(huán)境境變量Hadoop集集群中每每個(gè)節(jié)點(diǎn)點(diǎn)的安裝裝、配置置是相同同的,我我們可以以現(xiàn)在一一個(gè)虛擬擬機(jī)上進(jìn)進(jìn)行安裝裝、配置置,然后后將其復(fù)復(fù)制到其其他節(jié)點(diǎn)點(diǎn)的相應(yīng)應(yīng)目錄。。放放置在vm1的的/home/hadoop目錄中中,用hadoop用用戶對其其進(jìn)行解解壓縮::cd/home/hadooptar–下下載、解解壓Hadoop,配配置Hadoop環(huán)境境變量把Hadoop的安裝裝路徑添添加到““/etc/profile”中,,在文件件的末尾尾添下面面的代碼碼,每個(gè)個(gè)節(jié)點(diǎn)均均需要進(jìn)進(jìn)行此步步配置。。#hadoopenvironmentexportPATH=$PATH:$HADOOP_HOME/bin保存了Hadoop環(huán)環(huán)境變量量之后,,在命令令行中鍵鍵入如下下命令,,使環(huán)境境變量生生效:source/etc/profile//使環(huán)環(huán)境變量量設(shè)置生生效修修改Hadoop配置置文件Hadoop的的配置文文件存于于conf文件件夾中,,我們需需要對該該文件夾夾中以下下文件進(jìn)進(jìn)行修改改:hadoop-env.sh、、core-site.xml、mapred-site.xml、、masters、slaves。。(1)修改改hadoop-env.sh文件。。Hadoop的Java環(huán)境境變量在hadoop-env.sh中進(jìn)行設(shè)設(shè)置。使用用vim打打開hadoop-env.sh文件件,找到Java環(huán)環(huán)境變量的的設(shè)置位置置,將其改改為JDK的安裝地地址,保存存并退出。。6.5.4修改Hadoop配置文文件(2)修改core-site.xml文件。core-site.xml用于設(shè)置Hadoop集群的HDFS的地址和端端口號,以以及用于保保存HDFS信息的tmp文件夾,對對HDFS進(jìn)行重新格格式化的時(shí)時(shí)候先行刪刪除tmp中的文件。。新建tmp文件夾:使用vim打開開core-site.xml文件,在<configuration></configuration>之間添加加以下代碼碼:6.5.4修改Hadoop配置文文件<property><name>hadoop.tmp.dir</name><value>/home/hadoop/hadoop-0.21.0/tmp</value></property><property><name>fs.defaultFS</name><value>hdfs://01/:9000</value></property>其中的IP地址需配配置為集群群的NameNode(Master)節(jié)點(diǎn)的的IP,這里“01”。6.5.4修改Hadoop配置文文件(3)修改mapred-site.xml文件件。在mapred-site.xml文文件的在<configuration></configuration>之間添加加以下代碼碼,配置JobTracker的主機(jī)機(jī)名和端口口。<property><name>mapreduce.jobtracker.address</name><value>01:9001</value><description>Nam

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論