Fabric的Map/Reduce
项目描述
因为映射和归约不应该那么难。
什么是reductio?
Reductio是一个专为Python设计的极简主义map-reduce框架。它在Fabric和setuptools之上运行,您可能已经使用它们将代码部署到其他机器上。
它没有数据库。它没有分布式文件系统。它不使用除sshd之外的任何服务器。正因为如此,它几乎没有内存需求!
Reductio是为磁盘绑定的大数据任务设计的,其中许多都是。如果您需要映射-归约的片段完全适合您的工作计算机的RAM,您将为此支付巨额费用。如果它们不适合,一个试图在RAM中缓冲内容的系统将会浪费所有努力。在某个时刻,除非您将它写入该死磁盘,否则您将再也看不到您的数据,而这将花费您大部分时间。
我出于绝对必要性创建了reductio,这样我就可以开始处理我的数据。您可能会注意到,它的文档目前实际上几乎不存在。Reductio所做的是 —————— Reductio扩展了Fabric (http://fabfile.org)。它旨在支持以下大致流程
在所有工作机器上设置适当的Python环境,包括所需的包、存储数据的地方以及您想要运行的最新版本的代码。
告诉每台工作机器如何联系所有其他机器,以便它们在完成数据后可以将数据发送出去(“散射”)。
为每台工作机器提供一些Python函数来运行所有数据。这些通常会是“映射”或“归约”。
收集结果,并使用Unix的非常优化的sort命令将属于一起的东西分组。
示例
reductio/example/fabfile.py 是如何计算普遍存在的“words”文件中所有字母双元组(相邻字母对)并汇总为频率表的示例。
运行任务
如果您定义了一个名为 do_stuff 的函数,该函数位于 mymodule.py 文件中,但首先需要运行 setup 来确保代码和其他内容是最新的,那么您可以使用以下命令同时运行这两个操作:
fab -f mymodule setup do_stuff
为什么不选择 Hadoop 呢?
面对现实吧,如果您知道如何配置 Hadoop 并使您的代码与它一起运行,那么您现在就已经在做这样的事情了。
此外,Hadoop 是为 Java 程序员编写的,Python 在其领域中明显是二等公民。Hadoop 好像认为所有的 Python 代码都是没有依赖项的独立脚本,这或许可以说明 Java 程序员对 Python 的看法。
Reductio 认识到除非您有正确的 Python 设置,否则这一切都不会奏效,因此它基于 Python 程序员已经使用的工具来部署他们的代码。
为什么不选择 Disco 呢?
我赞同 Disco 项目 (http://discoproject.org) 以及其创建一个围绕 Python 设计的 map-reduce 生态系统的目标,但我认为它现在太复杂,也太“神奇”了。
这使得理解其内部的工作原理变得困难,然而当出现问题时或者当您想要做设计师没有预期的事情时,您又必须理解其内部的工作原理。
项目详情
reductio-0.2.1.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 1a6bdc8a6755992e5f0922b09ae21791faa999ef37acd845ff74072ab7c68f9a |
|
MD5 | 8ffc3a36cf79907c0b2882fc943bfb18 |
|
BLAKE2b-256 | 298b9309c14e637469ddf0d147ca51af0ee7a7856993d16b485bb428866d8853 |