Hadoop是否适合运行模拟? - java

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

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

我担心的是HDFS,它似乎是针对大文件,而不是少量CSV小文件(其中任何一个都不大,甚至不足以构成建议的64MB最小块大小)。此外,每个模拟只需要每个CSV文件的相同副本。

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

参考方案

我在这里看到许多答案,它们基本上是在说:“不,您不应该将Hadoop用于仿真,因为它不是为仿真而构建的。”我认为这是一个短视的观点,类似于1985年有人说过:“您不能使用PC进行文字处理,PC可以用于电子表格!”

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

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

    试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

    JAVA:字节码和二进制有什么区别? - java

    java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…

    java:继承 - java

    有哪些替代继承的方法? java大神给出的解决方案 有效的Java:偏重于继承而不是继承。 (这实际上也来自“四人帮”)。他提出的理由是,如果扩展类未明确设计为继承,则继承会引起很多不正常的副作用。例如,对super.someMethod()的任何调用都可以引导您通过未知代码的意外路径。取而代之的是,持有对本来应该扩展的类的引用,然后委托给它。这是与Eric…

    Java:BigInteger,如何通过OutputStream编写它 - java

    我想将BigInteger写入文件。做这个的最好方式是什么。当然,我想从输入流中读取(使用程序,而不是人工)。我必须使用ObjectOutputStream还是有更好的方法?目的是使用尽可能少的字节。谢谢马丁 参考方案 Java序列化(ObjectOutputStream / ObjectInputStream)是将对象序列化为八位字节序列的一种通用方法。但…

    Java DefaultSslContextFactory密钥库动态更新 - java

    我有一个使用org.restlet.engine.ssl.DefaultSslContextFactory的现有应用程序和一个在服务器启动时加载的密钥库文件。我有另一个应用程序,该应用程序创建必须添加的证书服务器运行时动态地更新到密钥库文件。为此,我在代码中创建了证书和私钥,然后将其写入到目录。该目录由bash脚本监视,该脚本检查是否有新文件,如果出现,它将…