Hadoop導航:版本、生態(tài)圈及MapReduce模型
來源:程序員人生 發(fā)布時間:2014-09-26 13:38:46 閱讀次數(shù):3238次
【編者按】經(jīng)過數(shù)年的發(fā)展,Hadoop已成為通用的海量數(shù)據(jù)處理平臺。然而打開Hadoop版本發(fā)布頁,不同方法計算的版本號讓人眼花繚亂。那么對于初學者或者已經(jīng)使用了Hadoop的機構(gòu)究竟該如何進行選擇?MapReduce的工作模型究竟是什么樣的?這里我們一起看@萬境絕塵近日發(fā)表的博客。
CSDN推薦:歡迎免費訂閱《Hadoop與大數(shù)據(jù)周刊》獲取更多Hadoop技術(shù)文獻、大數(shù)據(jù)技術(shù)分析、企業(yè)實戰(zhàn)經(jīng)驗,生態(tài)圈發(fā)展趨勢。
以下為原文:
Hadoop版本和生態(tài)圈
1. Hadoop版本
(1) Apache Hadoop版本介紹
Apache的開源項目開發(fā)流程:
- 主干分支:新功能都是在主干分支(trunk)上開發(fā)。
- 特性獨有分支:很多新特性穩(wěn)定性很差,或者不完善,在這些分支的獨有特定很完善之后,該分支就會并入主干分支。
- 候選分支:定期從主干分支剝離,一般候選分支發(fā)布,該分支就會停止更新新功能,如果候選分支有BUG修復,就會重新針對該候選分支發(fā)布一個新版本,候選分支就是發(fā)布的穩(wěn)定版本。
造成Hadoop版本混亂的原因:
- 主要功能在分支版本開發(fā):0.20分支發(fā)布之后,主要功能一直在該分支上進行開發(fā),主干分支并沒有合并這個分支,0.20分支成為了主流。
- 低版本的后發(fā)布:0.22版本發(fā)布要晚于0.23版本。
- 版本重命名:0.20分支的0.20.205版本重命名為1.0版本,這兩個版本是一樣的,只是名字改變了。
Apache Hadoop版本示意圖:
(2) Apache Hadoop版本功能介紹
第一代Hadoop特性:
- append:支持文件追加功能,讓用戶使用HBase的時候避免數(shù)據(jù)丟失,也是使用HBase的前提。
- raid:保證數(shù)據(jù)可靠,引入校驗碼校驗數(shù)據(jù)塊數(shù)目。
- symlink:支持HDFS文件鏈接。
- security:hadoop安全機制。
- namenode HA:為了避免namenode單點故障情況,HA集群有兩臺namenode。
第二代Hadoop特性:
- HDFS Federation:NameNode制約HDFS擴展,該功能讓多個NameNode分管不同目錄,實現(xiàn)訪問隔離和橫向擴展。
- yarn:MapReduce擴展性和多框架方面支持不足,yarn是全新的資源管理框架,將JobTracker資源管理和作業(yè)控制功能分開,ResourceManager負責資源管理,ApplicationMaster負責作業(yè)控制。
0.20版本分支:只有這個分支是穩(wěn)定版本,其它分支都是不穩(wěn)定版本。
- 0.20.2版本(穩(wěn)定版):包含所有特性,經(jīng)典版。
- 0.20.203版本(穩(wěn)定版):包含append,不包含symlink raid namenodeHA功能。
- 0.20.205版本/1.0版本(穩(wěn)定版):包含append security,不包含symlink raid namenodeHA功能。
- 1.0.1~1.0.4版本(穩(wěn)定版):修復1.0.0的bug和進行一些性能上的改進。
0.21版本分支(不穩(wěn)定版):包含append raid symlink namenodeHA,不包含security。
0.22版本分支(不穩(wěn)定版):包含 append raid symlink那么弄得HA,不包含mapreduce security。
0.23版本分支:
- 0.23.0版本(不穩(wěn)定版):第二代的hadoop,增加了HDFS Federation和yarn。
- 0.23.1~0.23.5(不穩(wěn)定版):修復0.23.0的一些BUG,以及進行一些優(yōu)化。
- 2.0.0-alpha~2.0.2-alpha(不穩(wěn)定版):增加了namenodeHA 和 Wire-compatiblity功能。
(3) Cloudera Hadoop對應(yīng)Apache Hadoop版本
2. Hadoop生態(tài)圈
Apache支持:Hadoop的核心項目都受Apache支持的,除了Hadoop之外,還有下面幾個項目,也是Hadoop不可或缺的一部分。
- HDFS:分布式文件系統(tǒng),用于可靠的存儲海量數(shù)據(jù)。
- MapReduce:分布式處理數(shù)據(jù)模型,可以運行于大型的商業(yè)云計算集群中。
- Pig:數(shù)據(jù)流語言和運行環(huán)境,用來檢索海量數(shù)據(jù)集。
- HBase:分布式數(shù)據(jù)庫,按列存儲,HBase使用HDFS作為底層存儲,同時支持MapReduce模型的海量計算和隨機讀取。
- Zookeeper:提供Hadoop集群的分布式的協(xié)調(diào)服務(wù),用于構(gòu)建分布式應(yīng)用,避免應(yīng)用執(zhí)行失敗帶來的不確定性損失。
- Sqoop:該工具可以用于HBase 和 HDFS之間的數(shù)據(jù)傳輸,提高數(shù)據(jù)傳輸效率。
- Common:分布式文件系統(tǒng),通用IO組件與接口,包括序列化、Java RPC和持久化數(shù)據(jù)結(jié)構(gòu)。
- Avro:支持高效跨語言的RPC及永久存儲數(shù)據(jù)的序列化系統(tǒng)。
MapReduce模型簡介
MapReduce簡介:MapReduce是一種數(shù)據(jù)處理編程模型。
- 多語言支持:MapReduce可以使用各種語言編寫,例如Java、Ruby、Python、C++。
- 并行本質(zhì) :MapReduce 本質(zhì)上可以并行運行的。
1. MapReduce數(shù)據(jù)模型解析
MapReduce數(shù)據(jù)模型:
- 兩個階段:MapReduce的任務(wù)可以分為兩個階段,Map階段和Reduce階段。
- 輸入輸出:每個階段都使用鍵值對作為輸入和輸出,IO類型可以由程序員進行選擇。
- 兩個函數(shù):map函數(shù)和reduce函數(shù)。
MapReduce作業(yè)組成:一個MapReduce工作單元,包括輸入數(shù)據(jù),MapReduce程序和配置信息。
作業(yè)控制:作業(yè)控制由JobTracker(一個)和TaskTracker(多個)進行控制的。
- JobTracker作用:JobTracker控制TaskTracke上任務(wù)的運行,進行統(tǒng)一調(diào)度。
- TaskTracker作用:執(zhí)行具體的MapReduce程序。
- 統(tǒng)一調(diào)度方式:TaskTracker運行的同時將運行進度發(fā)送給JobTracker,JobTracker記錄所有的TaskTracker。
- 任務(wù)失敗處理:如果一個TaskTracker任務(wù)失敗,JobTracker會調(diào)度其它TaskTracker上重新執(zhí)行該MapReduce作業(yè)。
2. Map數(shù)據(jù)流
輸入分片:MapReduce程序執(zhí)行的時候,輸入的數(shù)據(jù)會被分成等長的數(shù)據(jù)塊,這些數(shù)據(jù)塊就是分片。
- 分片對應(yīng)任務(wù):每個分片都對應(yīng)著一個Map任務(wù),即MapReduce中的map函數(shù)。
- 并行處理:每個分片執(zhí)行Map任務(wù)要比一次性處理所有數(shù)據(jù)時間要短。
- 負載均衡:集群中的計算機有的性能好有的性能差,按照性能合理的分配分片大小,比平均分配效率要高,充分發(fā)揮出集群的效率。
- 合理分片:分片越小負載均衡效率越高,但是管理分片和管理map任務(wù)總時間會增加,需要確定一個合理的分片大小,一般默認為64M,與塊大小相同。
數(shù)據(jù)本地優(yōu)化:map任務(wù)運行在本地存儲數(shù)據(jù)的節(jié)點上,才能獲得最好的效率。
- 分片=數(shù)據(jù)塊:一個分片只在單個節(jié)點上存儲,效率最佳。
- 分片>數(shù)據(jù)塊:分片大于數(shù)據(jù)塊,那么一個分片的數(shù)據(jù)就存儲在了多個節(jié)點上,map任務(wù)所需的數(shù)據(jù)需要從多個節(jié)點傳輸,會降低效率。
Map任務(wù)輸出:Map任務(wù)執(zhí)行結(jié)束后,將計算結(jié)果寫入到本地硬盤,不是寫入到HDFS中。
- 中間過渡:Map的結(jié)果只是用于中間過渡,這個中間結(jié)果要傳給Reduce任務(wù)執(zhí)行,reduce任務(wù)的結(jié)果才是最終結(jié)果,map中間值最后會被刪除。
- map任務(wù)失敗:如果map任務(wù)失敗,會在另一個節(jié)點重新運行這個map任務(wù),再次計算出中間結(jié)果。
3. Reduce數(shù)據(jù)流
Reduce任務(wù):map任務(wù)的數(shù)量要遠遠多于Reduce任務(wù)。
- 無本地化優(yōu)勢:Reduce的任務(wù)的輸入是Map任務(wù)的輸出,reduce任務(wù)的絕大多數(shù)數(shù)據(jù)本地是沒有的。
- 數(shù)據(jù)合并:map任務(wù)輸出的結(jié)果,會通過網(wǎng)絡(luò)傳到reduce任務(wù)節(jié)點上,先進行數(shù)據(jù)的合并,然后在輸入到reduce任務(wù)中進行處理。
- 結(jié)果輸出:reduce的輸出直接輸出到HDFS中。
- reduce數(shù)量:reduce數(shù)量是特別指定的,在配置文件中指定。
MapReduce數(shù)據(jù)流框圖解析:
- 單個MapReduce的數(shù)據(jù)流:
- 沒有Reduce程序的MapReduce數(shù)據(jù)流:
Map輸出分區(qū):多個reduce任務(wù),每個reduce任務(wù)都對應(yīng)著一些map任務(wù),我們將這些map任務(wù)根據(jù)其輸入reduce任務(wù)進行分區(qū),為每個reduce建立一個分區(qū)。
- 分區(qū)標識:map結(jié)果有許多種類鍵,相同的鍵對應(yīng)的數(shù)據(jù)傳給一個reduce,一個map可能會給多個reduce輸出數(shù)據(jù)。
- 分區(qū)函數(shù):分區(qū)函數(shù)可以由用戶定義,一般情況下使用系統(tǒng)默認的分區(qū)函數(shù)partitioner,該函數(shù)通過哈希函數(shù)進行分區(qū)。
混洗:map任務(wù)和reduce任務(wù)之間的數(shù)據(jù)流成為混。
- reduce數(shù)據(jù)來源:每個reduce任務(wù)的輸入數(shù)據(jù)來自多個map
- map數(shù)據(jù)去向:每個map任務(wù)的結(jié)果都輸出到多個reduce中
沒有Reduce:當數(shù)據(jù)可以完全并行處理的時候,就可以不適用reduce,只進行map任務(wù)。
4. Combiner 引入
MapReduce瓶頸:帶寬限制了MapReduce執(zhí)行任務(wù)的數(shù)量,Map和Reduce執(zhí)行過程中需要進行大量的數(shù)據(jù)傳輸。
解決方案:合并函數(shù)Combiner,將多個Map任務(wù)輸出的結(jié)果合并,將合并后的結(jié)果發(fā)送給Reduce作業(yè)。
5. HadoopStreaming
Hadoop多語言支持:Java、Python、Ruby、C++
- 多語言:Hadoop允許使用其它語言寫MapReduce函數(shù)。
- 標準流:因為Hadoop可以使用UNIX標準流作為Hadoop和應(yīng)用程序之間的接口,因此只要使用標準流,就可以進行MapReduce編程。
Streaming處理文本:Streaming在文本處理模式下,有一個數(shù)據(jù)行視圖,非常適合處理文本。
- Map函數(shù)的輸入輸出:標準流一行一行的將數(shù)據(jù)輸入到Map函數(shù),Map函數(shù)的計算結(jié)果寫到標準輸出流中。
- Map輸出格式:輸出的鍵值對是以制表符分隔的行,以這種形式寫出的標準輸出流中。
- Reduce函數(shù)的輸入輸出:輸入數(shù)據(jù)是標準輸入流中的通過制表符分隔的鍵值對行,該輸入經(jīng)過了Hadoop框架排序,計算結(jié)果輸出到標準輸出流中。
6. Hadoop Pipes
Pipes概念:Pipes是MapReduce的C++接口
- 理解誤區(qū):Pipes不是使用標準輸入輸出流作為Map和Reduce之間的Streaming,也沒有使用JNI編程。
- 工作原理:Pipes使用套接字作為map和reduce函數(shù)進程之間的通信。
原文鏈接:
Hadoop 版本 生態(tài)圈 MapReduce模型(責編/仲浩)
以“云計算大數(shù)據(jù) 推動智慧中國 ”為主題的
第六屆中國云計算大會 將于5月20-23日在北京國家會議中心隆重舉辦。產(chǎn)業(yè)觀察、技術(shù)培訓、主題論壇、行業(yè)研討,內(nèi)容豐富,干貨十足。票價優(yōu)惠,馬上
報名 !
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈