分布式计算-disco

来源:互联网 发布:最有名的网络小说家 编辑:程序博客网 时间:2024/06/05 05:04

当前, 在大数据领域, Java并不是唯一可选语言,虽然Hadoop分布式管理平台需要使用Java,但是这种局面有可能被DARPA改变。IT经理网在“大数据成为美国军队的’新型武器’”一文中,报道过美国国防部下属的“国防高级研究项目署”(DARPA)通过XDATA项目进行大数据投资的情况。 最近, DARPA通过XDATA项目的基金投资ContinuumAnalytics,帮助其开发Python在大数据领域的数据处理和可视化能力。 XDATA这个计划的目的, 就是研究在对非完美及非完整数据集,进行海量数据处理和数据可视化的算法。 XDATA项目基金总共有1亿美元, 这次DARPA对Continuum Analytics的投资共计3百万美元。

Python是一个非常流行的编程语言, 无论在网络程序员中(比如Google的相当多的产品就是用Python编写的,Python也是豆瓣的主要开发语言), 还是在科学计算领域, Python都有很广泛的应用。而Continuum Analytics的目的, 就是要进行下一代数据分析工具的开发, 使得Python在数据分析领域的应用, 如同在科学, 工程和规模化计算方面那样强大。

ContinuumAnalytics的旗舰产品Anaconda是一个基于Disco平台的数据管理,分析和可视化的工具。而 Disco是一个最初由诺基亚开发的,基于Python的分布式数据管理平台,可以作为以Java为基础的Hadoop平台的替代。

Anaconda支持流行的Python科学计算库如NumPy, SciPy和Pandas等。此外, Continuum Analytics还推出了一个名为Wakari的产品,这是一个基于浏览器的数据分析环境。 Continuum Analytics把它描述成为“科学, 工程和商业数据分析中的WordPress, Github和Youtube。”

而DARPA好像对Continuum Analytics参与的几个开源项目表现出了特别的兴趣。 这些项目包括 Blaze (使用Python代码在分布式系统上进行数据分析的技术), Bokeh(一个为大数据和多维度数据设计的基于HTML5的数据可视化库),以及Numba(Python编译器, 可以将Python代码编译成机器码从而加快计算速度)。

从DARPA的角度, XDATA项目的目的是研究基于海量数据的高性能计算和可视化。 因此, 像ContinuumAnalytics这样具备这样核心技术的公司, 就理所应当的成为投资目标。 而鉴于Python在开源社区,科学和工程领域的广泛应用。通过投资Continuum Analytics, 也可以极大地扩大大数据分析的使用人群。同时也可以加强DARPA和开发者社区的进一步紧密合作来推动大数据分析的发展。


Disco是一个轻量级的、开源的基于mapreduce模型计算的框架,Disco强大且易于使用,这都要归功于python,Disco分发且复制数据,可高效安排作业。Disco甚至拥有能对数以亿计的数据点进行索引以及实时查询的工具。Disco于2008年在Nokia研究中心诞生,解决了在大量数据处理方面的挑战。

Disco支持大数据集的并行计算,在不可靠的计算机集群中,其模式类似于谷歌创造的计算集群,Disco是一个完美的分析和处理大数据的工具,无需考虑因为分布式带来的技术困难,比如通信协议、负载均衡、锁、作业规划、故障容忍。Disco可用于多种数据挖掘任务:如大规模分析,建立概率模型,全文索引网页等。

Disco的核心是用Erlang编写的,Erlang是一种为构建高容错性分布式应用程序而设计的函数语言。Disco通常使用Python作为常用编程语言,这样可以提高开发效率,用更简洁的语法完成更多复杂算法。 

下面代码完成在一个海量文本中计算词频的任务。


from disco.core import Job, result_iteratordef map(line, params):    for word in line.split():        yield word, 1def reduce(iter, params):    from disco.util import kvgroup    for word, counts in kvgroup(sorted(iter)):        yield word, sum(counts)if __name__ == '__main__':    job = Job().run(input=["http://discoproject.org/media/text/chekhov.txt"],                    map=map,                    reduce=reduce)    for word, count in result_iterator(job.wait(show=True)):        print(word, count)

Disco旨在较大的应用程序轻松集成,比如web服务,那样要求计算的任务可以委托给独立于核心应用程序的集群去执行。Disco提供了一个非常紧凑的Python API——通常只需要两个函数,以及一个rest样式的Web API的工作控制和简单易用的状态监控Web界面。此外,Disco还拥有了一个简单的工作协议,允许作业以任何语言编写,实现协议。

      Disco对LINUX商业服务器集群非常友好,新节点可以通过单击Web界面动态地添加到系统。如果服务器崩溃,能够自动将失败的任务重新分配,这样就没有任何中断。在自动配置机制的帮助下,如全自动安装,甚至是维护大型集群,也只有少量的人工工作。作为一个观念的验证,在帕洛阿尔托的诺基亚研究中心使用Disco这种设置来维护一个800核心集群。


·证明规模数以百计的CPU和成千上万的同步任务

·用于处理数以万计规模为tb的数据集

·简单易用:一个典型的任务由用Python编写的两个函数和两个调用Disco API

·通过实施Disco工作协议,可以任何其他语言指定任务。

·输入数据可以在任何格式,甚至二进制数据,如图像。位于任何源的数据可以通过HTTP得到或分发到本地磁盘

·容错:服务器崩溃不中断工作。能够自动将失败的任务重新分配

·灵活:除了核心的map和reduce函数、组合器功能,配分函数和一个输入阅读器可以由用户提供

·使用标准的Disco模块和Web api轻松集成较大的应用程序

·带有一个内置的分布式存储系统(Disco分布式文件系统)。


数据输入:

disco可分散计算,需要确保数据能被分割,一般来说,将数据放入ddfs文件系统中,该文件系统类似于hdfs,是一个分布式文件系统,能处理好数据的分配和复制。

0 0