技術分享:使用Hadoop進行分布式并行編程
在學習Hadoop的過程中,你可能會遇到用Hadoop進行分布式并行編程的問題,本節就向大家介紹一下用Hadoop進行分布式并行編程的方法,希望通過本節的介紹大家能夠對Hadoop有新的認識。
用Hadoop進行分布式并行編程
Hadoop簡介
Hadoop是一個開源的可運行于大規模集群上的分布式并行編程框架,由于分布式存儲對于分布式編程來說是必不可少的,這個框架中還包含了一個分布式文件系統HDFS(HadoopDistributedFileSystem)。
也許到目前為止,Hadoop還不是那么廣為人知,其***的版本號也僅僅是0.16,距離1.0似乎都還有很長的一段距離,但提及Hadoop一脈相承的另外兩個開源項目Nutch和Lucene(三者的創始人都是DougCutting),那絕對是大名鼎鼎。Lucene是一個用Java開發的開源高性能全文檢索工具包,它不是一個完整的應用程序,而是一套簡單易用的API。在全世界范圍內,已有無數的軟件系統,Web網站基于Lucene實現了全文檢索功能,后來DougCutting又開創了***個開源的Web搜索引擎(http://www.nutch.org)Nutch,它在Lucene的基礎上增加了網絡爬蟲和一些和Web相關的功能,一些解析各類文檔格式的插件等,此外,Nutch中還包含了一個分布式文件系統用于存儲數據。從Nutch0.8.0版本之后,DougCutting把Nutch中的分布式文件系統以及實現MapReduce算法的代碼獨立出來形成了一個新的開源項Hadoop。Nutch也演化為基于Lucene全文檢索以及Hadoop分布式計算平臺的一個開源搜索引擎。
基于Hadoop,你可以輕松地編寫可處理海量數據的分布式并行程序,并將其運行于由成百上千個結點組成的大規模計算機集群上。從目前的情況來看,Hadoop注定會有一個輝煌的未來:"云計算"是目前灸手可熱的技術名詞,全球各大IT公司都在投資和推廣這種新一代的計算模式,而Hadoop又被其中幾家主要的公司用作其"云計算"環境中的重要基礎軟件,如:雅虎正在借助Hadoop開源平臺的力量對抗Google,除了資助Hadoop開發團隊外,還在開發基于Hadoop的開源項目Pig,這是一個專注于海量數據集分析的分布式計算程序。Amazon公司基于Hadoop推出了AmazonS3(AmazonSimpleStorageService),提供可靠,快速,可擴展的網絡存儲服務,以及一個商用的云計算平臺AmazonEC2(AmazonElasticComputeCloud)。在IBM公司的云計算項目--"藍云計劃"中,Hadoop也是其中重要的基礎軟件。Google正在跟IBM合作,共同推廣基于Hadoop的云計算。
迎接編程方式的變革
在摩爾定律的作用下,以前程序員根本不用考慮計算機的性能會跟不上軟件的發展,因為約每隔18個月,CPU的主頻就會增加一倍,性能也將提升一倍,軟件根本不用做任何改變,就可以享受免費的性能提升。然而,由于晶體管電路已經逐漸接近其物理上的性能極限,摩爾定律在2005年左右開始失效了,人類再也不能期待單個CPU的速度每隔18個月就翻一倍,為我們提供越來越快的計算性能。Intel,AMD,IBM等芯片廠商開始從多核這個角度來挖掘CPU的性能潛力,多核時代以及互聯網時代的到來,將使軟件編程方式發生重大變革,基于多核的多線程并發編程以及基于大規模計算機集群的分布式并行編程是將來軟件性能提升的主要途徑。
許多人認為這種編程方式的重大變化將帶來一次軟件的并發危機,因為我們傳統的軟件方式基本上是單指令單數據流的順序執行,這種順序執行十分符合人類的思考習慣,卻與并發并行編程格格不入。基于集群的分布式并行編程能夠讓軟件與數據同時運行在連成一個網絡的許多臺計算機上,這里的每一臺計算機均可以是一臺普通的PC機。這樣的分布式并行環境的***優點是可以很容易的通過增加計算機來擴充新的計算結點,并由此獲得不可思議的海量計算能力,同時又具有相當強的容錯能力,一批計算結點失效也不會影響計算的正常進行以及結果的正確性。Google就是這么做的,他們使用了叫做MapReduce的并行編程模型進行分布式并行編程,運行在叫做GFS(GoogleFileSystem)的分布式文件系統上,為全球億萬用戶提供搜索服務。
Hadoop實現了Google的MapReduce編程模型,提供了簡單易用的編程接口,也提供了它自己的分布式文件系統HDFS,與Google不同的是,Hadoop是開源的,任何人都可以使用這個框架來進行并行編程。如果說分布式并行編程的難度足以讓普通程序員望而生畏的話,開源的Hadoop的出現極大的降低了它的門檻,讀完本文,你會發現基于Hadoop編程非常簡單,無須任何并行開發經驗,你也可以輕松的開發出分布式的并行程序,并讓其令人難以置信地同時運行在數百臺機器上,然后在短時間內完成海量數據的計算。你可能會覺得你不可能會擁有數百臺機器來運行你的并行程序,而事實上,隨著"云計算"的普及,任何人都可以輕松獲得這樣的海量計算能力。例如現在Amazon公司的云計算平臺AmazonEC2已經提供了這種按需計算的租用服務,有興趣的讀者可以去了解一下,這篇系列文章的第三部分將有所介紹。
掌握一點分布式并行編程的知識對將來的程序員是必不可少的,Hadoop是如此的簡便好用,何不嘗試一下呢?也許你已經急不可耐的想試一下基于Hadoop的編程是怎么回事了,但畢竟這種編程模型與傳統的順序程序大不相同,掌握一點基礎知識才能更好地理解基于Hadoop的分布式并行程序是如何編寫和運行的。因此本文會先介紹一下MapReduce的計算模型,Hadoop中的分布式文件系統HDFS,Hadoop是如何實現并行計算的,然后才介紹如何安裝和部署Hadoop框架,以及如何運行Hadoop程序。
【編輯推薦】