Pydoop 架構和模塊包介紹

1. 背景html

 

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

  • 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的訪問。shell

 

2. Pydoop特性編程

 

Pydoop的特性以下:api

  • 支持訪問多數MR組件(RecordReader/Writer/Partitioner);
  • 獲取configuration,設置counter和report status;
  • Like Java編程;
  • 支持CPython,支持Python模塊;
  • 支持Hadoop HDFS API。

綜上所述,概括了Hadoop Streaming-Jython-Pydoop類的特性,以下圖。架構


 

3. Pydoop架構app

 

Pydoop架構以下圖所示,包括整合Pipes和整合C libhdfs兩部分。ide

  • 整合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等模塊包,包的詳細功能以下:oop

  • 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命令模塊包。

參考資料

 

Pydoop: a Python MapReduce and HDFS API for Hadoop

Python MapReduce Programming with Pydoop

Pydoop官網

相關文章
相關標籤/搜索