Clojure:使用多台计算机进行并行处理

3
我有500个目录和1000个文件(每个文件大约3-4k行)需要在每个文件上运行相同的Clojure程序(已经编写好)。我有4个八核服务器。有什么好的方法可以将进程分配到这些核心上?Cascalog(Hadoop + Clojure)如何?
基本上,程序读取一个文件,使用第三方Java jar进行计算,并将结果插入数据库。
请注意: 1.必须能够使用第三方库/ jar 2.没有任何查询操作。

到目前为止,我一直在使用“pmap”在一个服务器上逐个处理单个目录。但是要处理500个目录,我需要进行水平扩展。 - Pradnyesh Sawant
1
你考虑过STORM吗? - Shawn Zhang
@shawn-zhang 感谢您的建议,我会查一下的。但是,我从未进行过“大数据”处理,并且不知道除像hadoop这样的最流行选项或像cascalog等基本搜索发现的选项之外还有什么其他选择。 - Pradnyesh Sawant
2个回答

1
因为我理解你的整个过程中没有“减少”阶段,所以将125个目录放在每个服务器上并花费剩余的时间尝试使程序处理它们更快是有意义的。当然,直到你饱和数据库的那一刻。
大多数可用的“大数据”工具(如Hadoop、Storm)都侧重于需要非常强大的映射和减少操作,可能需要多个阶段。对于你的情况,你只需要一个相当不错的方法来跟踪哪些作业通过了,哪些没有。我像任何人一样糟糕(比许多人更糟糕)地预测开发时间,但在这种情况下,我会说重新编写你的过程,在其中一个类似MapReduce的工具上需要的时间会比添加监控过程来跟踪哪些作业已完成、哪些已失败,以便稍后重新运行失败的作业(最好自动化)长得多。

完全是我的想法;只是想得到验证。谢谢 :) - Pradnyesh Sawant

1

Onyx是最近出现的纯Clojure替代Hadoop/Storm的方案。只要您熟悉Clojure,使用Onyx就非常简单。建议尝试这种数据驱动的方法:

https://github.com/MichaelDrogalis/onyx


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接