小型集群的工作分布。
项目描述
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/Paramiko 和 LevelDB 库之上。
项目详情
关闭
mycloud-0.51.tar.gz 的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 397326a15bef6b4f80d689939c44018eb0444807ee9b95cf46b48a01100d5f25 |
|
MD5 | 16cdbe7c0c8c03c32e4a6f1ad0a93870 |
|
BLAKE2b-256 | 9b74101e9410700f5c252e0c21ec28ae9fa65fabdf2dd8722f1cf0acc508a0a5 |