16

用 Java 编写了一个随机模拟,它从磁盘上的几个 CSV 文件(总共约 100MB)加载数据并将结果写入另一个输出文件(数据不多,只是一个布尔值和几个数字)。还有一个参数文件,对于不同的参数,模拟输出的分布预计会发生变化。为了确定正确/最佳的输入参数,我需要跨多个输入参数配置运行多个模拟,并查看每组中输出的分布。每个模拟需要 0.1-10 分钟,具体取决于参数和随机性。

我一直在阅读有关 Hadoop 的文章,想知道它是否可以帮助我运行大量模拟;在不久的将来,我可能可以访问大约 8 台联网的台式机。如果我理解正确,map 函数可以运行我的模拟并吐出结果,reducer 可能就是身份。

我担心的是 HDFS,它似乎适用于大文件,而不是一小部分 CSV 文件(没有一个大到足以构成 64MB 的最小推荐块大小)。此外,每个模拟只需要每个 CSV 文件的相同副本。

Hadoop 对我来说是错误的工具吗?

4

5 回答 5

21

我在这里看到许多答案基本上是在说,“不,你不应该使用 Hadoop 进行模拟,因为它不是为模拟而构建的。” 我相信这是一个相当短视的观点,就像有人在 1985 年所说的那样,“你不能用 PC 来处理文字,PC 是用来做电子表格的!”

Hadoop 是构建模拟引擎的绝佳框架。我已经为此目的使用了几个月,并且在处理小数据/大计算问题方面取得了巨大成功。以下是我迁移到 Hadoop 进行模拟的 5 大原因(顺便说一句,使用 R 作为我的模拟语言):

  1. 访问:我可以通过 Amazon Elastic Map Reduce 租用 Hadoop 集群,而且我无需在集群管理上投入任何时间和精力。这意味着我实际上可以开始在分布式框架上进行模拟,而无需在我的组织中获得行政批准!
  2. 管理: Hadoop 以无形的方式处理作业控制问题,例如节点故障。我不必为这些条件编写代码。如果一个节点发生故障,Hadoop 会确保为该节点安排的模拟程序在另一个节点上运行。
  3. 可升级:作为一个相当通用的 map reduce 引擎,具有出色的分布式文件系统,如果您以后遇到涉及大数据的问题,如果您习惯使用 Hadoop,则不必迁移到新的解决方案。因此,Hadoop 为您提供了一个模拟平台,该平台还可以(几乎)免费扩展到大型数据平台!
  4. 支持:作为开源并被众多公司使用,Hadoop 的在线和离线资源数量众多。许多这些资源都是在“大数据”的假设下编写的,但它们对于学习以 map reduce 方式思考仍然很有用。
  5. 可移植性:我使用专有工具在专有引擎之上构建了分析,这些工具需要大量学习才能开始工作。当我后来换工作并发现自己在一家没有相同专有堆栈的公司时,我不得不学习一套新工具和一个新的模拟堆栈。再也不。我用 SAS 换了 R,用我们的旧网格框架换了 Hadoop。两者都是开源的,我知道我可以在未来找到任何工作,并且立即拥有触手可及的工具来开始踢屁股。
于 2010-07-12T18:44:49.623 回答
3

如果您已经有一个 Hadoop 集群,则可以让 Hadoop 执行您的模拟,但它不是您所描述的那种应用程序的最佳工具。Hadoop 旨在使处理大数据成为可能,而你没有大数据——你有大计算量。

我喜欢 Gearman ( http://gearman.org/ ) 的这种东西。

于 2009-10-20T13:15:24.407 回答
2

虽然您可能能够通过将 MapReduce 与 Hadoop 一起使用,但您所做的似乎更适合网格/作业调度程序,例如CondorSun Grid Engine。Hadoop 更适合做这样的事情:您获取单个(非常大的)输入,将其分成块供您的工作机器处理,然后将其减少以产生输出。

于 2009-10-19T17:04:12.690 回答
0

简而言之,虽然 Hadoop 可以解决您的问题,但它不是适合您的工具。

于 2009-10-21T06:32:10.410 回答
0

由于您已经在使用 Java,我建议您看一下GridGain,我认为它特别适合您的问题。

于 2009-10-20T06:30:06.097 回答