跳转到主要内容

小型集群的工作分布。

项目描述

MyCloud

利用小型机器集群提高您的生产力。

MyCloud无需预先设置;如果您能通过SSH访问您的机器,那么它将直接运行。MyCloud目前导出简单的mapreduce API和几个常见的输入格式;添加对您自己的支持也很简单。

用法

启动您的集群

import mycloud

cluster = mycloud.Cluster(['machine1', 'machine2'])

# or use defaults from ~/.config/mycloud
# cluster = mycloud.Cluster()

映射列表

result = cluster.map(compute_factors, range(1000))

ClientFS使访问本地文件无缝!

def my_worker(filename):
  do_work(mycloud.fs.FS.open(filename, 'r'))

cluster.map(['client:///my/local/file'], my_worker)

使用MapReduce接口轻松处理大型数据集的处理

from mycloud.mapreduce import MapReduce, group
from mycloud.resource import CSV
input_desc = [CSV('client:///path/to/my_input_%d.csv') % i for i in range(100)]
output_desc = [CSV('client:///path/to/my_output_file.csv')]

def map_identity(kv_iter, output):
  for k, v in kv_iter:
    output(k, int(v[0]))

def reduce_sum(kv_iter, output):
  for k, values in group(kv_iter):
    output(k, sum(values))

mr = MapReduce(cluster, map_identity, reduce_sum, input_desc, output_desc)

result = mr.run()

for k, v in result[0].reader():
  print k, v

性能

请注意,它完全是用Python编写的。

我使用它的一些简单操作(6台机器,96个核心)

  • 排序十亿个数字:~5m

  • 预处理130万张图像(调整大小和SIFT特征提取):~1小时

输入格式

MyCloud内置支持以下文件类型

  • LevelDB

  • CSV

  • 文本(行)

  • Zip

添加对您自己的支持很简单 - 只需编写一个资源类,描述如何获取读取器和写入器。(见resource.py获取详细信息)。

为什么?!?

有时您正在用Python开发某些东西(因为您就是这样做),您决定希望它能够并行化。我们当前的选择是multiprocessing(限制我们只在一台机器上运行)和Hadoop streaming(限制我们只处理字符串和Hadoop的输入格式)。

也因为我想这么做。

致谢

MyCloud 建立在极为有用的 cloud 序列化、SSH/ParamikoLevelDB 库之上。

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

mycloud-0.51.tar.gz (12.0 kB 查看散列)

上传时间

支持