hat*_*rix 5 python concurrency multithreading hadoop r
我想开始考虑如何扩展我为数据分析编写的算法,以便它们可以应用于任意大的数据集.我想知道有什么相关概念(线程,并发,不可变数据结构,递归)和工具(Hadoop/MapReduce,Terracota和Eucalyptus)才能实现这一点,以及这些概念和工具如何相互关联.我有R,Python和bash脚本以及C和Fortran编程的基本背景,尽管我也熟悉一些基本的函数编程概念.我是否需要改变我编程的方式,使用不同的语言(Clojure,Haskell等),或者简单地(或者不那么简单!)适应R/Hadoop(HRIPE)......或者为Python编写包装器启用多线程或Hadoop访问?我理解这可能涉及对额外硬件的要求,我想了解可能的要求/选项的基本概念.我为这个相当大而模糊的问题道歉,但只是想开始 - 提前感谢!
虽然语言和相关技术/框架对于扩展很重要,但与算法,数据结构和体系结构的重要性相比,它们往往显得苍白无力.忘记线程:您可以通过这种方式利用的核心数量太多 - 您希望单独的进程交换消息,因此您可以至少扩展到快速LAN上的小型服务器集群(理想情况下也可以扩展到大型集群) ! - ).
关系数据库可能是"技术苍白"的例外 - 当你试图扩大几个数量级时,它们可以真正阻止你.这是你的情况 - 你是担心几十个或几百个服务器,还是你开始考虑成千上万或万亿?在前一种情况下,您仍然可以扩展关系技术(例如通过水平和垂直分片)来支持您 - 在后者中,您处于突破点或远远超过它,并且必须开始考虑关键/超值商店.
回到算法 - "数据分析"涉及范围很广......过去几年我在Google的大部分工作都属于这个范围,例如集群管理软件,目前还有商业智能.您是否需要确定性分析(例如,出于会计目的,您不可能忽略8位数字中的一分钱),或者您是否能够站在一些非确定性的分析中?大多数"数据挖掘"应用程序都属于第二类 - 您不需要总精度和确定性,只需要对结果可以证明的范围进行良好估计,例如95%的概率.
如果您需要进行"近实时"数据分析,这一点尤其重要 - 近乎实时且对同一计算的100%精度约束并不是一个快乐的露营者.但即使在批量/批量离线数据挖掘中,如果您能够提供95%保证的结果比99.99%更快的结果(我不知道数据挖掘是否可以是 100.00%! - ) ,这可能是一个很好的权衡.
我过去几年一直在做的工作对"近实时"有一些要求,对离线,"批量"分析有更多要求 - 只有极少数情况下绝对精度是绝对必须.逐步精炼的采样(当不需要完全保证精度时),尤其是分层采样(与领域专家密切合作!!!),已经一次又一次地证明是一种很好的方法; 如果您不理解这个术语,并且仍然想要扩展,超过TB级,达到exabytes和PB级的处理,那么你急需在Stats 201中进行一个很好的进修课程,或者你需要的任何课程都包含这些概念.森林(或iTunes大学,或大学频道的YouTube产品,或blip.tv,或其他).
Python,R,C++,无论如何,只有在你掌握了这些算法问题,与它们一起出现的架构问题之后才能发挥作用(你能否设计一个计算架构,以"在统计上生存"来自你的几台服务器的死亡)无数,恢复到统计上显着的准确性,没有大量的返工......?),以及支持设计和存储技术选择.