我不确定Java 8会发生什么,因为它还为时过早,但是有一些开源项目将JVM中运行的早期函数编程语言的地图缩减功能扩展到分布式计算环境。
最近,我采用了传统但非平凡的Hadoop map reduce工作(它接受原始性能数据并准备加载到OLAP多维数据集中)并在Cascalog上运行的Clojure和Spark上运行的Scala中重写。我在一个名为的博客中记录了我的发现 分布式计算和功能编程 。
这些开源项目已经成熟并准备好迎接黄金时段。他们得到了Cloudera和Hortonworks的支持。
这里是 功能列表 计划于2013年9月发布Java 8。
如您所见,没有专门用于在群集上标准化分布式计算的功能。你最接近的是 JEP 107 ,它建立在JDK 7中的Fork / Join框架上,以利用多核CPU。在Java 8中,您将能够使用lambda表达式通过在多个处理器之间划分任务来并行地对集合执行批量操作。
Java 8也计划使用 JEP 103 ,它还将构建在Java 7 Fork / Join上以并行排序数组。同时,由于Fork / Join显然是一个大问题,因此它会进一步发展 JEP 155 。
因此,群集上的分布式计算没有核心Java 8抽象 - 仅在多个核心上。您需要使用现有设施为真正的分布式计算设计自己的解决方案。
尽管可能令人失望,但我会指出,仍有很多开源的第三方抽象优于Hadoop,就像那样 Cascalog 和 Apache Spark 。 Spark特别允许您通过分布式方式对数据执行操作 RDD 抽象,这让你觉得你的数据只是一个奇特的数组。
但是你必须在核心Java中等待这些事情。
不要指望核心语言中有这样的功能,因为它需要某种服务器来运行和管理不同的进程。从历史上看,我不知道属于java核心的类似解决方案。
但是,有些解决方案与您想要的解决方案类似。 其中一个是级联 http://www.cascading.org/ ,这是一个编写地图缩减程序的功能样式基础结构。 意思是 - 相对轻量级的实际代码(与传统的map reduce程序不同)但它确实需要维护hadoop基础结构。
文档/规范中没有任何内容表明会有这样的功能。但是,如果我们考虑一下RMI是用于分发的Java解决方案并且它非常简单,您可以将其用作分发的基础,并且在节点上使用核心并行性,如图所示。