我有 500 个目录,每个目录有 1000 个文件(每个大约 3-4k 行)。我想在每个文件上运行相同的 clojure 程序(已经编写)。我有 4 个八核服务器。在这些核心之间分配进程的好方法是什么?cascalog(hadoop + clojure)?
基本上,程序读取文件,使用第 3 方 Java jar 进行计算,并将结果插入数据库
请注意: 1. 必须能够使用 3rd 方库/jar 2. 没有任何类型的查询
我有 500 个目录,每个目录有 1000 个文件(每个大约 3-4k 行)。我想在每个文件上运行相同的 clojure 程序(已经编写)。我有 4 个八核服务器。在这些核心之间分配进程的好方法是什么?cascalog(hadoop + clojure)?
基本上,程序读取文件,使用第 3 方 Java jar 进行计算,并将结果插入数据库
请注意: 1. 必须能够使用 3rd 方库/jar 2. 没有任何类型的查询
Onyx 是 Hadoop/Storm 最近的纯 Clojure 替代品。只要您熟悉 Clojure,使用 Onyx 就非常简单。您应该尝试这种数据驱动的方法:
因为据我所知,您的整个过程没有“减少”阶段,所以将 125 个目录放在每台服务器上,然后花剩下的时间尝试让这个程序更快地处理它们是有意义的。当然,直到您使数据库饱和为止。
大多数可用的“大数据”工具(Hadoop、Storm)专注于需要非常强大的 map 和 reduce 操作的流程,每个流程可能有多个阶段。您真正需要的只是一种体面的方法来跟踪哪些工作通过了,哪些没有通过。在预测开发时间方面,我和任何人一样糟糕(而且比许多人更糟糕),但在这种情况下,我会说在 map-reduce-esque 工具之一上重写您的流程将比添加更长时间一个监控过程,以跟踪哪些作业已完成,哪些作业失败,以便您以后可以重新运行失败的作业(最好是自动运行)。