我最近玩过Hadoop,并对MapReduce作业的日程安排,管理和报告印象深刻。它似乎使新工作的分配和执行非常无缝,使开发人员能够专注于他们的工作实施。
我想知道Java域中是否存在任何不容易表示为MapReduce问题的作业的分布式执行?例如:
需要任务协调和同步的作业。例如,它们可能涉及顺序执行任务,但同时执行某些任务是可行的:
.-- B --.
.--A --| |--.
| '-- C --' |
Start --| |-- Done
| |
'--D -------------'
您要分发的CPU密集型任务但不提供任何减少的输出 - 例如图像转换/调整大小。
那么是否有提供这种分布式计算环境的Java框架/平台?或者这种事情是否可以使用Hadoop接受/实现 - 如果有的话,这些工作有哪些模式/指南?
答案 0 :(得分:3)
此后我发现Spring Batch和Spring Batch Integration似乎解决了我的许多要求。我会告诉你我是怎么过的。
答案 1 :(得分:2)
看看Quartz。我认为它支持远程管理作业和集群多台机器来运行作业等内容。
答案 2 :(得分:0)
我猜您正在为CPU密集型任务寻找工作流引擎(也知道“科学工作流程”,例如http://www.extreme.indiana.edu/swf-survey)。但我不确定你希望它是多么分散。通常所有工作流引擎都有“单点故障”。
答案 3 :(得分:0)
我相信很多问题可以表达为map-reduce问题。
对于无法修改以适应结构的问题,您可以查看使用Java ExecutorService设置自己的问题。但它将仅限于一个JVM,它将是相当低的水平。然而,这将允许容易的协调和同步。
答案 4 :(得分:0)
ProActive Scheduler似乎符合您的要求,尤其是您在任务协调时提到的复杂工作流程。 它是开源的,基于Java的。您可以使用它来运行任何东西,Hadoop作业,脚本,Java代码......
免责声明:我为其背后的company工作
答案 5 :(得分:0)
尝试Redisson框架。它提供了轻松的api来执行和安排java.util.concurrent.Callable
和java.lang.Runnable
任务。以下是有关分布式Executor service和Scheduler service