小集群的工作分配。
mycloud的Python项目详细描述
我的云
利用小机群提高生产率。
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核):
- 对十亿个数字进行排序:~500万
- 预处理130万张图像(调整大小和筛选特征 提取):~1小时
输入格式
mycloud内置了处理以下文件类型的支持:
- 级别数据库
- CSV
- 文本(行)
- 拉链
添加对自己的支持很简单-只需编写一个资源类 描述如何获得读者和作家。(有关 详细信息)。
为什么?!?
有时候你在用python开发一些东西(因为这就是你 做),然后你决定你希望它被并行化。我们的电流 选项是多处理(将我们限制在一台机器上)和hadoop 流(限制我们使用字符串和hadoop的输入格式)。
还有,因为我可以。
学分
mycloud建立在物候有用的基础上 cloud序列化, SSH/Paramiko,和 LevelDB库。