我有500个目录,每个目录有1000个文件(每个大约3-4k行)。我想在每个文件上运行相同的clojure程序(已经编写)。我有4个八核服务器。在这些核心之间分配进程的好方法是什么?cascalog(hadoop+clojure)?基本上,程序读取一个文件,使用第三方javajar进行计算,并将结果插入数据库注意:1。必须能够使用第三方库/jar。没有任何形式的查询
sg3maiej1#
onyx是最近hadoop/storm的纯clojure替代品。只要你熟悉clojure,使用onyx就相当简单。您应该尝试一下这种数据驱动的方法:https://github.com/michaeldrogalis/onyx
wn9m85ua2#
因为据我所知,您的整个过程没有“reduce”阶段,所以将125个目录放在每台服务器上,然后用剩下的时间尝试让这个程序更快地处理它们是有意义的。到了饱和db的程度。大多数可用的“大数据”工具(hadoop、storm)都集中在需要非常强大的map和reduce操作的流程上,每个流程可能有多个阶段。你真正需要的只是一个体面的方法来记录哪些工作通过了,哪些没有。在预测开发时间方面,我和任何人一样糟糕(而且比很多人都糟糕),尽管在这种情况下,我认为在map reduce风格的工具上重写进程比添加一个监视进程要花费更长的时间来跟踪哪些作业完成了哪些作业失败了,这样以后就可以重新运行失败的作业(最好是自动运行)。
2条答案
按热度按时间sg3maiej1#
onyx是最近hadoop/storm的纯clojure替代品。只要你熟悉clojure,使用onyx就相当简单。您应该尝试一下这种数据驱动的方法:
https://github.com/michaeldrogalis/onyx
wn9m85ua2#
因为据我所知,您的整个过程没有“reduce”阶段,所以将125个目录放在每台服务器上,然后用剩下的时间尝试让这个程序更快地处理它们是有意义的。到了饱和db的程度。
大多数可用的“大数据”工具(hadoop、storm)都集中在需要非常强大的map和reduce操作的流程上,每个流程可能有多个阶段。你真正需要的只是一个体面的方法来记录哪些工作通过了,哪些没有。在预测开发时间方面,我和任何人一样糟糕(而且比很多人都糟糕),尽管在这种情况下,我认为在map reduce风格的工具上重写进程比添加一个监视进程要花费更长的时间来跟踪哪些作业完成了哪些作业失败了,这样以后就可以重新运行失败的作业(最好是自动运行)。