在Java中编写了一个随机模拟,它从磁盘上的几个CSV文件加载数据(总计大约100MB),并将结果写入另一个输出文件(没有太多数据,只是一个布尔值和几个数字)。还有一个参数文件,对于不同的参数,预计模拟输出的分布会发生变化。要确定正确/最佳输入参数,我需要在多个输入参数配置中运行多个模拟,并查看每个组中输出的分布。每次模拟需要0.1-10分钟,具体取决于参数和随机性。
我一直在阅读有关Hadoop的内容,并想知道它是否可以帮助我运行大量模拟;我可能在不久的将来可以访问大约8台联网桌面计算机。如果我理解正确,map函数可以运行我的模拟并吐出结果,而reducer可能是标识。
我担心的是HDFS,它似乎意味着巨大的文件,而不是一些小的CSV文件(没有一个足够大,甚至可以构成64MB的最小建议块大小)。此外,每个模拟只需要每个CSV文件的相同副本。
Hadoop对我来说是错误的工具吗?
答案 0 :(得分:21)
我在这里看到一些答案基本上都在说,“不,你不应该使用Hadoop进行模拟,因为它不是为模拟而构建的。”我相信这是一个相当短视的观点,就像1985年的某个人说的那样,“你不能使用PC进行文字处理,PC也可以用于电子表格!”
Hadoop是构建模拟引擎的绝佳框架。几个月以来,我一直在将它用于此目的,并且在小数据/大型计算问题上取得了巨大成功。以下是我迁移到Hadoop进行模拟的前5个原因(使用R作为我的语言进行模拟,顺便说一句):
答案 1 :(得分:3)
如果您已经拥有Hadoop集群,可以使Hadoop执行您的模拟,但它不是您所描述的应用程序类型的最佳工具。 Hadoop旨在使大数据处理成为可能,并且您没有大数据 - 您的计算量很大。
我喜欢Gearman(http://gearman.org/)这类事情。
答案 2 :(得分:2)
虽然您可以通过将MapReduce与Hadoop结合使用,但您所做的似乎更适合网格/作业调度程序,例如Condor或Sun Grid Engine。 Hadoop更适合做一些事情,你只需要输入一个(非常大的)输入,将其拆分成块供你的工作机器处理,然后减少它以产生输出。
答案 3 :(得分:0)
由于您已经在使用Java,我建议您查看GridGain,我认为它特别适合您的问题。
答案 4 :(得分:0)
简单地说,虽然Hadoop可以在这里解决您的问题,但它不适合您的目的。