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