分布式作业调度,管理和报告

我最近玩过Hadoop ,并对MapReduce作业的调度,管理和报告印象深刻。 它似乎使新工作的分配和执行非常无缝,使开发人员能够专注于他们的工作实施。

我想知道Java域中是否存在任何不容易表示为MapReduce问题的作业的分布式执行? 例如:

  • 需要任务协调和同步的工作。 例如,它们可能涉及顺序执行任务,但同时执行某些任务是可行的:

    .-- B --. .--A --| |--. | '-- C --' | Start --| |-- Done | | '--D -------------' 
  • 您希望分发但不提供任何输出以减少的CPU密集型任务 – 例如,图像转换/resize。

那么是否有一个提供这种分布式计算环境的Java框架/平台? 或者这种事情是否可以使用Hadoop接受/可实现 – 如果有的话,这些工作的模式/指南是什么?

我发现Spring Batch和Spring Batch Integration似乎满足了我的许多要求。 我会告诉你我是怎么过的。

看看Quartz吧 。 我认为它支持远程管理作业和集群多台机器来运行作业等内容。

我猜你正在为CPU密集型任务寻找工作流引擎(也知道“科学工作流程”,例如http://www.extreme.indiana.edu/swf-survey )。 但我不确定你希望它是多么分散。 通常所有工作流引擎都有“单点故障”。

我相信很多问题可以表达为map-reduce问题。

对于无法修改以适应结构的问题,您可以使用Java的ExecutorService来设置自己的问题。 但它将仅限于一个JVM,它将是相当低的水平。 然而,它将允许容易的协调和同步。

ProActive Scheduler似乎符合您的要求,尤其是您通过任务协调提到的复杂工作流程。 它是开源的,基于Java的。 您可以使用它来运行任何东西,Hadoop作业,脚本,Java代码,……

免责声明:我为其背后的公司工作

尝试Redisson框架。 它提供了简单的api来执行和调度java.util.concurrent.Callablejava.lang.Runnable任务。 以下是有关分布式Executor服务和Scheduler服务的文档