扩展算法所需的概念和工具

时间:2010-03-10 06:21:51

标签: python multithreading r concurrency hadoop

我想开始考虑如何扩展我为数据分析编写的算法,以便它们可以应用于任意大的数据集。我想知道有什么相关概念(线程,并发,不可变数据结构,递归)和工具(Hadoop / MapReduce,Terracota和Eucalyptus)才能实现这一点,以及这些概念和工具如何相互关联。我有R,Python和bash脚本以及C和Fortran编程的基本背景,尽管我也熟悉一些基本的函数编程概念。我是否需要改变我编程的方式,使用不同的语言(Clojure,Haskell等),或者简单地(或者不那么简单!)适应类似R / Hadoop(HRIPE)的东西......或者为Python编写包装器启用多线程或Hadoop访问?我理解这可能涉及对额外硬件的要求,我想了解可能的要求/选项的基本概念。我为这个相当大而模糊的问题道歉,但只是想开始 - 提前感谢!

2 个答案:

答案 0 :(得分:9)

虽然语言和相关技术/框架对于扩展很重要,但与算法,数据结构和体系结构的重要性相比,它们往往显得苍白无力。忘记线程:这种方式可以利用的核心数量太多了 - 您希望单独的进程交换消息,因此您可以至少扩展到快速LAN上的小型服务器集群(理想情况下, large 集群! - )。

关系数据库可能是“技术苍白”的一个例外 - 当你试图扩大几个数量级时,它们可以真正阻止你。这是你的情况 - 你是担心几十个或几百个服务器,还是你开始考虑成千上万或万亿?在前一种情况下,您仍然可以扩展关系技术(例如通过水平和垂直分片)来支持您 - 在后者中,您处于突破点,或者远远超过它,必须开始考虑关键/价值商店。

回到算法 - “数据分析”涉及范围很广......过去几年我在Google的大部分工作都属于这个范围,例如:在集群管理软件中,目前在商业智能中。您是否需要确定性分析(例如,出于会计目的,您不可能忽略8位数字中的一分钱),或者您是否可以站在某些 - 决定?大多数“数据挖掘”应用程序属于第二类 - 您不需要总精度和确定性,只需要对结果可以证明的范围进行良好估计,例如95%的可能性。

如果您需要进行“近实时”数据分析,这一点尤为重要 - 对同一计算的近实时和100%精度约束一个快乐的露营者使。但即使在批量/批量离线数据挖掘中,如果您能够提供95%保证的结果,比99.99%的结果要快几个数量级(我不知道数据挖掘是否可以 100.00%! - ),这可能是一个很好的权衡。

过去几年我一直在做的工作对“近乎实时”有一些要求,对离线,“批量”分析有更多要求 - 而且只有极少数情况下绝对准确是绝对必须的。逐步精炼的采样(当不需要完全保证准确性时),尤其是分层采样(与领域专家密切合作!!!),已经一次又一次地证明是一种很好的方法;如果您不理解这个术语,并且仍然想要扩展,超过TB级,达到exabytes和PB级的处理,那么你急需在Stats 201中进行一个很好的进修课程,或者你需要的任何课程都包含这些概念。森林(或iTunes大学,或大学频道的YouTube产品,或blip.tv,或其他)。

Python,R,C ++,无论如何,只有在之后你才能掌握这些算法问题,与它们一起出现的架构问题(你能否设计一个“统计上存活”的计算架构)几台服务器的死亡无数,在没有大量返工的情况下恢复到统计上显着的准确性......?),以及支持设计和存储技术的选择。

答案 1 :(得分:3)

扩展到大数据的主要方法是避免一次将大量数据集读入内存的情况。在pythonic术语中,这通常意味着使用迭代器来使用可管理的数据集。