亞馬遜Web服務的彈性MapReduce是一項基于Hadoop的實施,它可允許你運行大型的預處理工作,如格式轉換和數據聚合等。雖然我們可以選擇很多的編程語言來對這些任務進行編碼,但是時間緊張的開發人員更需要一個能夠最大限度減少編碼開銷的編程框架。Mrjob、 Dumbo 以及 PyDoop 是三個基于Python可滿足以上需求的彈性MapReduce框架。
那么,為什么諸如Java或Apache Pig之類的流行編程語言無法勝任這項任務呢?亞馬遜的彈性MapReduce(EMR)任務一般都是采用Java語言編寫的,但即便是簡單的應用程序也可能需要比用Python開發的腳本程序更多的代碼行。
Pig 是一種專為載入和轉換數據的應用而設計的高級數據處理語言,但是這并不是一種通用的編程語言。如果開發人員一方面比較喜歡使用比Java更高級的編程語言,一方面又需要使用比Pig數據管理更多的功能,那么他們應當嘗試使用下Python。
目前,有三種基于Python的EMR框架可供選擇: Mrjob、Dumbo 以及 PyDoop。 mrjob開源開發包 Mrjob是一種可在亞馬遜EMR上或在你的本地機器上運行任務的開源包。 彈性MapReduce任務是在單個Python類中定義的,而其中包含了與mappers、reducers以及combiners相關的方法。Hadoop的大部分較低層次詳細信息都隱藏在mrjob抽象操作下,這是有好處的。
這個簡化的模式可允許開發人員把主要精力關注在map-reduce功能的邏輯設計上。 但是,這卻意味著你將受制于Hadoop API的一個子集。如果你需要訪問更多的Hadoop API,那么Dumbo 或 PyDoop可能是一個更好的選擇。 使用mrjob的一個重要優點就是,它不需要安裝Hadoop。開發人員可以在一臺單一設備上使用Python、mrjob以及其他來編寫、測試和調試彈性MapReduce程序。一旦程序準備就緒,你就可以將其移植至EMR,而相同的代碼可在Hadoop集群上正常運行且無需任何修改。承載5700萬評論、每月1.3億以上游客瀏覽的社交網絡仍然使用著mrjob,因此它可滿足眾多Hadoop用戶的需求。
使用Dumo進行作業處理 Dumbo是另一個支持EMR的Python框架。 與mrjob類似,你可以編寫mapper類和reducer類來實施彈性MapReduce任務。除了在mrjob中的基本功能以外,Dumbo還提供了更多的任務處理選項。它的一個任務類可允許開發人員定義多組由單一命令運行的map-reduce操作。當對一個數據集執行多個操作時,這是非常有用的。Dumbo支持文本和序列文件格式,而通過使用用戶指定的Java類,它還支持用戶的自定義格式。
在缺點方面,Dumbo的相關文檔較少,尤其是與mrjob的技術文檔相比。 Dumbo遵循著MapReduce的范式,因此在這個框架下進行核心組件開發與在mrjob和PyDoop中進行開發是類似的。
它還允許你執行partitioners,除了是在本地運行外,它與reducers類似。 它們能夠減少map與reduce操作之間數據的傳輸量。通過使用Dumbo,開發人員還可以在啟動任務時以命令行的方式控制Hadoop參數。 Hadoop默認使用純文本的文件格式,但是用戶可以通過指定一個自定義的RecordReader類來處理其他的格式。這個類包括了初始化、下一步、關閉以及getProgress等方法。 它還支持Hadoop文件系統API,它連接了一個HDFS安裝和讀寫文件。
此外,API會檢索文件、目錄以及文件系統中的元數據。 當你需要以較低層次方式訪問文件系統時,Dumbo API可以助你一臂之力,因為它有與HDFS API相同的功能集。 使用PyDoop進行研究包訪問 需要訪問第三方庫和軟件包的Python開發人員可能需要考慮使用PyDoop。CRS4跨學科研究中心開發了這個框架并對其進行了維護。 這樣做的一個好處就是,你可以對訪問流行Python研究包(例如SciPy)進行計數。
盡管mrjob、Dumbo以及PyDoop框架都具有不少的好處,但是它們都會增加運行開銷,因此與用Java語言進行開發或者通過Hadoop流相比,你的任務的運行時間有可能會變得更長。如果確保EMR的低成本是一個關鍵的考慮因素,那么比較分別用Python流和其他框架開發的MapReduce任務就可以得知運行任務所需的額外時間了。
當你開發一些EMR任務時,Hadoop的Python框架是有用的。這三個開發框架都可以在彈性MapReduce上正常運行,并能夠幫助用戶避免不必要的和繁瑣的Java開發工作。 當你需要更多地訪問Hadoop內部時,可考慮Dumbo或PyDoop。