技術(shù)分享 使用Linux和ApacheHadoop實(shí)現(xiàn)云計算
本節(jié)和大家學(xué)習(xí)一下如何使用Linux和ApacheHadoop進(jìn)行云計算,主要介紹一下什么是云計算,以及云計算的層和現(xiàn)有的服務(wù),相信通過本節(jié)的介紹大家對Hadoop云計算有一定的認(rèn)識。
用Linux和ApacheHadoop進(jìn)行云計算
IBM?、Google、VMWare和Amazon等公司已經(jīng)開始提供云計算產(chǎn)品和戰(zhàn)略。本文講解如何使用ApacheHadoop構(gòu)建一個MapReduce框架以建立Hadoop集群,以及如何創(chuàng)建在Hadoop上運(yùn)行的示例MapReduce應(yīng)用程序。還將討論如何在云上設(shè)置耗費(fèi)時間/磁盤的任務(wù)。
云計算簡介
近來云計算越來越熱門了,云計算已經(jīng)被看作IT業(yè)的新趨勢。云計算可以粗略地定義為使用自己環(huán)境之外的某一服務(wù)提供的可伸縮計算資源,并按使用量付費(fèi)。可以通過Internet訪問“云”中的任何資源,而不需要擔(dān)心計算能力、帶寬、存儲、安全性和可靠性等問題。
本文簡要介紹AmazonEC2這樣的云計算平臺,可以租借這種平臺上的虛擬Linux?服務(wù)器;然后介紹開放源碼MapReduce框架ApacheHadoop,這個框架將構(gòu)建在虛擬Linux服務(wù)器中以建立云計算框架。但是,Hadoop不僅可以部署在任何廠商提供的VM上,還可以部署在物理機(jī)器上的一般LinuxOS中。
在討論ApacheHadoop之前,我們先簡要介紹一下云計算系統(tǒng)的結(jié)構(gòu)。圖1顯示云計算的各個層以及現(xiàn)有的一些服務(wù)。關(guān)于云計算的各個層的詳細(xì)信息,請參見參考資料。
基礎(chǔ)設(shè)施即服務(wù)(Infrastructure-as-a-Service,IaaS)是指以服務(wù)的形式租借基礎(chǔ)設(shè)施(計算資源和存儲)。IaaS讓用戶可以租借計算機(jī)(即虛擬主機(jī))或數(shù)據(jù)中心,可以指定特定的服務(wù)質(zhì)量約束,比如能夠運(yùn)行某些操作系統(tǒng)和軟件。AmazonEC2在這些層中作為IaaS,向用戶提供虛擬的主機(jī)。平臺即服務(wù)(Platform-as-a-Service,PaaS)主要關(guān)注軟件框架或服務(wù),提供在基礎(chǔ)設(shè)施中進(jìn)行“云”計算所用的API。ApacheHadoop作為PaaS,它構(gòu)建在虛擬主機(jī)上,作為云計算平臺。
云計算的層和現(xiàn)有服務(wù)
AmazonEC2
AmazonEC2是一個Web服務(wù),它允許用戶請求具有各種資源(CPU、磁盤、內(nèi)存等)的虛擬機(jī)器。用戶只需按使用的計算時間付費(fèi),其他事情全交給Amazon處理。
這些實(shí)例(AmazonMachineImage,AMI)基于Linux,可以運(yùn)行您需要的任何應(yīng)用程序或軟件。在從Amazon租借服務(wù)器之后,可以像對待物理服務(wù)器一樣使用一般的SSH工具設(shè)置連接和維護(hù)服務(wù)器。
對EC2的詳細(xì)介紹超出了本文的范圍。更多信息請參見參考資料。
部署Hadoop云計算框架的最好方法是把它部署在AMI上,這樣可以利用云資源,不需要考慮計算能力、帶寬、存儲等問題。但是,在本文的下一部分中,我們將在本地的Linux服務(wù)器VMWare映像中構(gòu)建Hadoop,因為Hadoop不僅適用于云解決方案。在此之前,我們先介紹一下ApacheHadoop。
ApacheHadoop
ApacheHadoop是一個軟件框架(平臺),它可以分布式地操縱大量數(shù)據(jù)。它于2006年出現(xiàn),由Google、Yahoo!和IBM等公司支持。可以認(rèn)為它是一種PaaS模型。
它的設(shè)計核心是MapReduce實(shí)現(xiàn)和HDFS(HadoopDistributedFileSystem),它們源自MapReduce(由一份Google文件引入)和GoogleFileSystem。
MapReduce
MapReduce是Google引入的一個軟件框架,它支持在計算機(jī)(即節(jié)點(diǎn))集群上對大型數(shù)據(jù)集進(jìn)行分布式計算。它由兩個過程組成,映射(Map)和縮減(Reduce)。
在映射過程中,主節(jié)點(diǎn)接收輸入,把輸入分割為更小的子任務(wù),然后把這些子任務(wù)分布到工作者節(jié)點(diǎn)。
工作者節(jié)點(diǎn)處理這些小任務(wù),把結(jié)果返回給主節(jié)點(diǎn)。
然后,在縮減過程中,主節(jié)點(diǎn)把所有子任務(wù)的結(jié)果組合成輸出,這就是原任務(wù)的結(jié)果。
MapReduce流程
MapReduce的優(yōu)點(diǎn)是它允許對映射和縮減操作進(jìn)行分布式處理。因為每個映射操作都是獨(dú)立的,所有映射都可以并行執(zhí)行,這會減少總計算時間。
HDFS
對HDFS及其使用方法的完整介紹超出了本文的范圍。更多信息請參見參考資料。
從最終用戶的角度來看,HDFS就像傳統(tǒng)的文件系統(tǒng)一樣。可以使用目錄路徑對文件執(zhí)行CRUD操作。但是,由于分布式存儲的性質(zhì),有“NameNode”和“DataNode”的概念,它們承擔(dān)各自的責(zé)任。
NameNode是DataNode的主節(jié)點(diǎn)。它在HDFS中提供元數(shù)據(jù)服務(wù)。元數(shù)據(jù)說明DataNode的文件映射。它還接收操作命令并決定哪些DataNode應(yīng)該執(zhí)行操作和復(fù)制。
DataNode作為HDFS的存儲塊。它們還響應(yīng)從NameNode接收的塊創(chuàng)建、刪除和復(fù)制命令。
JobTracker和TaskTracker
在提交應(yīng)用程序時,應(yīng)該提供包含在HDFS中的輸入和輸出目錄。JobTracker作為啟動MapReduce應(yīng)用程序的單一控制點(diǎn),它決定應(yīng)該創(chuàng)建多少個TaskTracker和子任務(wù),然后把每個子任務(wù)分配給TaskTracker。每個TaskTracker向JobTracker報告狀態(tài)和完成后的任務(wù)。
通常,一個主節(jié)點(diǎn)作為NameNode和JobTracker,從節(jié)點(diǎn)作為DataNode和TaskTracker。Hadoop集群的概念視圖和MapReduce的流程見圖2。請期待下節(jié)有關(guān)Linux和ApacheHadoop進(jìn)行云計算的介紹。