滴水穿石--Pydoop 架構和模塊包介紹


1. 背景
          Hadoop支持Java以及C/C++開發,其中Hadoop Pipes(C++)支持MapReduce,而Hadoop libhdfs(C)支持HDFS的訪問。但Python的解決方案僅能支持Hadoop部分功能,具體如下。

        Hadoop Streaming:1. Awkward編程風格;2.僅能編寫Mapper和Reducer腳本,不能編寫RecordReader/Writer,Partitioner腳本;3. 不能訪問HDFS;4. 僅能處理文本數據流;
        Jython:1.支持不完整的標准庫;2.大多數第三方包僅兼容CPython;3.不能使用C/C++擴展;
        Hadoop-based類:局限性類似於Hadoop Streaming/Jython。
        Non-Hadoop MR類:不成熟。
 
以上Python方案只支持hadoop部分功能,不能完全同時支持MapReduce/HDFS。因此CRS4提出了Pydoop 方案,用Python封裝Hadoop Pipes和libhdfs,實現MapReduce和HDFS的訪問。
 
2. Pydoop特性
Pydoop的特性如下:
        支持訪問多數MR組件(RecordReader/Writer/Partitioner);
        獲取configuration,設置counter和report status;
        Like Java編程;
        支持CPython,支持Python模塊;
        支持Hadoop HDFS API。
綜上所述,歸納了Hadoop Streaming-Jython-Pydoop類的特性,如下圖。

 
3. Pydoop架構
          Pydoop架構如下圖所示,包括整合Pipes和整合C libhdfs兩部分。
        整合Pipes:方法調用流從Hadoop Framework開始,通過C++ Pipes和Python API,最后到達用戶自定義的方法;Boost封裝結果后,返回至Hadoop Framework。
        整合C libhdfs: 與Pipes相反,函數調用由Pydoop觸發,通過C libhdfs,到達Hadoop framework; Boost封裝結果后返回Pydoop端。

 
4. Pydoop模塊包
          Pydoop包括pydoop.hdfs、pydoop.pipes、pydoop.utils、pydoop.hadut等模塊包,包的詳細功能如下:
            Hdfs:hdfs api模塊,包括hdfs.path、hdfs.fs、 hdfs.file子包。主要有訪問HDFS,讀寫文件,獲取文件/目錄/文件系統屬性的信息功能。
            Pipes:mapreduce模塊包,用於編寫Mapreduce程序,編寫mapreduce組件(Mapper, Reducer, RecordReader/Writer, Partitioner,etc.)。
            Utils: utility函數模塊包。
            Hadut:hadoop shell命令模塊包。
參考資料 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM