传统MapReduce框架
(1)?????? 支持迭代MapReduce的Twister和Haloop(參見我的博文:迭代式MapReduce框架介紹).
(2)?????? 支持多階段流式計算的Sector/Sphere(參見我的博文:流式MapReduce實現Sector/Sphere??).
(3)?????? 支持DAG(Directed Acyclic Graph)的Dryad和Cascading(參見文章:Dryad?,?Cascading?以及Cascading的主頁).
(4)??????? MapReduce與Database結合的產物:HadoopDB?和?greenplum.
本文主要講解當下較為出名的傳統MapReduce開源實現。現在有非常多的開源MapReduce框架實現, 最出名的莫過于Java實現版本Hadoop。 實際上,它屬于重量級的實現版本(代碼量大),要理解其細節或者對其進行改進需要很大工作量。 為了克服重量級實現存在的缺陷,一些輕量級的版本出現了,如erlang實現版本Disco,Python實現版本micemeat,bash版本bashreduce等。
本文主要介紹Disco,粗略講解micemeat和bashreduce。
傳統MapReduce實現之Disco
1、概述
Disco是一個輕量級的MapReduce框架實現,核心模塊使用Erlang語言實現,外部接口為易于編程的Python。同Hadoop一樣,擁也有自己的分布式文件系統DDFS,不過DDFS是與計算框架高度耦合的。 Disco由諾基亞研究中心開發,用于處理實際應用中的大規模數據。
2、Disco的總體設計架構
Disco由分布式存儲系統DDFS(Disco Distributed File System)和MapReduce框架組成,本節主要介紹Disco的總體設計架構,下面一節介紹DDFS。
Disco也是master/slave架構:
Disco master從client端接收作業,并將它們添加到作業隊列中,以便進行調度。
Client processes是一些python程序,它們使用函數disco.job()向master提交作業。
Worker supervision是由master啟動的,每個節點啟動一個,用于監控該節點上python worker的運行情況。
Python worker用于執行用戶提交的作業。
輸入文件是通過http獲取的,但若要讀取的文件在本地,直接從磁盤上獲取即可。為了能夠從個遠程節點上獲取數據,每個節點上進行一個httpd后臺進程。
3、DDFS的架構
DDFS是嵌入到Disco中的,目前只有一個master節點(存在單點故障)。每個存儲節點由一組磁盤或者卷宗組成(vol0..volN),它們分別掛載在$DDFS_ROOT/vol0 … $DDFS_ROOT/volN。每個卷宗下面有兩個文件,分別為tag 和 blob,分別用于存儲標記(tag,相當于key)和標記對應的值(value)。DDFS會監控每個節點上的磁盤使用情況,并每隔一段時間進行負載均衡。
4、分布式索引Discodex
Discodex是專門為Disco設計的分布式索引系統。
Discodex實際上是一個分布式key/value存儲系統。通過某一個key,可以檢索出與該key相關的所有value。Discodex對外提供了一些ReST API,用戶通過這些API檢索數據。
當我們使用Discodex時,實際上是運行了一個HTTP 服務器,它把ReSTful url映射成Disco作業。??????? Discodex在DDFS上存儲key和value值,其中每個文件都是分布式的,稱為index,chunks或者ichunks。
5、參考資料
(1)官方網址:http://discoproject.org/
(2)安裝方法:http://blog.csdn.net/socrates/archive/2009/05/26/4217641.aspx
傳統MapReduce實現之micemeat
1、介紹
micemeat是MapReduce的python實現,整個代碼由一個python文件構成(<13KB),它僅依賴于python標準庫,非常容易部署,同時它還支持以下功能:
(1)?????? 容錯:任何一個slave可以隨時加入或者離開集群而不會影響其他slave。
(2)?????? 安全:micemeat會對每一條連接進行授權驗證,防止未經授權的代碼被執行。
2、參考資料:
官方網址:http://remembersaurus.com/mincemeatpy/
傳統MapReduce實現之bashreduce
1、? 介紹
Bashreduce采用bash腳本語言編寫,整合了常用的shell命令,如sort, awk, ssh, netcat等。目前僅在ubuntu/debian系統上進行了測試。
2、? 參考資料
(1)???????https://github.com/erikfrey/bashreduce
另外,還有Perl實現RobotArmy和ruby實現skyner
參考資料:
(1)??? RobotArmy官方主頁:http://bulletsweetp.github.com/robotarmy/
(2)??? RobotArmy論文:RobotArmy: A Casual Framework for Massive Distributed Processing
(3)??? Skynet官方主頁:http://skynet.rubyforge.org/
?
原創文章,轉載請注明:?轉載自董的博客
本文鏈接地址:?http://dongxicheng.org/mapreduce/traditional-mapreduce-framework/
總結
以上是生活随笔為你收集整理的传统MapReduce框架的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎样从10亿查询词找出出现频率最高的10
- 下一篇: Hadoop的调度器总结