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

参考资料

 

Pydoop: a Python MapReduce and HDFS API for Hadoop

Python MapReduce Programming with Pydoop

Pydoop官网

转载于:https://my.oschina.net/taisha/blog/78461

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中连接Hadoop通常涉及到使用Hadoop的分布式文件系统HDFS(Hadoop Distributed File System)和MapReduce计算框架。Python提供了一些库来简化这个过程,其中最常用的是`hadoop`(早期版本)或`pydoop`、`pyspark`等。以下是使用这些库的基本步骤: 1. 安装必要的库: - `hadoop`(已不再维护,建议使用`pydoop`) - `pydoop`(支持Hadoop 2+,适合简单任务) - `pyspark`(更强大,支持Spark on Hadoop) 安装命令示例: ``` pip install pydoop pip install pyspark ``` 2. 配置环境变量: - `JAVA_HOME`(确保Java已安装并配置) - `HADOOP_HOME`(指向Hadoop的安装目录) 3. 连接HDFS: - 使用`pydoop.hdfs`模块,例如: ```python from pydoop.hdfs import hdfs fs = hdfs.Connection(host='namenode_host', port=9000) ``` 4. 读写HDFS文件: ```python with fs.open('path/to/hdfs/file.txt', 'r') as f: content = f.read() ``` 或 ```python with fs.open('path/to/hdfs/output.txt', 'w') as f: f.write('Hello, Hadoop!') ``` 5. 对于MapReduce任务,使用`pydoop.pipes`或`pyspark`进行编程: - `pydoop.pipes`提供了简单的命令行接口来运行Python脚本作为MapReduce任务。 - `pyspark`则需要创建`SparkContext`,并编写Spark程序。 ```python from pydoop.pipes import run_task run_task('map.py', 'reduce.py', 'input.txt', 'output.txt') # 或者使用pyspark from pyspark import SparkContext sc = SparkContext.getOrCreate() data = sc.textFile('hdfs://path/to/input') result = data.map(lambda line: ...).reduce(...) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值