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

溫馨提示

  • 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

提交評論