用Hadoop 進行分布式并行編程(一)
基本概念與安裝部署
級別:初級
曹羽中 ( caoyuz@cn.ibm.com ), 軟件工程師, IBM中國開發中心 2008 年 5 月 22 日
Hadoop 是一個實現了MapReduce 計算模型的開源分布式并行編程框架,借助于 Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運行于計算機集群上,完成海量數據的計算。本文將介紹 MapReduce 計算模型,分布式并行計算等基本概念,以及 Hadoop 的安裝部署和基本運行方法。
Hadoop 簡介
Hadoop 是一個開源的可運行于大規模集群上的分布式并行編程框架,由于分布式存儲對于分布式編程來說是必不可少的,這個框架中還包含了一個分布式文件系統 HDFS( Hadoop Distributed File System )。也許到目前為止,Hadoop 還不是那么廣為人知,其最新的版本號也僅僅是 0.16,距離 1.0 似乎都還有很長的一段距離,但提及 Hadoop 一脈相承的另外兩個開源項目 Nutch 和 Lucene ( 三者的創始人都是 Doug Cutting ),那絕對是大名鼎鼎。Lucene 是一個用 Java 開發的開源高性能全文檢索工具包,它不是一個完整的應用程序,而是一套簡單易用的 API 。在全世界范圍內,已有無數的軟件系統,Web 網站基于 Lucene 實現了全文檢索功能,后來 Doug Cutting 又開創了第一個開源的 Web 搜索引擎(http://www.nutch.org) Nutch, 它在 Lucene 的基礎上增加了網絡爬蟲和一些和 Web 相關的功能,一些解析各類文檔格式的插件等,此外,Nutch 中還包含了一個分布式文件系統用于存儲數據。從 Nutch 0.8.0 版本之后,Doug Cutting 把 Nutch 中的分布式文件系統以及實現 MapReduce 算法的代碼獨立出來形成了一個新的開源項 Hadoop。Nutch 也演化為基于 Lucene 全文檢索以及 Hadoop 分布式計算平臺的一個開源搜索引擎。
基于 Hadoop,你可以輕松地編寫可處理海量數據的分布式并行程序,并將其運行于由成百上千個結點組成的大規模計算機集群上。從目前的情況來 看,Hadoop 注定會有一個輝煌的未來:"云計算"是目前灸手可熱的技術名詞,全球各大 IT 公司都在投資和推廣這種新一代的計算模式,而 Hadoop 又被其中幾家主要的公司用作其"云計算"環境中的重要基礎軟件,如:雅虎正在借助 Hadoop 開源平臺的力量對抗 Google, 除了資助 Hadoop 開發團隊外,還在開發基于 Hadoop 的開源項目 Pig, 這是一個專注于海量數據集分析的分布式計算程序。Amazon 公司基于 Hadoop 推出了 Amazon S3 ( Amazon Simple Storage Service ),提供可靠,快速,可擴展的網絡存儲服務,以及一個商用的云計算平臺 Amazon EC2 ( Amazon Elastic Compute Cloud )。在 IBM 公司的云計算項目--"藍云計劃"中,Hadoop 也是其中重要的基礎軟件。Google 正在跟IBM合作,共同推廣基于 Hadoop 的云計算。
迎接編程方式的變革
在摩爾定律的作用 下,以前程序 員根本不用考慮計算機的性能會跟不上軟件的發展,因為約每隔 18 個月,CPU 的主頻就會增加一倍,性能也將提升一倍,軟件根本不用做任何改變,就可以享受免費的性能提升。然而,由于晶體管電路已經逐漸接近其物理上的性能極限,摩爾 定律在 2005 年左右開始失效了,人類再也不能期待單個 CPU 的速度每隔 18 個月就翻一倍,為我們提供越來越快的計算性能。Intel, AMD, IBM 等芯片廠商開始從多核這個角度來挖掘 CPU 的性能潛力,多核時代以及互聯網時代的到來,將使軟件編程方式發生重大變革,基于多核的多線程并發編程以及基于大規模計算機集群的分布式并行編程是將來軟 件性能提升的主要途徑。
許多人認為這種編程方式的重大 變化將帶來一次軟件的并發危機,因為我們傳統的軟件方式基本上是單指令單數據流的順序執行,這種順序執行十分符合人類的思考習慣,卻與并發并行編程格格不 入。基于集群的分布式并行編程能夠讓軟件與數據同時運行在連成一個網絡的許多臺計算機上,這里的每一臺計算機均可以是一臺普通的 PC 機。這樣的分布式并行環境的最大優點是可以很容易的通過增加計算機來擴充新的計算結點,并由此獲得不可思議的海量計算能力, 同時又具有相當強的容錯能力,一批計算結點失效也不會影響計算的正常進行以及結果的正確性。Google 就是這么做的,他們使用了叫做 MapReduce 的并行編程模型進行分布式并行編程,運行在叫做 GFS ( Google File System )的分布式文件系統上,為全球億萬用戶提供搜索服務。
Hadoop 實現了 Google 的 MapReduce 編程模型,提供了簡單易用的編程接口,也提供了它自己的分布式文件系統 HDFS,與 Google 不同的是,Hadoop 是開源的,任何人都可以使用這個框架來進行并行編程。如果說分布式并行編程的難度足以讓普通程序員望而生畏的話,開源的 Hadoop 的出現極大的降低了它的門檻,讀完本文,你會發現基于 Hadoop 編程非常簡單,無須任何并行開發經驗,你也可以輕松的開發出分布式的并行程序,并讓其令人難以置信地同時運行在數百臺機器上,然后在短時間內完成海量數據
的計算。你可能會覺得你不可能會擁有數百臺機器來運行你的并行程序,而事實上,隨著"云計算"的普及,任何人都可以輕松獲得這樣的海量計算能力。例如現在 Amazon 公司的云計算平臺 Amazon EC2 已經提供了這種按需計算的租用服務,有興趣的讀者可以去了解一下,這篇系列文章的第三部分將有所介紹。</p>
掌握一點分布式并行編程的知識對將來 的程序員是必不可少的,Hadoop 是如此的簡便好用,何不嘗試一下呢?也許你已經急不可耐的想試一下基于 Hadoop 的編程是怎么回事了,但畢竟這種編程模型與傳統的順序程序大不相同,掌握一點基礎知識才能更好地理解基于 Hadoop 的分布式并行程序是如何編寫和運行的。因此本文會先介紹一下 MapReduce 的計算模型,Hadoop 中的分布式文件系統 HDFS, Hadoop 是如何實現并行計算的,然后才介紹如何安裝和部署 Hadoop 框架,以及如何運行 Hadoop 程序。
MapReduce 計算模型
MapReduce 是 Google 公司的核心計算模型,它將復雜的運行于大規模集群上的并行計算過程高度的抽象到了兩個函數,Map 和 Reduce, 這是一個令人驚訝的簡單卻又威力巨大的模型。適合用 MapReduce 來處理的數據集(或任務)有一個基本要求: 待處理的數據集可以分解成許多小的數據集,而且每一個小數據集都可以完全并行地進行處理。
圖 1. MapReduce 計算流程
圖 一說明了用 MapReduce 來處理大數據集的過程, 這個 MapReduce 的計算過程簡而言之,就是將大數據集分解為成百上千的小數據集,每個(或若干個)數據集分別由集群中的一個結點(一般就是一臺普通的計算機)進行處理并生 成中間結果,然后這些中間結果又由大量的結點進行合并, 形成最終結果。
計算模型的核心是 Map 和 Reduce 兩個函數,這兩個函數由用戶負責實現,功能是按一定的映射規則將輸入的 <key, value> 對轉換成另一個或一批 <key, value> 對輸出。
表一 Map 和 Reduce 函數
函數 | 輸入 | 輸出 | 說明 | </tr>|||||||||||||||
Map |
《k1,v1》 | List(《k2,v2》) | 1. 將小數據集進一步解析成一批 《key,value》 對,輸入 Map 函數中進行處理。
本文由用戶 Hadoopp 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!
推薦閱讀用Hadoop 進行分布式并行編程(一)
基本概念與安裝部署 級別:初級 曹羽中 ( caoyuz@cn.ibm.com ), 軟件工程師, IBM中國開發中心 2008 年 5 月 22 日 Hadoop 是一個實現了MapReduc...
用Hadoop進行分布式并行編程(二)
程序實例與分析 Hadoop 是一個實現了MapReduce 計算模型的開源分布式并行編程框架,借助于Hadoop, 程序員可以輕松地編寫分布式并行程序,將其運行于計算機集群上,完成海量數據的計...
用Linux和Apache Hadoop進行云計算
本文內容包括: 云計算簡介 Amazon EC2 Apache Hadoop 設置 Apache Hadoop 創建 MapReduce 應用程序 參考資料 IBM?、Google、VMWare...
Hadoop編程入門
原文地址: http://blog.csdn.net/calvinxiu/archive/2007/02/09/1506112.aspx Hadoop 是Google MapReduce 的 一...
|