




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、云計(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)的原型GF
2、S6.2.2HDFS文件的基本結(jié)構(gòu)6.2.3HDFS的存儲(chǔ)過程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.2 JDK的安裝配置6.5.3下載、解壓Hadoop, 配置Hadoop環(huán)境變量6.5.4修改Hadoop配置文件6.5.5將配置好的Hadoop文件復(fù)制到其他節(jié)點(diǎn)6.5.6啟動(dòng)、停止Hadoop6.5.7在Hadoop系統(tǒng)上運(yùn)行測(cè)試程序WordC
3、ountHadoop是由Apache軟件基金會(huì)研發(fā)的一種開源、高可靠、伸縮性強(qiáng)的分布式計(jì)算系統(tǒng),主要用于對(duì)大于1TB的海量數(shù)據(jù)的處理。Hadoop采用Java語言開發(fā),是對(duì)Google的MapReduce核心技術(shù)的開源實(shí)現(xiàn)。目前Hadoop的核心模塊包括系統(tǒng)HDFS(Hadoop Distributed File System,Hadoop分布式文件系統(tǒng))和分布式計(jì)算框架MapReduce,這一結(jié)構(gòu)實(shí)現(xiàn)了計(jì)算和存儲(chǔ)的高度耦合,十分有利于面向數(shù)據(jù)的系統(tǒng)架構(gòu),因此已成為大數(shù)據(jù)技術(shù)領(lǐng)域的事實(shí)標(biāo)準(zhǔn)。Hadoop設(shè)計(jì)時(shí)有以下的幾點(diǎn)假設(shè):服務(wù)器失效是正常的;存儲(chǔ)和處理的數(shù)據(jù)是海量的;文件不會(huì)被頻繁寫入和修
4、改;機(jī)柜內(nèi)的數(shù)據(jù)傳輸速度大于機(jī)柜間的數(shù)據(jù)傳輸速度;海量數(shù)據(jù)的情況下移動(dòng)計(jì)算比移動(dòng)數(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版本增加了NameNode HA和Wire-compatibility兩個(gè)特性,版本發(fā)展如圖6.1所示。圖6.1Hadoop本版發(fā)展路線6.1Hadoop概述Hadoop與MPI在數(shù)據(jù)處理上的差異主
5、要體現(xiàn)在數(shù)據(jù)存儲(chǔ)與數(shù)據(jù)處理在系統(tǒng)中位置不同,MPI是計(jì)算與存儲(chǔ)分離,Hadoop是計(jì)算向存儲(chǔ)遷移,如圖6.2所示。圖6.2Hadoop與MPI在數(shù)據(jù)處理上的差異6.1Hadoop概述在MPI中數(shù)據(jù)存儲(chǔ)的節(jié)點(diǎn)和數(shù)據(jù)處理的節(jié)點(diǎn)往往是不同的,一般在每次計(jì)算開始時(shí)MPI需要從數(shù)據(jù)存儲(chǔ)節(jié)點(diǎn)讀取需要處理的數(shù)據(jù)分配給各個(gè)計(jì)算節(jié)點(diǎn)對(duì)數(shù)據(jù)進(jìn)行處理,因此MPI中數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)處理是分離的。對(duì)于計(jì)算密集型的應(yīng)用MPI能表現(xiàn)出良好的性能,但對(duì)于處理TB級(jí)數(shù)據(jù)的數(shù)據(jù)密集型應(yīng)用由于網(wǎng)絡(luò)數(shù)據(jù)傳輸速度很慢,MPI的性能會(huì)大大降低,甚至?xí)讲豢扇淌艿牡夭剑詫?duì)于構(gòu)建在MPI上的并行計(jì)算系統(tǒng)網(wǎng)絡(luò)通訊速度一直是一個(gè)重要的性能指標(biāo)
6、,用“計(jì)算換通信”也是MPI并行程序設(shè)計(jì)中的基本原則。6.1Hadoop概述在Hadoop中由于有HDFS文件系統(tǒng)的支持,數(shù)據(jù)是分布式存儲(chǔ)在各個(gè)節(jié)點(diǎn)的,計(jì)算時(shí)各節(jié)點(diǎn)讀取存儲(chǔ)在自己節(jié)點(diǎn)的數(shù)據(jù)進(jìn)行處理,從而避免了大量數(shù)據(jù)在網(wǎng)絡(luò)上的傳遞,實(shí)現(xiàn)“計(jì)算向存儲(chǔ)的遷移”。6.2HDFSHadoop系統(tǒng)實(shí)現(xiàn)對(duì)大數(shù)據(jù)的自動(dòng)并行處理,是一種數(shù)據(jù)并行方法,這種方法實(shí)現(xiàn)自動(dòng)并行處理時(shí)需要對(duì)數(shù)據(jù)進(jìn)行劃分,而對(duì)數(shù)據(jù)的劃分在Hadoop系統(tǒng)中從數(shù)據(jù)的存儲(chǔ)就開始了,因此文件系統(tǒng)是Hadoop系統(tǒng)的重要組成部分,也是Hadoop實(shí)現(xiàn)自動(dòng)并行框架的基礎(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迅速增長(zhǎng)的數(shù)據(jù)處理要求,Google設(shè)計(jì)并實(shí)現(xiàn)了GFS。Google文件系統(tǒng)是一個(gè)可擴(kuò)展的分布式文件系統(tǒng),用于對(duì)大量數(shù)據(jù)進(jìn)行訪問的大型、分布式應(yīng)用。它運(yùn)行于廉價(jià)的普通硬件上,但可以提供容錯(cuò)功能。它可以給大量的用戶提供總體性能較高的服務(wù),也可以提供容錯(cuò)功能。我們認(rèn)為GFS是一種面向不可信服務(wù)器節(jié)點(diǎn)而設(shè)計(jì)的文件系統(tǒng)。谷歌“三寶”是“Google文件系統(tǒng)”、“BigTable大表”、“MapReduce算法”,有了自
8、己的文件系統(tǒng),谷歌就可以有效地組織龐大的數(shù)據(jù)、服務(wù)器和存儲(chǔ),并用它們工作。作為谷歌“三寶”的其中之一,GFS的技術(shù)優(yōu)勢(shì)不言而喻。6.2.1HDFS文件系統(tǒng)的原型GFSGFS為分布式結(jié)構(gòu),它是一個(gè)高度容錯(cuò)網(wǎng)絡(luò)文件系統(tǒng),主要由一個(gè)Master(主)和眾多chunkserver(大塊設(shè)備)構(gòu)成的,體系結(jié)構(gòu)如圖6.3所示。圖6.3GFS的體系結(jié)構(gòu)6.2.1HDFS文件系統(tǒng)的原型GFS下面簡(jiǎn)單描述一下GFS的工作過程。(1)客戶端使用固定大小的塊將應(yīng)用程序指定的文件名和字節(jié)偏移轉(zhuǎn)換成文件的一個(gè)塊索引,向Master發(fā)送包含文件名和塊索引的請(qǐng)求。(2)Master收到客戶端發(fā)來的請(qǐng)求,Master向塊服務(wù)
9、器發(fā)出指示,同時(shí)時(shí)刻監(jiān)控眾多chunkserver的狀態(tài)。chunkserver緩存Master從客戶端收到的文件名和塊索引等信息。6.2.1HDFS文件系統(tǒng)的原型GFS(3)Master通過和chunkserver的交互,向客戶端發(fā)送chunk-handle和副本位置。其中文件被分成若干個(gè)塊,而每個(gè)塊都是由一個(gè)不變的、全局惟一的64位的chunk-handle標(biāo)識(shí)。Handle是由Master在塊創(chuàng)建時(shí)分配的。而出于安全性考慮,每一個(gè)文件塊都要被復(fù)制到多個(gè)chunkserver上,一般默認(rèn)3個(gè)副本。(4)客戶端向其中的一個(gè)副本發(fā)出請(qǐng)求,請(qǐng)求指定了chunk handle(chunkserve
10、r以chunk handle標(biāo)識(shí)chunk)和塊內(nèi)的一個(gè)字節(jié)區(qū)間。(5)客戶端從chunkserver獲得塊數(shù)據(jù),任務(wù)完成。6.2.1HDFS文件系統(tǒng)的原型GFS通常Client可以在一個(gè)請(qǐng)求中詢問多個(gè)chunk的地址,而Master也可以很快回應(yīng)這些請(qǐng)求。GFS是可以被多個(gè)用戶同時(shí)訪問的,一般情況下,Application和chunkserver是可以在同一臺(tái)機(jī)子上的,主要的數(shù)據(jù)流量是通過Application和chunkserver之間,數(shù)據(jù)訪問的本地性極大地減少了Application與Master之間的交互訪問,減少了Master的負(fù)荷量,提高了文件系統(tǒng)的性能。6.2.1HDFS文件系
11、統(tǒng)的原型GFS客戶端從來不會(huì)從Master讀和寫文件數(shù)據(jù)。客戶端只是詢問Master它應(yīng)該和哪個(gè) chunkserver聯(lián)系。Client在一段限定的時(shí)間內(nèi)將這些信息緩存,在后續(xù)的操作中客戶端直接和chunkserver交互。由于Master對(duì)于讀和寫的操作極少,所以極大地減小了Master的工作負(fù)荷,真正提高了Master的利用性能。Master保存著三類元數(shù)據(jù)(metadata):文件名和塊的名字空間、從文件到塊的映射、副本位置。所有的metadata都放在內(nèi)存中。操作日志的引入可以更簡(jiǎn)單、更可靠地更新Master的信息。6.2.1HDFS文件系統(tǒng)的原型GFS為GFS的控制和神經(jīng)系統(tǒng),副本
12、為Master的備份,Chunk主要用來和用戶交換數(shù)據(jù)。網(wǎng)絡(luò)中的主機(jī)癱瘓,不會(huì)對(duì)整個(gè)系統(tǒng)造成大的影響,替換上去的主機(jī)會(huì)自動(dòng)重建數(shù)據(jù)。即使Master癱瘓,也會(huì)有Shadow作為替補(bǔ),并且Shadow在一定時(shí)候也會(huì)充當(dāng)Master來提供控制和數(shù)據(jù)交換。Google每天有大量的硬盤損壞,但是由于有GFS,這些硬盤的損壞是允許的。有人形象地比喻:分布式的文件系統(tǒng)被分塊為很多細(xì)胞單元,一旦細(xì)胞損壞,神經(jīng)系統(tǒng)(Master)會(huì)迅速發(fā)現(xiàn)并有相應(yīng)的冗余措施來使系統(tǒng)正常運(yùn)行,這些細(xì)胞可以看作很多GFS主機(jī)。這一工作方式就是人類大腦的工作方式。6.2.1HDFS文件系統(tǒng)的原型GFS當(dāng)然,作為Google的技術(shù)基
13、石,GFS可以給大量的用戶提供總體性能較高的服務(wù),具有以下優(yōu)勢(shì):(1)Google采用的存儲(chǔ)方法是大量、分散的普通廉價(jià)服務(wù)器的存儲(chǔ)方式,極大降低了成本。(2)對(duì)大文件數(shù)據(jù)快速存取,這個(gè)毫無疑問是可以達(dá)到的。(3)容易擴(kuò)展,它是成本很低的普通電腦,支持動(dòng)態(tài)插入節(jié)點(diǎn);(4)容錯(cuò)能力強(qiáng),它的數(shù)據(jù)同時(shí)會(huì)在多個(gè)chunkserver上進(jìn)行備份,具有相當(dāng)強(qiáng)的容錯(cuò)性;(5)高效訪問,它是通過Big table來實(shí)現(xiàn)的,它是Google File System上層的結(jié)構(gòu)。GFS在實(shí)現(xiàn)分布式文件系統(tǒng)的做法上面很多都是簡(jiǎn)單的,但是確實(shí)非常高效。(6)GFS相對(duì)于HDFS穩(wěn)定性是無庸置疑的,并在Google系統(tǒng)中得
14、到了采用且穩(wěn)定的運(yùn)行。6.2.2HDFS文件的基本結(jié)構(gòu)HDFS是一種典型的主從式的分布式文件系統(tǒng),該文件系統(tǒng)完全是仿照Google的GFS文件系統(tǒng)而設(shè)計(jì)的,HDFS的架構(gòu)如圖6.4所示。圖6.4 HDFS的架構(gòu)6.2.2HDFS文件的基本結(jié)構(gòu)HDFS由一個(gè)名叫Namenode的主節(jié)點(diǎn)和多個(gè)名叫Datanode的子節(jié)點(diǎn)組成。Namenode存儲(chǔ)著文件系統(tǒng)的元數(shù)據(jù),這些元數(shù)據(jù)包括文件系統(tǒng)的名字空間等,向用戶映射文件系統(tǒng),并負(fù)責(zé)管理文件的存儲(chǔ)等服務(wù),但實(shí)際的數(shù)據(jù)并不存放在Namenode。Namenode的作用就像是文件系統(tǒng)的總指揮,并向訪問文件系統(tǒng)的客戶機(jī)提供文件系統(tǒng)的映射,這種做法并不是Goog
15、le或Hadoop的創(chuàng)新,這和傳統(tǒng)并行計(jì)算系統(tǒng)中的單一系統(tǒng)映像(Single System Image)的做法相同。HDFS中的Datanode用于實(shí)際對(duì)數(shù)據(jù)的存放,對(duì)Datanode上數(shù)據(jù)的訪問并不通過Namemode,而是與用戶直接建立數(shù)據(jù)通信。Hadoop啟動(dòng)后我們能看到Namenode和Datanode這兩個(gè)進(jìn)程。6.2.2HDFS文件的基本結(jié)構(gòu)HDFS的工作過程是這樣的:用戶請(qǐng)求創(chuàng)建文件的指令由Namenode進(jìn)行接收,Namenode將存儲(chǔ)數(shù)據(jù)的Datanode的IP返回給用戶,并通知其他接收副本的Datanode,由用戶直接與Datanode進(jìn)行數(shù)據(jù)傳送。Namenode同時(shí)存儲(chǔ)
16、相關(guān)的元數(shù)據(jù)。整個(gè)文件系統(tǒng)采用標(biāo)準(zhǔn)TCP/IP協(xié)議通信,實(shí)際是架設(shè)在Linux文件系統(tǒng)上的一個(gè)上層文件系統(tǒng)。HDFS上的一個(gè)典型文件大小一般都在G字節(jié)至T字節(jié)。6.2.2HDFS文件的基本結(jié)構(gòu)主從式是云計(jì)算系統(tǒng)的一種典型架構(gòu)方法,系統(tǒng)通過主節(jié)點(diǎn)屏蔽底層的復(fù)雜結(jié)構(gòu),并向用戶提供方便的文件目錄映射。有些改進(jìn)的主從式架構(gòu)可能會(huì)采用分層的主從式方法,以減輕主節(jié)點(diǎn)的負(fù)荷。6.2.3HDFS的存儲(chǔ)過程HDFS在對(duì)一個(gè)文件進(jìn)行存儲(chǔ)時(shí)有兩個(gè)重要的策略:一個(gè)是副本策略,一個(gè)是分塊策略。副本策略保證了文件存儲(chǔ)的高可靠性;分塊策略保證數(shù)據(jù)并發(fā)讀寫的效率并且是MapReduce實(shí)現(xiàn)并行數(shù)據(jù)處理的基礎(chǔ)。6.2.3HDF
17、S的存儲(chǔ)過程HDFS的分塊策略:通常HDFS在存儲(chǔ)一個(gè)文件會(huì)將文件切為64MB大小的塊來進(jìn)行存儲(chǔ),數(shù)據(jù)塊會(huì)被分別存儲(chǔ)在不同的Datanode節(jié)點(diǎn)上,這一過程其實(shí)就是一種數(shù)據(jù)任務(wù)的切分過程,在后面對(duì)數(shù)據(jù)進(jìn)行MapReduce操作時(shí)十分重要,同時(shí)數(shù)據(jù)被分塊存儲(chǔ)后在數(shù)據(jù)讀寫時(shí)能實(shí)現(xiàn)對(duì)數(shù)據(jù)的并發(fā)讀寫,提高數(shù)據(jù)讀寫效率。HDFS采用64MB這樣較大的文件分塊策略有以下3個(gè)優(yōu)點(diǎn):(1)降低客戶端與主服務(wù)器的交互代價(jià);(2)降低網(wǎng)絡(luò)負(fù)載;(3)減少主服務(wù)器中元數(shù)據(jù)的大小。6.2.3HDFS的存儲(chǔ)過程HDFS的副本策略:HDFS對(duì)數(shù)據(jù)塊典型的副本策略為3個(gè)副本,第一個(gè)副本存放在本地節(jié)點(diǎn),第二個(gè)副本存放在同一個(gè)
18、機(jī)架的另一個(gè)節(jié)點(diǎn),第三個(gè)本副本存放在不同機(jī)架上的另一個(gè)節(jié)點(diǎn)。這樣的副本策略保證了在HDFS文件系統(tǒng)中存儲(chǔ)的文件具有很高的可靠性。6.2.3HDFS的存儲(chǔ)過程一個(gè)文件寫入HDFS的基本過程可以描述如下:寫入操作首先由Namenode為該文件創(chuàng)建一個(gè)新的記錄,該記錄為文件分配存儲(chǔ)節(jié)點(diǎn)包括文件的分塊存儲(chǔ)信息,在寫入時(shí)系統(tǒng)會(huì)對(duì)文件進(jìn)行分塊,文件寫入的客戶端獲得存儲(chǔ)位置的信息后直接與指定的Datanode進(jìn)行數(shù)據(jù)通信,將文件塊按Namenode分配的位置寫入指定的Datanode,數(shù)據(jù)塊在寫入時(shí)不再通過Namenode,因此Namenode不會(huì)成為數(shù)據(jù)通信的瓶頸。6.3MapReduce編程框架 在云計(jì)
19、算和大數(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ā)展歷史MapReduce出現(xiàn)的歷史要追述到1956年,圖靈獎(jiǎng)獲得者著名的人工智能專家McCarthy首次提出了LISP語言的構(gòu)想,而在LISP語言中就包含了現(xiàn)在我們所采用的MapReduce 功能。LISP語言是一種用于人工智能領(lǐng)域的語言,在人工智能領(lǐng)域有很多的應(yīng)用,LISP在1956年設(shè)計(jì)時(shí)主要是希望能有效地進(jìn)行“符號(hào)運(yùn)算”。LISP是一種表處理語言,其邏輯簡(jiǎn)單但結(jié)構(gòu)不同于其他的高級(jí)語言。1960年,McCarthy
20、更是極有預(yù)見性地提出:“今后計(jì)算機(jī)將會(huì)作為公共設(shè)施提供給公眾”,這一觀點(diǎn)已與現(xiàn)在人們對(duì)云計(jì)算的定義極為相近了,所以我們把McCarthy稱為“云計(jì)算之父”。MapReduce在McCarthy提出時(shí)并沒有考慮到其在分布式系統(tǒng)和大數(shù)據(jù)上會(huì)有如此大的應(yīng)用前景,只是作為一種函數(shù)操作來定義的。6.3.1MapReduce的發(fā)展歷史2004年Google公司的Dean發(fā)表文章將MapReduce這一編程模型在分布式系統(tǒng)中的應(yīng)用進(jìn)行了介紹,從此MapRuduce分布式編程模型進(jìn)入了人們的視野。可以認(rèn)為分布式MapReduce是由Google公司首先提出的。Hadoop跟進(jìn)了Google的這一思想,可以認(rèn)為
21、Hadoop是一個(gè)開源版本的Google系統(tǒng),正是由于Hadoop的跟進(jìn)才使普通用戶得以開發(fā)自己的基于MapReduce框架的云計(jì)算應(yīng)用系統(tǒng)。6.3.2MapReduce的基本工作過程MapReduce是一種處理大數(shù)據(jù)集的編程模式,它借鑒了最早出現(xiàn)在LISP語言和其他函數(shù)語言中的map和reduce操作,MapReduce的基本過程為:用戶通過map函數(shù)處理key/value對(duì),從而產(chǎn)生一系列不同的key/value對(duì),reduce函數(shù)將key值相同的key/value對(duì)進(jìn)行合并。現(xiàn)實(shí)中的很多處理任務(wù)都可以利用這一模型進(jìn)行描述。通過MapReduce框架能實(shí)現(xiàn)基于數(shù)據(jù)切分的自動(dòng)并行計(jì)算,大大簡(jiǎn)
22、化了分布式編程的難度,并為在相對(duì)廉價(jià)的商品化服務(wù)器集群系統(tǒng)上實(shí)現(xiàn)大規(guī)模的數(shù)據(jù)處理提供了可能。6.3.2MapReduce的基本工作過程MapReduce的過程其實(shí)非常簡(jiǎn)單,我們用一個(gè)實(shí)際的例子來說明MapReduce的編程模型。假設(shè)我們需要對(duì)一個(gè)文件example.txt中出現(xiàn)的單詞次數(shù)進(jìn)行統(tǒng)計(jì),這就是著名的wordcount例子,在這個(gè)例子中MapReduce的編程模型可以這樣來描述:用戶需要處理的文件example.txt已被分為多個(gè)數(shù)據(jù)片存儲(chǔ)在集群系統(tǒng)中不同的節(jié)點(diǎn)上了,用戶先使用一個(gè)Map函數(shù)Map(example.txt, 文件內(nèi)容),在這個(gè)Map函數(shù)中key值為example.txt
23、,key通常是指一個(gè)具有唯一值的標(biāo)識(shí),value值就是example.txt文件中的內(nèi)容。Map操作程序通常會(huì)被分布到存有文件example.txt數(shù)據(jù)片段的節(jié)點(diǎn)上發(fā)起,這個(gè)Map操作將產(chǎn)生一組中間key/value對(duì)(word, count),6.3.2MapReduce的基本工作過程這里的word代表出現(xiàn)在文件example.txt片段中的任一個(gè)單詞,每個(gè)Map操作所產(chǎn)生的key/value對(duì)只代表example.txt一部分內(nèi)容的統(tǒng)計(jì)值。Reduce函數(shù)將接收集群中不同節(jié)點(diǎn)Map函數(shù)生成的中間key/value對(duì),并將Key相同的key/value對(duì)進(jìn)行合并,在這個(gè)例子中Reduce函數(shù)
24、將對(duì)所有key值相同的value值進(jìn)行求和合并,最后輸出的key/value對(duì)就是(word, count),其中count就是這個(gè)單詞在文件example.txt中出現(xiàn)的總的次數(shù)。6.3.2MapReduce的基本工作過程下面我們通過一個(gè)簡(jiǎn)單例子來講解MapReduce的基本原理。1任務(wù)的描述來自江蘇、浙江、山東三個(gè)省的9所高校聯(lián)合舉行了一場(chǎng)編程大賽,每個(gè)省有3所高校參加,每所高校各派5名隊(duì)員參賽,各所高校的比賽平均成績(jī)?nèi)绫?.1所示。江蘇省浙江省山東省南京大學(xué)90浙江大學(xué)95山東大學(xué)92東南大學(xué)93浙江工業(yè)大學(xué)84中國海洋大學(xué)85河海大學(xué)84寧波大學(xué)88青島大學(xué)87表6.1原始比賽成績(jī)6.
25、3.2MapReduce的基本工作過程我們可以用如表6.2所示的形式來表示成績(jī),這樣每所高校就具備了所屬省份和平均分?jǐn)?shù)這兩個(gè)屬性,即。南京大學(xué):江蘇省,90東南大學(xué):江蘇省,93河海大學(xué):江蘇省,84浙江大學(xué):浙江省,95浙江工業(yè)大學(xué):浙江省,84寧波大學(xué):浙江省,88山東大學(xué):山東省,92中國海洋大學(xué):山東省,85青島大學(xué):山東省,87表6.2增加屬性信息后的比賽成績(jī)6.3.2MapReduce的基本工作過程統(tǒng)計(jì)各個(gè)省份高校的平均分?jǐn)?shù)時(shí),高校的名稱并不是很重要,我們略去高校名稱,如表6.3所示。江蘇省,90江蘇省,93江蘇省,84浙江省,95浙江省,84浙江省,88山東省,92山東省,85山
26、東省,87表6.3略去高校名稱后的比賽成績(jī)接下來對(duì)各個(gè)省份的高校的成績(jī)進(jìn)行匯總,如表6.4所示。江蘇省,90、93、84浙江省,95、84、88山東省,92、85、87表6.4各省比賽成績(jī)匯總6.3.2MapReduce的基本工作過程計(jì)算求得各省高校的平均值如表6.5所示。表6.5各省平均成績(jī)江蘇省,89浙江省,89山東省,88以上為計(jì)算各省平均成績(jī)的主要步驟,我們可以用MapReduce來實(shí)現(xiàn),其詳細(xì)步驟如下:2任務(wù)的MapReduce實(shí)現(xiàn)MapReduce包含Map、Shuffle和Reduce三個(gè)步驟,其中Shuffle由Hadoop自動(dòng)完成,Hadoop的使用者可以無需了解并行程序的底
27、層實(shí)現(xiàn),只需關(guān)注Map和Reduce的實(shí)現(xiàn)。6.3.2MapReduce的基本工作過程1. Map Input:在Map部分,我們需要輸入數(shù)據(jù),這里Key是高校的名稱,Value是屬性值,即所屬省份和平均分?jǐn)?shù),如表6.6所示。Key:南京大學(xué)Value:江蘇省,90Key:東南大學(xué)Value:江蘇省,93Key:河海大學(xué)Value:江蘇省,84Key:浙江大學(xué)Value:浙江省,95Key:浙江工業(yè)大學(xué)Value:浙江省,84Key:寧波大學(xué)Value:浙江省,88Key:山東大學(xué)Value:山東省,92Key:中國海洋大學(xué)Value:山東省,85Key:青島大學(xué)Value:山東省,87表6.
28、6Map Input數(shù)據(jù)6.3.2MapReduce的基本工作過程2. Map Output:對(duì)所屬省份平均分?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.7Map Output數(shù)據(jù)6.3.2MapReduce的基本工作過程3. Shuffle Output:Shuffle由Ha
29、doop自動(dòng)完成,其任務(wù)是實(shí)現(xiàn)Map,對(duì)Key進(jìn)行分組,用戶可以獲得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ù)的功能是完成用戶的計(jì)算邏輯,這里的任務(wù)是計(jì)算每個(gè)省份的高校學(xué)生的比賽平均成績(jī),獲得的最終結(jié)果如表6.
30、9所示。江蘇省,89 浙江省,89 山東省,88 表6.9Reduce Output數(shù)據(jù)6.3.3LISP中的MapReduce為了進(jìn)一步理解MapReduce,我們簡(jiǎn)單介紹最早使用Map和Reduce的LISP語言中的Map和Reduce操作。下面的LISP語句定義的這個(gè)Map操作是將向量(1 2 3 4 5)和向量(10 9 8 7 6)進(jìn)行相乘的操作,輸出也為向量(10 18 24 28 30)。(map vector #*#(1 2 3 4 5)#(10 9 8 7 6)-#(10 18 24 28 30)這個(gè)Map操作對(duì)應(yīng)于向量到向量的映射,兩個(gè)向量按乘積關(guān)系進(jìn)行映射。6.3.3LI
31、SP中的MapReduce下面的LISP語句定義的這個(gè)Reduce操作是將向量(1 2 3 4 5 6 7 8 9 10)中的元素進(jìn)行求和的Reduce操作,輸出結(jié)果為55。 (reduce #+#(1 2 3 4 5 6 7 8 9 10)-55這個(gè)Reduce操作對(duì)應(yīng)于向量的約簡(jiǎn),它將向量按求和的關(guān)系約簡(jiǎn)為一個(gè)值。可以看出,在LISP語言中Map和Reduce只是作為一種操作定義,并沒有體現(xiàn)出任何的分布式計(jì)算的特征。6.3.4MapReduce的特點(diǎn)MapReduce主要具有以下幾個(gè)特點(diǎn):(1)需要在集群條件下使用。MapReduce的主要作用是實(shí)現(xiàn)對(duì)大數(shù)據(jù)的分布式處理,其設(shè)計(jì)時(shí)的基本要求
32、就是在大規(guī)模集群條件下的(雖然一些系統(tǒng)可以在單機(jī)下運(yùn)行,但這種條件下只具有仿真運(yùn)行的意義),Google作為分布式MapReduce提出者,它本身就是世界上最大的集群系統(tǒng),所以MapReduce天然需要在集群系統(tǒng)下運(yùn)行才能有效。6.3.4MapReduce的特點(diǎn)(2)需要有相應(yīng)的分布式文件系統(tǒng)的支持。這里要注意的是單獨(dú)的MapReduce模式并不具有自動(dòng)的并行性能,就像它在LISP語言中的表現(xiàn)一樣,它只有與相應(yīng)的分布式文件系統(tǒng)相結(jié)合才能完美地體現(xiàn)MapReduce這種編程框架的優(yōu)勢(shì)。如Google系統(tǒng)對(duì)應(yīng)的分布式文件系統(tǒng)為GFS,Hadoop系統(tǒng)對(duì)應(yīng)的分布式文件系統(tǒng)為HDFS。MapReduc
33、e能實(shí)現(xiàn)計(jì)算的自動(dòng)并行化很大程度上是由于分布式文件系統(tǒng)在對(duì)文件存儲(chǔ)時(shí)就實(shí)現(xiàn)了對(duì)大數(shù)據(jù)文件的切分,這種并行方法也叫數(shù)據(jù)并行方法。數(shù)據(jù)并行方法避免了對(duì)計(jì)算任務(wù)本身的人工切分,降低了編程的難度,而像MPI往往需要人工對(duì)計(jì)算任務(wù)進(jìn)行切分,因此分布式編程難度較大。6.3.4MapReduce的特點(diǎn)(3)可以在商品化集群條件下運(yùn)行,不需要特別的硬件支持.和高性能計(jì)算不同,基于MapReduce的系統(tǒng)往往不需要特別的硬件支持,按Google的報(bào)道,他們的實(shí)驗(yàn)系統(tǒng)中的節(jié)點(diǎn)就是基于典型的雙核X86的系統(tǒng),配置24GB的內(nèi)存,網(wǎng)絡(luò)為百兆網(wǎng)和千兆網(wǎng)構(gòu)成,存儲(chǔ)設(shè)備的便宜的IDE硬盤。6.3.4MapReduce的特點(diǎn)
34、(4)假設(shè)節(jié)點(diǎn)的失效為正常情況。傳統(tǒng)的服務(wù)器通常被認(rèn)為是穩(wěn)定的,但在服務(wù)器數(shù)量巨大或采用廉價(jià)服務(wù)的條件下,服務(wù)器的實(shí)效將變得常見,所以通常基于MapReduce的分布式計(jì)算系統(tǒng)采用了存儲(chǔ)備份、計(jì)算備份和計(jì)算遷移等策略來應(yīng)對(duì),從而實(shí)現(xiàn)在單節(jié)點(diǎn)不穩(wěn)定的情況下保持系統(tǒng)整個(gè)的穩(wěn)定性。6.3.4MapReduce的特點(diǎn)(5)適合對(duì)大數(shù)據(jù)進(jìn)行處理。由于基于MapReduce的系統(tǒng)并行化是通過數(shù)據(jù)切分實(shí)現(xiàn)的數(shù)據(jù)并行,同時(shí)計(jì)算程序啟動(dòng)時(shí)需要向各節(jié)點(diǎn)拷貝計(jì)算程序,過小的文件在這種模式下工作反而會(huì)效率低下。Google的實(shí)驗(yàn)也表明一個(gè)由150秒時(shí)間完成的計(jì)算任務(wù),程序啟動(dòng)階段的時(shí)間就花了60秒,可以想象,如果計(jì)算
35、任務(wù)數(shù)據(jù)過小,這樣的花費(fèi)是不值得的,同時(shí)對(duì)過小的數(shù)據(jù)進(jìn)行切分也無必要。所以MapReduce更適合進(jìn)行大數(shù)據(jù)的處理。6.3.4MapReduce的特點(diǎn)(6)計(jì)算向存儲(chǔ)遷移。傳統(tǒng)的高性能計(jì)算數(shù)據(jù)集中存儲(chǔ),計(jì)算時(shí)數(shù)據(jù)向計(jì)算節(jié)點(diǎn)拷貝,而基于MapReduce的分布式系統(tǒng)在數(shù)據(jù)存儲(chǔ)時(shí)就實(shí)現(xiàn)了分布式存儲(chǔ),一個(gè)較大的文件會(huì)被切分成大量較小的文件存儲(chǔ)于不同的節(jié)點(diǎn),系統(tǒng)調(diào)度機(jī)制在啟動(dòng)計(jì)算時(shí)會(huì)將計(jì)算程序盡可能分發(fā)給需要處理的數(shù)據(jù)所在的節(jié)點(diǎn)。計(jì)算程序的大小通常會(huì)比數(shù)據(jù)文件小的多,所以遷移計(jì)算的網(wǎng)絡(luò)代價(jià)要比遷移數(shù)據(jù)小的多。6.3.4MapReduce的特點(diǎn)(7)MapReduce的計(jì)算效率會(huì)受最慢的Map任務(wù)影響。
36、由于Reduce操作的完成需要等待所有Map任務(wù)的完成,所以如果Map任務(wù)中有一個(gè)任務(wù)出現(xiàn)了延遲,則整個(gè)MapReduce操作將受最慢的Map任務(wù)的影響。6.4實(shí)現(xiàn)Map/Reduce的C語言實(shí)例Map/Reduce操作代表了一大類的數(shù)據(jù)處理操作方式,為了讓大家對(duì)Map/Reduce的工作過程有一個(gè)直觀的了解,下面的程序采用C語言實(shí)現(xiàn)了一個(gè)簡(jiǎn)單經(jīng)典的Map/Reduce計(jì)算,計(jì)算從控制臺(tái)輸入的字符串中單詞的計(jì)數(shù),這一計(jì)算過程都是在同一個(gè)節(jié)點(diǎn)上完成的,并未實(shí)現(xiàn)計(jì)算的并行化,歷史上的Lisp語言也是運(yùn)行在單機(jī)的上的程序,這個(gè)例子的主要目的是讓大家理解這一操作的過程。程序中的my_map()和my_
37、reduce()函數(shù)分別實(shí)現(xiàn)了對(duì)字符串的Map和Reduce操作。6.4實(shí)現(xiàn)Map/Reduce的C語言實(shí)例程序6.1輸入: this is map reduce hello map hello reduce6.4實(shí)現(xiàn)Map/Reduce的C語言實(shí)例輸出: This is map results:This is reduce results:此運(yùn)行實(shí)例中我們從控制臺(tái)輸入字符串“this is map reduce hello map hello reduce”,程序通過Map和Reduce過程對(duì)字符串的的單詞出現(xiàn)的頻率進(jìn)行統(tǒng)計(jì),并輸出了結(jié)果,這是一個(gè)典型的Map/Reduce過程。6.5建立H
38、adoop開發(fā)環(huán)境本節(jié)使用三個(gè)Linux虛擬機(jī)來構(gòu)建Hadoop集群環(huán)境,其中一個(gè)虛擬機(jī)作為NameNode(Master節(jié)點(diǎn)),另外兩個(gè)虛擬機(jī)作為DataNode(Slave節(jié)點(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.5 Hadoop集群配置6.5.1相關(guān)準(zhǔn)備工作6.5.1相關(guān)準(zhǔn)備工作6.5.1相關(guān)準(zhǔn)備工作(4)新建用戶“hadoop”。在每個(gè)節(jié)點(diǎn)上使用useradd
39、指令新建一個(gè)用戶hadoop,并設(shè)置密碼。 useradd hadoop passwd hadoop(5)永久關(guān)閉每個(gè)節(jié)點(diǎn)的防火墻(root權(quán)限)。在每個(gè)節(jié)點(diǎn)上執(zhí)行以下指令,這樣將永久性的關(guān)閉每個(gè)階段的防火墻 chkconfig iptables off/永久性生效,重啟后不會(huì)復(fù)原6.5.1相關(guān)準(zhǔn)備工作(6)配置ssh實(shí)現(xiàn)Hadoop結(jié)點(diǎn)間用戶的無密碼訪問Hadoop需要在各個(gè)結(jié)點(diǎn)間進(jìn)行信息傳遞,因此需要實(shí)現(xiàn)結(jié)點(diǎn)間的無密碼訪問,這與采用MPI進(jìn)行并行程序設(shè)計(jì)相同,否則系統(tǒng)會(huì)不停地向你請(qǐng)求密碼驗(yàn)證。這里的配置在各個(gè)節(jié)點(diǎn)的hadoop用戶下進(jìn)行。配置過程與MPI部分的配置過程相關(guān),這里不再詳述,配
40、置完成后使用ssh指令可以在三個(gè)虛擬機(jī)之間實(shí)現(xiàn)無密碼訪問。6.5.2 JDK的安裝配置Hadoop是采用Java編寫的,每個(gè)虛擬機(jī)上均需要安裝Java的JDK,JDK的安裝配置需在root用戶下進(jìn)行,具體步驟如下。(1)在Sun官方網(wǎng)站下載JDK軟件包jdk-7u45-linux-x64.tar.gz。(2)新建目錄/usr/java,將下載的JDK軟件包進(jìn)行進(jìn)行解壓。 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命令測(cè)試JDK的安裝是否成功:which java系統(tǒng)顯示如下信息:/usr
42、/java/jdk1.6.0_12/bin/java此時(shí)JDK配置成功,接下來可進(jìn)行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的安裝配置編譯測(cè)試程序: javac test.java運(yùn)行測(cè)試程序: java test如果輸出為: This is a hadoop test program! JDK successe
43、d!表明JDK已成功安裝,并能成功編譯執(zhí)行Java程序。6.5.3下載、解壓Hadoop,配置Hadoop環(huán)境變量Hadoop集群中每個(gè)節(jié)點(diǎn)的安裝、配置是相同的,我們可以現(xiàn)在一個(gè)虛擬機(jī)上進(jìn)行安裝、配置,然后將其復(fù)制到其他節(jié)點(diǎn)的相應(yīng)目錄。將hadoop-0.21.0.tar.gz放置在vm1的/home/hadoop目錄中,用hadoop用戶對(duì)其進(jìn)行解壓縮: cd /home/hadoop tar zxvf hadoop-0.21.0.tar.gz6.5.3下載、解壓Hadoop,配置Hadoop環(huán)境變量把Hadoop的安裝路徑添加到“/etc/profile”中,在文件的末尾添下面的代碼,每個(gè)
44、節(jié)點(diǎn)均需要進(jìn)行此步配置。 #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文件夾中,我們需要對(duì)該文件夾中以下文件進(jìn)行修改:hadoop-env.sh、core-site.xml、mapred-site.xml、masters、slaves。(1)修改hado
45、op-env.sh文件。Hadoop的Java環(huán)境變量在hadoop-env.sh中進(jìn)行設(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的地址和端口號(hào),以及用于保存HDFS信息的tmp文件夾,對(duì)HDFS進(jìn)行重新格式化的時(shí)候先行刪除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é)點(diǎn)的IP,這里“01”。6.5.4修改Hadoop配置文件(3)修改mapred-site.xml文件。在mapred-site.xml文件的在 之間添加以下代碼,配置JobTracker的主機(jī)名和端口。 mapreduce.jobtracker.address
47、 01:9001 NameNode6.5.4修改Hadoop配置文件(4)修改masters文件。使用vim打開masters文件,寫入NameNode(Master)節(jié)點(diǎn)的主機(jī)名,這里為vm1,保存并退出。 vm1(5)修改slaves文件。使用vim打開slaves文件,寫入DataNode(Slaver)節(jié)點(diǎn)的主機(jī)名,這里為vm1、vm2,保存并退出。 Vm2 vm36.5.5將配置好的Hadoop文件復(fù)制到其他節(jié)點(diǎn)到了這里,我們已經(jīng)安裝、配置了一個(gè)Hadoop節(jié)點(diǎn),Hadoop集群中每個(gè)節(jié)點(diǎn)的安裝、配置是相同的,這里需要將vm1上的Hadoop文件夾整體復(fù)制到其他的節(jié)點(diǎn),執(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在正式啟動(dòng)Hadoop之前,需要執(zhí)行以下指令,對(duì)Hadoop的分布式文件進(jìn)行初始化: cd /home/hadoop/hadoop-0.21.0/bin ./hadoop namenode format順利執(zhí)行此格式化指令后,會(huì)顯示如下信息: 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 江西省豐城四中2025年高三下第一次模擬考試化學(xué)試題含解析
- 天津?yàn)I海汽車工程職業(yè)學(xué)院《電工電子綜合實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 銀川能源學(xué)院《口腔頜面外科學(xué)實(shí)驗(yàn)一》2023-2024學(xué)年第二學(xué)期期末試卷
- 岳西縣2024-2025學(xué)年數(shù)學(xué)四下期末教學(xué)質(zhì)量檢測(cè)模擬試題含解析
- 伊犁職業(yè)技術(shù)學(xué)院《兒童歌曲伴奏與彈唱》2023-2024學(xué)年第二學(xué)期期末試卷
- 山西經(jīng)貿(mào)職業(yè)學(xué)院《基礎(chǔ)化學(xué)實(shí)驗(yàn)Ⅱ》2023-2024學(xué)年第二學(xué)期期末試卷
- 寧夏銀川市名校2025年初三數(shù)學(xué)試題第一次聯(lián)合調(diào)考3月聯(lián)考試題含解析
- 南京航空航天大學(xué)金城學(xué)院《基因組與蛋白質(zhì)組學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 西南科技大學(xué)《機(jī)場(chǎng)工程概論》2023-2024學(xué)年第二學(xué)期期末試卷
- 江西應(yīng)用技術(shù)職業(yè)學(xué)院《跨文化交際》2023-2024學(xué)年第二學(xué)期期末試卷
- FITS加氫說明書
- 半導(dǎo)體物理與器件物理
- 新員工培訓(xùn)考試【圖書專員】
- 防偽包裝技術(shù)
- X互聯(lián)網(wǎng)公司W(wǎng)LAN無線網(wǎng)絡(luò)優(yōu)化方案全解
- 圓柱鋼模計(jì)算書
- 合成寶石特征x
- 年度研發(fā)費(fèi)用專項(xiàng)審計(jì)報(bào)告模板(共22頁)
- 隧道工程隧道支護(hù)結(jié)構(gòu)設(shè)計(jì)實(shí)用教案
- 中央民族大學(xué)人類學(xué)博士考試人類學(xué)理論與方法真題
- 得力打卡機(jī)破解Excel工作表保護(hù)密碼4頁
評(píng)論
0/150
提交評(píng)論