Java 8 MapReduce for Distributed Computing
当我在Java 8中听说在多个内核上进行处理并最终在单个JVM中返回结果时,这让我感到高兴。不再有多线程代码行。据我所知,这仅适用于单个JVM。parallelStream()
但是,如果我想在单个主机甚至多个主机上的不同 JVM 之间分配处理,该怎么办?Java 8 是否包含任何简化它的抽象?
在 dreamsyssoft.com 的教程中,用户列表
private static List<User> users = Arrays.asList(
new User(1, "Steve", "Vai", 40),
new User(4, "Joe", "Smith", 32),
new User(3, "Steve", "Johnson", 57),
new User(9, "Mike", "Stevens", 18),
new User(10, "George", "Armstrong", 24),
new User(2, "Jim", "Smith", 40),
new User(8, "Chuck", "Schneider", 34),
new User(5, "Jorje", "Gonzales", 22),
new User(6, "Jane", "Michaels", 47),
new User(7, "Kim", "Berlie", 60)
);
经过处理,可以得到他们的平均年龄,如下所示:
double average = users.parallelStream().map(u -> u.age).average().getAsDouble();
在这种情况下,它是在单个主机上处理的。
我的问题是:是否可以使用多个主机进行处理?
例如: 处理以下列表并为五个用户返回:Host1
average1
new User(1, "Steve", "Vai", 40),
new User(4, "Joe", "Smith", 32),
new User(3, "Steve", "Johnson", 57),
new User(9, "Mike", "Stevens", 18),
new User(10, "George", "Armstrong", 24),
同样,处理以下列表并返回其余五个用户:Host2
average2
new User(2, "Jim", "Smith", 40),
new User(8, "Chuck", "Schneider", 34),
new User(5, "Jorje", "Gonzales", 22),
new User(6, "Jane", "Michaels", 47),
new User(7, "Kim", "Berlie", 60)
最后计算最终结果,如下所示:Host3
average = (average1 + average2) / 2
使用分布式架构,它可以像远程处理一样解决。Java 8是否有更简单的方法来解决这个问题,并对其进行一些抽象?
我知道像Hadoop,Akka和Promises这样的框架可以解决这个问题。我说的是纯Java 8。我可以获得多个主机的任何文档和示例吗?parallelStream()