版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、云計算與大數(shù)據(jù)技術(shù) 人民郵電出版社王鵬 黃焱 安俊秀 張逸琴 編著 目 錄第1章 云計算與大數(shù)據(jù)基礎(chǔ) 第2章 云計算與大數(shù)據(jù)的相關(guān)技術(shù) 第3章 虛擬化技術(shù) 第4章 集群系統(tǒng)基礎(chǔ) 第5章 MPI面向計算第6章 Hadoop分布式大數(shù)據(jù)系統(tǒng)第7章 HPCC面向數(shù)據(jù)的高性能計算集群系統(tǒng) 第8章 Storm基于拓撲的流數(shù)據(jù)實時計算系統(tǒng)第9章 服務(wù)器與數(shù)據(jù)中心 第10章 云計算大數(shù)據(jù)仿真技術(shù)CONTENTS第6章 Hadoop分布式大數(shù)據(jù)系統(tǒng)第6章 Hadoop分布式大數(shù)據(jù)系統(tǒng)云計算與大數(shù)據(jù)技術(shù) 第6章 Hadoop分布式大數(shù)據(jù)系統(tǒng)6.1Hadoop概述6.2HDFS6.2.1HDFS文件系統(tǒng)的原型GF
2、S6.2.2HDFS文件的基本結(jié)構(gòu)6.2.3HDFS的存儲過程6.3MapReduce編程框架 6.3.1MapReduce的發(fā)展歷史6.3.2MapReduce的基本工作過程6.3.3LISP中的MapReduce6.3.4MapReduce的特點6.4實現(xiàn)Map/Reduce的C語言實例6.5建立Hadoop開發(fā)環(huán)境6.5.1相關(guān)準備工作6.5.2 JDK的安裝配置6.5.3下載、解壓Hadoop, 配置Hadoop環(huán)境變量6.5.4修改Hadoop配置文件6.5.5將配置好的Hadoop文件復制到其他節(jié)點6.5.6啟動、停止Hadoop6.5.7在Hadoop系統(tǒng)上運行測試程序WordC
3、ountHadoop是由Apache軟件基金會研發(fā)的一種開源、高可靠、伸縮性強的分布式計算系統(tǒng),主要用于對大于1TB的海量數(shù)據(jù)的處理。Hadoop采用Java語言開發(fā),是對Google的MapReduce核心技術(shù)的開源實現(xiàn)。目前Hadoop的核心模塊包括系統(tǒng)HDFS(Hadoop Distributed File System,Hadoop分布式文件系統(tǒng))和分布式計算框架MapReduce,這一結(jié)構(gòu)實現(xiàn)了計算和存儲的高度耦合,十分有利于面向數(shù)據(jù)的系統(tǒng)架構(gòu),因此已成為大數(shù)據(jù)技術(shù)領(lǐng)域的事實標準。Hadoop設(shè)計時有以下的幾點假設(shè):服務(wù)器失效是正常的;存儲和處理的數(shù)據(jù)是海量的;文件不會被頻繁寫入和修
4、改;機柜內(nèi)的數(shù)據(jù)傳輸速度大于機柜間的數(shù)據(jù)傳輸速度;海量數(shù)據(jù)的情況下移動計算比移動數(shù)據(jù)更高效。 6.1Hadoop概述Hadoop是Apache開源組織的分布式計算系統(tǒng),其分為第一代Hadoop和第二代Hadoop。第一代Hadoop包含0.20.x、0.21.x、0.22.x三個版本,0.20.x最后演化成了1.0.x版本,第二代Hadoop包含0.23.x和2.x兩個版本,2.x本版比0.23.x版本增加了NameNode HA和Wire-compatibility兩個特性,版本發(fā)展如圖6.1所示。圖6.1Hadoop本版發(fā)展路線6.1Hadoop概述Hadoop與MPI在數(shù)據(jù)處理上的差異主
5、要體現(xiàn)在數(shù)據(jù)存儲與數(shù)據(jù)處理在系統(tǒng)中位置不同,MPI是計算與存儲分離,Hadoop是計算向存儲遷移,如圖6.2所示。圖6.2Hadoop與MPI在數(shù)據(jù)處理上的差異6.1Hadoop概述在MPI中數(shù)據(jù)存儲的節(jié)點和數(shù)據(jù)處理的節(jié)點往往是不同的,一般在每次計算開始時MPI需要從數(shù)據(jù)存儲節(jié)點讀取需要處理的數(shù)據(jù)分配給各個計算節(jié)點對數(shù)據(jù)進行處理,因此MPI中數(shù)據(jù)存儲和數(shù)據(jù)處理是分離的。對于計算密集型的應(yīng)用MPI能表現(xiàn)出良好的性能,但對于處理TB級數(shù)據(jù)的數(shù)據(jù)密集型應(yīng)用由于網(wǎng)絡(luò)數(shù)據(jù)傳輸速度很慢,MPI的性能會大大降低,甚至會到不可忍受的地步,所以對于構(gòu)建在MPI上的并行計算系統(tǒng)網(wǎng)絡(luò)通訊速度一直是一個重要的性能指標
6、,用“計算換通信”也是MPI并行程序設(shè)計中的基本原則。6.1Hadoop概述在Hadoop中由于有HDFS文件系統(tǒng)的支持,數(shù)據(jù)是分布式存儲在各個節(jié)點的,計算時各節(jié)點讀取存儲在自己節(jié)點的數(shù)據(jù)進行處理,從而避免了大量數(shù)據(jù)在網(wǎng)絡(luò)上的傳遞,實現(xiàn)“計算向存儲的遷移”。6.2HDFSHadoop系統(tǒng)實現(xiàn)對大數(shù)據(jù)的自動并行處理,是一種數(shù)據(jù)并行方法,這種方法實現(xiàn)自動并行處理時需要對數(shù)據(jù)進行劃分,而對數(shù)據(jù)的劃分在Hadoop系統(tǒng)中從數(shù)據(jù)的存儲就開始了,因此文件系統(tǒng)是Hadoop系統(tǒng)的重要組成部分,也是Hadoop實現(xiàn)自動并行框架的基礎(chǔ)。Hadoop的文件系統(tǒng)稱為HDFS(Hadoop Distributed F
7、ile System)。6.2.1HDFS文件系統(tǒng)的原型GFSHadoop中的HDFS原型來自Google 文件系統(tǒng)(Google File System,GFS),為了滿足Google迅速增長的數(shù)據(jù)處理要求,Google設(shè)計并實現(xiàn)了GFS。Google文件系統(tǒng)是一個可擴展的分布式文件系統(tǒng),用于對大量數(shù)據(jù)進行訪問的大型、分布式應(yīng)用。它運行于廉價的普通硬件上,但可以提供容錯功能。它可以給大量的用戶提供總體性能較高的服務(wù),也可以提供容錯功能。我們認為GFS是一種面向不可信服務(wù)器節(jié)點而設(shè)計的文件系統(tǒng)。谷歌“三寶”是“Google文件系統(tǒng)”、“BigTable大表”、“MapReduce算法”,有了自
8、己的文件系統(tǒng),谷歌就可以有效地組織龐大的數(shù)據(jù)、服務(wù)器和存儲,并用它們工作。作為谷歌“三寶”的其中之一,GFS的技術(shù)優(yōu)勢不言而喻。6.2.1HDFS文件系統(tǒng)的原型GFSGFS為分布式結(jié)構(gòu),它是一個高度容錯網(wǎng)絡(luò)文件系統(tǒng),主要由一個Master(主)和眾多chunkserver(大塊設(shè)備)構(gòu)成的,體系結(jié)構(gòu)如圖6.3所示。圖6.3GFS的體系結(jié)構(gòu)6.2.1HDFS文件系統(tǒng)的原型GFS下面簡單描述一下GFS的工作過程。(1)客戶端使用固定大小的塊將應(yīng)用程序指定的文件名和字節(jié)偏移轉(zhuǎn)換成文件的一個塊索引,向Master發(fā)送包含文件名和塊索引的請求。(2)Master收到客戶端發(fā)來的請求,Master向塊服務(wù)
9、器發(fā)出指示,同時時刻監(jiān)控眾多chunkserver的狀態(tài)。chunkserver緩存Master從客戶端收到的文件名和塊索引等信息。6.2.1HDFS文件系統(tǒng)的原型GFS(3)Master通過和chunkserver的交互,向客戶端發(fā)送chunk-handle和副本位置。其中文件被分成若干個塊,而每個塊都是由一個不變的、全局惟一的64位的chunk-handle標識。Handle是由Master在塊創(chuàng)建時分配的。而出于安全性考慮,每一個文件塊都要被復制到多個chunkserver上,一般默認3個副本。(4)客戶端向其中的一個副本發(fā)出請求,請求指定了chunk handle(chunkserve
10、r以chunk handle標識chunk)和塊內(nèi)的一個字節(jié)區(qū)間。(5)客戶端從chunkserver獲得塊數(shù)據(jù),任務(wù)完成。6.2.1HDFS文件系統(tǒng)的原型GFS通常Client可以在一個請求中詢問多個chunk的地址,而Master也可以很快回應(yīng)這些請求。GFS是可以被多個用戶同時訪問的,一般情況下,Application和chunkserver是可以在同一臺機子上的,主要的數(shù)據(jù)流量是通過Application和chunkserver之間,數(shù)據(jù)訪問的本地性極大地減少了Application與Master之間的交互訪問,減少了Master的負荷量,提高了文件系統(tǒng)的性能。6.2.1HDFS文件系
11、統(tǒng)的原型GFS客戶端從來不會從Master讀和寫文件數(shù)據(jù)。客戶端只是詢問Master它應(yīng)該和哪個 chunkserver聯(lián)系。Client在一段限定的時間內(nèi)將這些信息緩存,在后續(xù)的操作中客戶端直接和chunkserver交互。由于Master對于讀和寫的操作極少,所以極大地減小了Master的工作負荷,真正提高了Master的利用性能。Master保存著三類元數(shù)據(jù)(metadata):文件名和塊的名字空間、從文件到塊的映射、副本位置。所有的metadata都放在內(nèi)存中。操作日志的引入可以更簡單、更可靠地更新Master的信息。6.2.1HDFS文件系統(tǒng)的原型GFS為GFS的控制和神經(jīng)系統(tǒng),副本
12、為Master的備份,Chunk主要用來和用戶交換數(shù)據(jù)。網(wǎng)絡(luò)中的主機癱瘓,不會對整個系統(tǒng)造成大的影響,替換上去的主機會自動重建數(shù)據(jù)。即使Master癱瘓,也會有Shadow作為替補,并且Shadow在一定時候也會充當Master來提供控制和數(shù)據(jù)交換。Google每天有大量的硬盤損壞,但是由于有GFS,這些硬盤的損壞是允許的。有人形象地比喻:分布式的文件系統(tǒng)被分塊為很多細胞單元,一旦細胞損壞,神經(jīng)系統(tǒng)(Master)會迅速發(fā)現(xiàn)并有相應(yīng)的冗余措施來使系統(tǒng)正常運行,這些細胞可以看作很多GFS主機。這一工作方式就是人類大腦的工作方式。6.2.1HDFS文件系統(tǒng)的原型GFS當然,作為Google的技術(shù)基
13、石,GFS可以給大量的用戶提供總體性能較高的服務(wù),具有以下優(yōu)勢:(1)Google采用的存儲方法是大量、分散的普通廉價服務(wù)器的存儲方式,極大降低了成本。(2)對大文件數(shù)據(jù)快速存取,這個毫無疑問是可以達到的。(3)容易擴展,它是成本很低的普通電腦,支持動態(tài)插入節(jié)點;(4)容錯能力強,它的數(shù)據(jù)同時會在多個chunkserver上進行備份,具有相當強的容錯性;(5)高效訪問,它是通過Big table來實現(xiàn)的,它是Google File System上層的結(jié)構(gòu)。GFS在實現(xiàn)分布式文件系統(tǒng)的做法上面很多都是簡單的,但是確實非常高效。(6)GFS相對于HDFS穩(wěn)定性是無庸置疑的,并在Google系統(tǒng)中得
14、到了采用且穩(wěn)定的運行。6.2.2HDFS文件的基本結(jié)構(gòu)HDFS是一種典型的主從式的分布式文件系統(tǒng),該文件系統(tǒng)完全是仿照Google的GFS文件系統(tǒng)而設(shè)計的,HDFS的架構(gòu)如圖6.4所示。圖6.4 HDFS的架構(gòu)6.2.2HDFS文件的基本結(jié)構(gòu)HDFS由一個名叫Namenode的主節(jié)點和多個名叫Datanode的子節(jié)點組成。Namenode存儲著文件系統(tǒng)的元數(shù)據(jù),這些元數(shù)據(jù)包括文件系統(tǒng)的名字空間等,向用戶映射文件系統(tǒng),并負責管理文件的存儲等服務(wù),但實際的數(shù)據(jù)并不存放在Namenode。Namenode的作用就像是文件系統(tǒng)的總指揮,并向訪問文件系統(tǒng)的客戶機提供文件系統(tǒng)的映射,這種做法并不是Goog
15、le或Hadoop的創(chuàng)新,這和傳統(tǒng)并行計算系統(tǒng)中的單一系統(tǒng)映像(Single System Image)的做法相同。HDFS中的Datanode用于實際對數(shù)據(jù)的存放,對Datanode上數(shù)據(jù)的訪問并不通過Namemode,而是與用戶直接建立數(shù)據(jù)通信。Hadoop啟動后我們能看到Namenode和Datanode這兩個進程。6.2.2HDFS文件的基本結(jié)構(gòu)HDFS的工作過程是這樣的:用戶請求創(chuàng)建文件的指令由Namenode進行接收,Namenode將存儲數(shù)據(jù)的Datanode的IP返回給用戶,并通知其他接收副本的Datanode,由用戶直接與Datanode進行數(shù)據(jù)傳送。Namenode同時存儲
16、相關(guān)的元數(shù)據(jù)。整個文件系統(tǒng)采用標準TCP/IP協(xié)議通信,實際是架設(shè)在Linux文件系統(tǒng)上的一個上層文件系統(tǒng)。HDFS上的一個典型文件大小一般都在G字節(jié)至T字節(jié)。6.2.2HDFS文件的基本結(jié)構(gòu)主從式是云計算系統(tǒng)的一種典型架構(gòu)方法,系統(tǒng)通過主節(jié)點屏蔽底層的復雜結(jié)構(gòu),并向用戶提供方便的文件目錄映射。有些改進的主從式架構(gòu)可能會采用分層的主從式方法,以減輕主節(jié)點的負荷。6.2.3HDFS的存儲過程HDFS在對一個文件進行存儲時有兩個重要的策略:一個是副本策略,一個是分塊策略。副本策略保證了文件存儲的高可靠性;分塊策略保證數(shù)據(jù)并發(fā)讀寫的效率并且是MapReduce實現(xiàn)并行數(shù)據(jù)處理的基礎(chǔ)。6.2.3HDF
17、S的存儲過程HDFS的分塊策略:通常HDFS在存儲一個文件會將文件切為64MB大小的塊來進行存儲,數(shù)據(jù)塊會被分別存儲在不同的Datanode節(jié)點上,這一過程其實就是一種數(shù)據(jù)任務(wù)的切分過程,在后面對數(shù)據(jù)進行MapReduce操作時十分重要,同時數(shù)據(jù)被分塊存儲后在數(shù)據(jù)讀寫時能實現(xiàn)對數(shù)據(jù)的并發(fā)讀寫,提高數(shù)據(jù)讀寫效率。HDFS采用64MB這樣較大的文件分塊策略有以下3個優(yōu)點:(1)降低客戶端與主服務(wù)器的交互代價;(2)降低網(wǎng)絡(luò)負載;(3)減少主服務(wù)器中元數(shù)據(jù)的大小。6.2.3HDFS的存儲過程HDFS的副本策略:HDFS對數(shù)據(jù)塊典型的副本策略為3個副本,第一個副本存放在本地節(jié)點,第二個副本存放在同一個
18、機架的另一個節(jié)點,第三個本副本存放在不同機架上的另一個節(jié)點。這樣的副本策略保證了在HDFS文件系統(tǒng)中存儲的文件具有很高的可靠性。6.2.3HDFS的存儲過程一個文件寫入HDFS的基本過程可以描述如下:寫入操作首先由Namenode為該文件創(chuàng)建一個新的記錄,該記錄為文件分配存儲節(jié)點包括文件的分塊存儲信息,在寫入時系統(tǒng)會對文件進行分塊,文件寫入的客戶端獲得存儲位置的信息后直接與指定的Datanode進行數(shù)據(jù)通信,將文件塊按Namenode分配的位置寫入指定的Datanode,數(shù)據(jù)塊在寫入時不再通過Namenode,因此Namenode不會成為數(shù)據(jù)通信的瓶頸。6.3MapReduce編程框架 在云計
19、算和大數(shù)據(jù)技術(shù)領(lǐng)域被廣泛提到并被成功應(yīng)用的一項技術(shù)就是MapReduce。MapReduce是Google系統(tǒng)和Hadoop系統(tǒng)中的一項核心技術(shù)。6.3.1MapReduce的發(fā)展歷史MapReduce出現(xiàn)的歷史要追述到1956年,圖靈獎獲得者著名的人工智能專家McCarthy首次提出了LISP語言的構(gòu)想,而在LISP語言中就包含了現(xiàn)在我們所采用的MapReduce 功能。LISP語言是一種用于人工智能領(lǐng)域的語言,在人工智能領(lǐng)域有很多的應(yīng)用,LISP在1956年設(shè)計時主要是希望能有效地進行“符號運算”。LISP是一種表處理語言,其邏輯簡單但結(jié)構(gòu)不同于其他的高級語言。1960年,McCarthy
20、更是極有預見性地提出:“今后計算機將會作為公共設(shè)施提供給公眾”,這一觀點已與現(xiàn)在人們對云計算的定義極為相近了,所以我們把McCarthy稱為“云計算之父”。MapReduce在McCarthy提出時并沒有考慮到其在分布式系統(tǒng)和大數(shù)據(jù)上會有如此大的應(yīng)用前景,只是作為一種函數(shù)操作來定義的。6.3.1MapReduce的發(fā)展歷史2004年Google公司的Dean發(fā)表文章將MapReduce這一編程模型在分布式系統(tǒng)中的應(yīng)用進行了介紹,從此MapRuduce分布式編程模型進入了人們的視野。可以認為分布式MapReduce是由Google公司首先提出的。Hadoop跟進了Google的這一思想,可以認為
21、Hadoop是一個開源版本的Google系統(tǒng),正是由于Hadoop的跟進才使普通用戶得以開發(fā)自己的基于MapReduce框架的云計算應(yīng)用系統(tǒng)。6.3.2MapReduce的基本工作過程MapReduce是一種處理大數(shù)據(jù)集的編程模式,它借鑒了最早出現(xiàn)在LISP語言和其他函數(shù)語言中的map和reduce操作,MapReduce的基本過程為:用戶通過map函數(shù)處理key/value對,從而產(chǎn)生一系列不同的key/value對,reduce函數(shù)將key值相同的key/value對進行合并?,F(xiàn)實中的很多處理任務(wù)都可以利用這一模型進行描述。通過MapReduce框架能實現(xiàn)基于數(shù)據(jù)切分的自動并行計算,大大簡
22、化了分布式編程的難度,并為在相對廉價的商品化服務(wù)器集群系統(tǒng)上實現(xiàn)大規(guī)模的數(shù)據(jù)處理提供了可能。6.3.2MapReduce的基本工作過程MapReduce的過程其實非常簡單,我們用一個實際的例子來說明MapReduce的編程模型。假設(shè)我們需要對一個文件example.txt中出現(xiàn)的單詞次數(shù)進行統(tǒng)計,這就是著名的wordcount例子,在這個例子中MapReduce的編程模型可以這樣來描述:用戶需要處理的文件example.txt已被分為多個數(shù)據(jù)片存儲在集群系統(tǒng)中不同的節(jié)點上了,用戶先使用一個Map函數(shù)Map(example.txt, 文件內(nèi)容),在這個Map函數(shù)中key值為example.txt
23、,key通常是指一個具有唯一值的標識,value值就是example.txt文件中的內(nèi)容。Map操作程序通常會被分布到存有文件example.txt數(shù)據(jù)片段的節(jié)點上發(fā)起,這個Map操作將產(chǎn)生一組中間key/value對(word, count),6.3.2MapReduce的基本工作過程這里的word代表出現(xiàn)在文件example.txt片段中的任一個單詞,每個Map操作所產(chǎn)生的key/value對只代表example.txt一部分內(nèi)容的統(tǒng)計值。Reduce函數(shù)將接收集群中不同節(jié)點Map函數(shù)生成的中間key/value對,并將Key相同的key/value對進行合并,在這個例子中Reduce函數(shù)
24、將對所有key值相同的value值進行求和合并,最后輸出的key/value對就是(word, count),其中count就是這個單詞在文件example.txt中出現(xiàn)的總的次數(shù)。6.3.2MapReduce的基本工作過程下面我們通過一個簡單例子來講解MapReduce的基本原理。1任務(wù)的描述來自江蘇、浙江、山東三個省的9所高校聯(lián)合舉行了一場編程大賽,每個省有3所高校參加,每所高校各派5名隊員參賽,各所高校的比賽平均成績?nèi)绫?.1所示。江蘇省浙江省山東省南京大學90浙江大學95山東大學92東南大學93浙江工業(yè)大學84中國海洋大學85河海大學84寧波大學88青島大學87表6.1原始比賽成績6.
25、3.2MapReduce的基本工作過程我們可以用如表6.2所示的形式來表示成績,這樣每所高校就具備了所屬省份和平均分數(shù)這兩個屬性,即。南京大學:江蘇省,90東南大學:江蘇省,93河海大學:江蘇省,84浙江大學:浙江省,95浙江工業(yè)大學:浙江省,84寧波大學:浙江省,88山東大學:山東省,92中國海洋大學:山東省,85青島大學:山東省,87表6.2增加屬性信息后的比賽成績6.3.2MapReduce的基本工作過程統(tǒng)計各個省份高校的平均分數(shù)時,高校的名稱并不是很重要,我們略去高校名稱,如表6.3所示。江蘇省,90江蘇省,93江蘇省,84浙江省,95浙江省,84浙江省,88山東省,92山東省,85山
26、東省,87表6.3略去高校名稱后的比賽成績接下來對各個省份的高校的成績進行匯總,如表6.4所示。江蘇省,90、93、84浙江省,95、84、88山東省,92、85、87表6.4各省比賽成績匯總6.3.2MapReduce的基本工作過程計算求得各省高校的平均值如表6.5所示。表6.5各省平均成績江蘇省,89浙江省,89山東省,88以上為計算各省平均成績的主要步驟,我們可以用MapReduce來實現(xiàn),其詳細步驟如下:2任務(wù)的MapReduce實現(xiàn)MapReduce包含Map、Shuffle和Reduce三個步驟,其中Shuffle由Hadoop自動完成,Hadoop的使用者可以無需了解并行程序的底
27、層實現(xiàn),只需關(guān)注Map和Reduce的實現(xiàn)。6.3.2MapReduce的基本工作過程1. Map Input:在Map部分,我們需要輸入數(shù)據(jù),這里Key是高校的名稱,Value是屬性值,即所屬省份和平均分數(shù),如表6.6所示。Key:南京大學Value:江蘇省,90Key:東南大學Value:江蘇省,93Key:河海大學Value:江蘇省,84Key:浙江大學Value:浙江省,95Key:浙江工業(yè)大學Value:浙江省,84Key:寧波大學Value:浙江省,88Key:山東大學Value:山東省,92Key:中國海洋大學Value:山東省,85Key:青島大學Value:山東省,87表6.
28、6Map Input數(shù)據(jù)6.3.2MapReduce的基本工作過程2. Map Output:對所屬省份平均分數(shù)進行重分組,去除高校名稱,將所屬省份變?yōu)镵ey,平均分數(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.7Map Output數(shù)據(jù)6.3.2MapReduce的基本工作過程3. Shuffle Output:Shuffle由Ha
29、doop自動完成,其任務(wù)是實現(xiàn)Map,對Key進行分組,用戶可以獲得Value的列表,即List,如表6.8所示。Key:江蘇省List:90、93、84Key:浙江省List:95、84、88Key:山東省List:92、85、87表6.8Shuffle Output數(shù)據(jù)4. Reduce Input:表6.8中的內(nèi)容將作為Reduce任務(wù)的輸入數(shù)據(jù),即從Shuffle任務(wù)中獲得的(Key,List)。6.3.2MapReduce的基本工作過程5. Reduce Output:Reduce任務(wù)的功能是完成用戶的計算邏輯,這里的任務(wù)是計算每個省份的高校學生的比賽平均成績,獲得的最終結(jié)果如表6.
30、9所示。江蘇省,89 浙江省,89 山東省,88 表6.9Reduce Output數(shù)據(jù)6.3.3LISP中的MapReduce為了進一步理解MapReduce,我們簡單介紹最早使用Map和Reduce的LISP語言中的Map和Reduce操作。下面的LISP語句定義的這個Map操作是將向量(1 2 3 4 5)和向量(10 9 8 7 6)進行相乘的操作,輸出也為向量(10 18 24 28 30)。(map vector #*#(1 2 3 4 5)#(10 9 8 7 6)-#(10 18 24 28 30)這個Map操作對應(yīng)于向量到向量的映射,兩個向量按乘積關(guān)系進行映射。6.3.3LI
31、SP中的MapReduce下面的LISP語句定義的這個Reduce操作是將向量(1 2 3 4 5 6 7 8 9 10)中的元素進行求和的Reduce操作,輸出結(jié)果為55。 (reduce #+#(1 2 3 4 5 6 7 8 9 10)-55這個Reduce操作對應(yīng)于向量的約簡,它將向量按求和的關(guān)系約簡為一個值??梢钥闯?,在LISP語言中Map和Reduce只是作為一種操作定義,并沒有體現(xiàn)出任何的分布式計算的特征。6.3.4MapReduce的特點MapReduce主要具有以下幾個特點:(1)需要在集群條件下使用。MapReduce的主要作用是實現(xiàn)對大數(shù)據(jù)的分布式處理,其設(shè)計時的基本要求
32、就是在大規(guī)模集群條件下的(雖然一些系統(tǒng)可以在單機下運行,但這種條件下只具有仿真運行的意義),Google作為分布式MapReduce提出者,它本身就是世界上最大的集群系統(tǒng),所以MapReduce天然需要在集群系統(tǒng)下運行才能有效。6.3.4MapReduce的特點(2)需要有相應(yīng)的分布式文件系統(tǒng)的支持。這里要注意的是單獨的MapReduce模式并不具有自動的并行性能,就像它在LISP語言中的表現(xiàn)一樣,它只有與相應(yīng)的分布式文件系統(tǒng)相結(jié)合才能完美地體現(xiàn)MapReduce這種編程框架的優(yōu)勢。如Google系統(tǒng)對應(yīng)的分布式文件系統(tǒng)為GFS,Hadoop系統(tǒng)對應(yīng)的分布式文件系統(tǒng)為HDFS。MapReduc
33、e能實現(xiàn)計算的自動并行化很大程度上是由于分布式文件系統(tǒng)在對文件存儲時就實現(xiàn)了對大數(shù)據(jù)文件的切分,這種并行方法也叫數(shù)據(jù)并行方法。數(shù)據(jù)并行方法避免了對計算任務(wù)本身的人工切分,降低了編程的難度,而像MPI往往需要人工對計算任務(wù)進行切分,因此分布式編程難度較大。6.3.4MapReduce的特點(3)可以在商品化集群條件下運行,不需要特別的硬件支持.和高性能計算不同,基于MapReduce的系統(tǒng)往往不需要特別的硬件支持,按Google的報道,他們的實驗系統(tǒng)中的節(jié)點就是基于典型的雙核X86的系統(tǒng),配置24GB的內(nèi)存,網(wǎng)絡(luò)為百兆網(wǎng)和千兆網(wǎng)構(gòu)成,存儲設(shè)備的便宜的IDE硬盤。6.3.4MapReduce的特點
34、(4)假設(shè)節(jié)點的失效為正常情況。傳統(tǒng)的服務(wù)器通常被認為是穩(wěn)定的,但在服務(wù)器數(shù)量巨大或采用廉價服務(wù)的條件下,服務(wù)器的實效將變得常見,所以通?;贛apReduce的分布式計算系統(tǒng)采用了存儲備份、計算備份和計算遷移等策略來應(yīng)對,從而實現(xiàn)在單節(jié)點不穩(wěn)定的情況下保持系統(tǒng)整個的穩(wěn)定性。6.3.4MapReduce的特點(5)適合對大數(shù)據(jù)進行處理。由于基于MapReduce的系統(tǒng)并行化是通過數(shù)據(jù)切分實現(xiàn)的數(shù)據(jù)并行,同時計算程序啟動時需要向各節(jié)點拷貝計算程序,過小的文件在這種模式下工作反而會效率低下。Google的實驗也表明一個由150秒時間完成的計算任務(wù),程序啟動階段的時間就花了60秒,可以想象,如果計算
35、任務(wù)數(shù)據(jù)過小,這樣的花費是不值得的,同時對過小的數(shù)據(jù)進行切分也無必要。所以MapReduce更適合進行大數(shù)據(jù)的處理。6.3.4MapReduce的特點(6)計算向存儲遷移。傳統(tǒng)的高性能計算數(shù)據(jù)集中存儲,計算時數(shù)據(jù)向計算節(jié)點拷貝,而基于MapReduce的分布式系統(tǒng)在數(shù)據(jù)存儲時就實現(xiàn)了分布式存儲,一個較大的文件會被切分成大量較小的文件存儲于不同的節(jié)點,系統(tǒng)調(diào)度機制在啟動計算時會將計算程序盡可能分發(fā)給需要處理的數(shù)據(jù)所在的節(jié)點。計算程序的大小通常會比數(shù)據(jù)文件小的多,所以遷移計算的網(wǎng)絡(luò)代價要比遷移數(shù)據(jù)小的多。6.3.4MapReduce的特點(7)MapReduce的計算效率會受最慢的Map任務(wù)影響。
36、由于Reduce操作的完成需要等待所有Map任務(wù)的完成,所以如果Map任務(wù)中有一個任務(wù)出現(xiàn)了延遲,則整個MapReduce操作將受最慢的Map任務(wù)的影響。6.4實現(xiàn)Map/Reduce的C語言實例Map/Reduce操作代表了一大類的數(shù)據(jù)處理操作方式,為了讓大家對Map/Reduce的工作過程有一個直觀的了解,下面的程序采用C語言實現(xiàn)了一個簡單經(jīng)典的Map/Reduce計算,計算從控制臺輸入的字符串中單詞的計數(shù),這一計算過程都是在同一個節(jié)點上完成的,并未實現(xiàn)計算的并行化,歷史上的Lisp語言也是運行在單機的上的程序,這個例子的主要目的是讓大家理解這一操作的過程。程序中的my_map()和my_
37、reduce()函數(shù)分別實現(xiàn)了對字符串的Map和Reduce操作。6.4實現(xiàn)Map/Reduce的C語言實例程序6.1輸入: this is map reduce hello map hello reduce6.4實現(xiàn)Map/Reduce的C語言實例輸出: This is map results:This is reduce results:此運行實例中我們從控制臺輸入字符串“this is map reduce hello map hello reduce”,程序通過Map和Reduce過程對字符串的的單詞出現(xiàn)的頻率進行統(tǒng)計,并輸出了結(jié)果,這是一個典型的Map/Reduce過程。6.5建立H
38、adoop開發(fā)環(huán)境本節(jié)使用三個Linux虛擬機來構(gòu)建Hadoop集群環(huán)境,其中一個虛擬機作為NameNode(Master節(jié)點),另外兩個虛擬機作為DataNode(Slave節(jié)點),如圖6.5所示。在3個節(jié)點下3個虛擬機的機器名和IP地址信息如下。虛擬機1:主機名為vm1,IP為01,作為NameNode使用;虛擬機2:主機名為vm2,IP為02,作為DataNode使用;虛擬機3:主機名為vm3,IP為03,作為DataNode使用。圖6.5 Hadoop集群配置6.5.1相關(guān)準備工作6.5.1相關(guān)準備工作6.5.1相關(guān)準備工作(4)新建用戶“hadoop”。在每個節(jié)點上使用useradd
39、指令新建一個用戶hadoop,并設(shè)置密碼。 useradd hadoop passwd hadoop(5)永久關(guān)閉每個節(jié)點的防火墻(root權(quán)限)。在每個節(jié)點上執(zhí)行以下指令,這樣將永久性的關(guān)閉每個階段的防火墻 chkconfig iptables off/永久性生效,重啟后不會復原6.5.1相關(guān)準備工作(6)配置ssh實現(xiàn)Hadoop結(jié)點間用戶的無密碼訪問Hadoop需要在各個結(jié)點間進行信息傳遞,因此需要實現(xiàn)結(jié)點間的無密碼訪問,這與采用MPI進行并行程序設(shè)計相同,否則系統(tǒng)會不停地向你請求密碼驗證。這里的配置在各個節(jié)點的hadoop用戶下進行。配置過程與MPI部分的配置過程相關(guān),這里不再詳述,配
40、置完成后使用ssh指令可以在三個虛擬機之間實現(xiàn)無密碼訪問。6.5.2 JDK的安裝配置Hadoop是采用Java編寫的,每個虛擬機上均需要安裝Java的JDK,JDK的安裝配置需在root用戶下進行,具體步驟如下。(1)在Sun官方網(wǎng)站下載JDK軟件包jdk-7u45-linux-x64.tar.gz。(2)新建目錄/usr/java,將下載的JDK軟件包進行進行解壓。 mkdir /usr/java tar zxvf jdk-7u45-linux-x64.tar.gz6.5.2 JDK的安裝配置(3)配置Java環(huán)境變量。 #set java environment export JAVA_
41、HOME=/usr/java/jdk1.7.0_45 export JRE_HOME=/usr/java/jdk1.7.0_45/jre export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH6.5.2 JDK的安裝配置(4)保存了Java環(huán)境變量之后,在命令行中鍵入如下命令,使環(huán)境變量生效:source /etc/profile /使環(huán)境變量設(shè)置生效通過which命令測試JDK的安裝是否成功:which java系統(tǒng)顯示如下信息:/usr
42、/java/jdk1.6.0_12/bin/java此時JDK配置成功,接下來可進行Hadoop的安裝配置。6.5.2 JDK的安裝配置程序6.2public class test public static void main(String args ) System.out.println(This is a hadoop test program! JDK successed!); 6.5.2 JDK的安裝配置編譯測試程序: javac test.java運行測試程序: java test如果輸出為: This is a hadoop test program! JDK successe
43、d!表明JDK已成功安裝,并能成功編譯執(zhí)行Java程序。6.5.3下載、解壓Hadoop,配置Hadoop環(huán)境變量Hadoop集群中每個節(jié)點的安裝、配置是相同的,我們可以現(xiàn)在一個虛擬機上進行安裝、配置,然后將其復制到其他節(jié)點的相應(yīng)目錄。將hadoop-0.21.0.tar.gz放置在vm1的/home/hadoop目錄中,用hadoop用戶對其進行解壓縮: cd /home/hadoop tar zxvf hadoop-0.21.0.tar.gz6.5.3下載、解壓Hadoop,配置Hadoop環(huán)境變量把Hadoop的安裝路徑添加到“/etc/profile”中,在文件的末尾添下面的代碼,每個
44、節(jié)點均需要進行此步配置。 #hadoop environment export HADOOP_HOME=/usr/java/jdk1.7.0_45 export PATH=$PATH:$HADOOP_HOME/bin保存了Hadoop環(huán)境變量之后,在命令行中鍵入如下命令,使環(huán)境變量生效: source /etc/profile/使環(huán)境變量設(shè)置生效6.5.4修改Hadoop配置文件Hadoop的配置文件存于conf文件夾中,我們需要對該文件夾中以下文件進行修改:hadoop-env.sh、core-site.xml、mapred-site.xml、masters、slaves。(1)修改hado
45、op-env.sh文件。Hadoop的Java環(huán)境變量在hadoop-env.sh中進行設(shè)置。使用vim打開hadoop-env.sh文件,找到Java環(huán)境變量的設(shè)置位置,將其改為JDK的安裝地址,保存并退出。 export JAVA_HOME=/usr/java/jdk1.7.0_456.5.4修改Hadoop配置文件(2)修改core-site.xml文件。core-site.xml用于設(shè)置Hadoop集群的HDFS的地址和端口號,以及用于保存HDFS信息的tmp文件夾,對HDFS進行重新格式化的時候先行刪除tmp中的文件。新建tmp文件夾: mkdir /home/hadoop/hado
46、op-0.21.0/tmp使用vim打開core-site.xml文件,在 之間添加以下代碼:6.5.4修改Hadoop配置文件 hadoop.tmp.dir /home/hadoop/hadoop-0.21.0/tmp fs.defaultFS hdfs:/01/:9000其中的IP地址需配置為集群的NameNode(Master)節(jié)點的IP,這里“01”。6.5.4修改Hadoop配置文件(3)修改mapred-site.xml文件。在mapred-site.xml文件的在 之間添加以下代碼,配置JobTracker的主機名和端口。 mapreduce.jobtracker.address
47、 01:9001 NameNode6.5.4修改Hadoop配置文件(4)修改masters文件。使用vim打開masters文件,寫入NameNode(Master)節(jié)點的主機名,這里為vm1,保存并退出。 vm1(5)修改slaves文件。使用vim打開slaves文件,寫入DataNode(Slaver)節(jié)點的主機名,這里為vm1、vm2,保存并退出。 Vm2 vm36.5.5將配置好的Hadoop文件復制到其他節(jié)點到了這里,我們已經(jīng)安裝、配置了一個Hadoop節(jié)點,Hadoop集群中每個節(jié)點的安裝、配置是相同的,這里需要將vm1上的Hadoop文件夾整體復制到其他的節(jié)點,執(zhí)行以下指令:
48、 scp -r /home/hadoop/hadoop-0.21.0 hadoopvm2:/home/hadoop/ scp -r /home/hadoop/hadoop-0.21.0 hadoopvm3:/home/hadoop/格式化NameNode在正式啟動Hadoop之前,需要執(zhí)行以下指令,對Hadoop的分布式文件進行初始化: cd /home/hadoop/hadoop-0.21.0/bin ./hadoop namenode format順利執(zhí)行此格式化指令后,會顯示如下信息: 14/01/04 21:21:20 INFO common.Storage: Storage directory /home/hadoop/hadoop-0.21.0/tmp/dfs/nam
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 馬鈴薯食品加工供應(yīng)鏈協(xié)議
- 企業(yè)社會責任共建協(xié)議
- 產(chǎn)科安全醫(yī)療管理
- 井建設(shè)項目協(xié)議
- 二手電梯買賣合同
- 代持股權(quán)益合同書
- 企業(yè)文化顧問協(xié)議
- 個人消費貸款合同范本
- 企業(yè)入駐技術(shù)許可合同
- 代理人自我管理與成長
- 旋轉(zhuǎn)壓實SGC作業(yè)指導書終
- 消防系統(tǒng)調(diào)試及聯(lián)動方案
- 觀光農(nóng)業(yè)概論教案分享
- 英文譯稿《藥品注冊管理辦法》
- 危險預知訓練教材(KYT)
- 漢語教師志愿者培訓大綱
- SPC培訓資料_2
- 壓力表使用警示標識
- 小學英語課堂教學策略與方法探討
- 2019年重慶普通高中會考通用技術(shù)真題及答案
- DB44 T 552-2008 林業(yè)生態(tài) 術(shù)語
評論
0/150
提交評論