开始使用海量数据

时间:2010-05-30 04:04:29

标签: hadoop mapreduce nosql large-data-volumes

我是一名数学家,偶尔会做一些统计/机器学习分析咨询项目。我可以访问的数据通常在较小的一侧,最多几百兆字节(几乎总是远远少于),但我想学习更多关于处理和分析千兆字节/太字节数据的数据。我需要知道什么,有什么好的资源可供学习?

  1. Hadoop / MapReduce是一个明显的开始。
  2. 我应该选择一种特定的编程语言吗? (我现在主要使用Python,Ruby,R,偶尔使用Java,但似乎C和Clojure经常用于大规模数据分析?)
  3. 我并不熟悉整个NoSQL运动,只不过它与大数据有关。什么是学习它的好地方,是否有特定的实现(Cassandra,CouchDB等)我应该熟悉?
  4. 在哪里可以了解如何将机器学习算法应用于大量数据?我的数学背景主要是在理论方面,绝对不是在数值或近似方面,我猜大多数标准ML算法都没有真正扩展。
  5. 关于要学习的东西的任何其他建议都会很棒!

3 个答案:

答案 0 :(得分:2)

  1. Apache Hadoop确实是一个好的开始,因为它是免费的,拥有庞大的社区,并且易于设置。
  2. Hadoop是用Java构建的,所以这可以是首选语言。但是也可以使用带有Hadoop的ohter语言(“管道”和“流”)。我知道,例如,经常使用Python。
  3. 如果您愿意,可以避免将数据存储在数据库中。最初,Hadoop使用(分布式)文件系统上的数据。但正如您已经知道的那样,Hadoop可以使用分布式数据库。
  4. 您有没看过Mahout?我认为这对你来说很受欢迎;-)你需要的很多工作,可能已经完成了!?
  5. 阅读Quick Start and set up您自己的(伪分布式?)群集并运行word-count example
  6. 如果您有任何问题,请告诉我:-)评论会在这个问题上提醒我。

答案 1 :(得分:0)

我已经完成了一些大规模的机器学习(3-5GB数据集),所以这里有一些见解:

首先,存在大规模的物流问题。你可以将所有数据加载到内存中吗?使用Java和64位JVM,您可以访问尽可能多的RAM:例如,命令行参数-Xmx8192M将允许您访问8GB(如果您有这么多)。作为Java应用程序的Matlab也可以从中受益并使用相当大的数据集。

更重要的是,您对数据运行的算法。有可能标准实现会期望内存中的所有数据。您可能必须自己实现工作集方法,在此处将数据交换进入磁盘,并且一次只处理一部分数据。这些有时被称为 chunking batch 甚至 incremental 算法,具体取决于上下文。

你怀疑很多算法实际上没有扩展,所以你可能不得不寻求一个近似的解决方案。好消息是,对于几乎所有算法,您都可以找到处理近似和/或讨论大规模解决方案的研究论文。坏消息是你很可能不得不自己实施这些方法。

答案 2 :(得分:0)

Hadoop非常棒,但设置起来可能很麻烦。这是迄今为止我读过的有关Hadoop设置的最佳文章。我强烈推荐它: http://www.michael-noll.com/wiki/Running_Hadoop_On_Ubuntu_Linux_%28Single-Node_Cluster%29

Clojure建立在Java之上,所以它不可能比Java更快。但是,它是少数几种能够很好地共享内存的语言之一,可能有用也可能没用。我不是一个数学家,但似乎大多数数学计算是非常可并行化的,几乎不需要线程共享内存。无论哪种方式,您可能需要查看Incanter,这是Clojure的统计计算库,以及clojure-hadoop,这使得编写Hadoop作业的难度大大减轻。

在语言方面,我发现性能差异最终成为不变因素。只需找到您喜欢的语言并专注于改进算法就好了。然而,根据一些枪战cited by Peter Norvig(向下滚动到五颜六色的桌子,你可能想要回避Python和Perl,因为他们对阵列的困惑。

简而言之,NoSQL非常适合非结构化/任意结构化数据,而SQL / RDBMS对于结构化数据来说非常好(或至少可以容忍)。在RDBMS中更改/添加字段是很昂贵的,所以如果这种情况发生很多,你可能会想要避开它们。

然而,在你的情况下,似乎你将批量处理大量数据,然后回到答案,而不是有数据,你会定期提问?您可以在Hadoop中处理CSV /文本文件。除非您需要一种高效的方式来动态访问有关数据的任意信息,否则我不确定SQL或NoSQL是否有用。