JAVA在一台机器上进行分布式处理(我知道这很讽刺)

JAVA在一台机器上进行分布式处理(我知道这很讽刺),java,mapreduce,rmi,distributed-computing,Java,Mapreduce,Rmi,Distributed Computing,我正在创建一个(半)大数据分析应用程序。我正在使用apache mahout。我担心的是,对于java,我的内存限制为4gb。这种4gb限制似乎有点浪费了现代计算机所拥有的内存。作为解决方案,我正在考虑使用RMI或某种形式的MapReduce。(到目前为止,我还没有这两方面的经验) 首先:让多个JVM在一台机器上运行并让它们对话是否合理?如果是这样的话,我是否正朝着上述两个想法的正确方向前进 此外, 为了让这成为一个客观的问题,我将避免问“哪个更好”,而是会问: 1) 关键的区别是什么(不一定是

我正在创建一个(半)大数据分析应用程序。我正在使用apache mahout。我担心的是,对于java,我的内存限制为4gb。这种4gb限制似乎有点浪费了现代计算机所拥有的内存。作为解决方案,我正在考虑使用RMI或某种形式的MapReduce。(到目前为止,我还没有这两方面的经验)

首先:让多个JVM在一台机器上运行并让它们对话是否合理?如果是这样的话,我是否正朝着上述两个想法的正确方向前进

此外,

为了让这成为一个客观的问题,我将避免问“哪个更好”,而是会问:

1) 关键的区别是什么(不一定是在内部如何工作,而是在我这个用户将如何实现它们)

2) 其中一种方法是否存在缺点或优点,是否存在使用其中一种方法的特定情况

3) 有没有其他更符合我需求的替代方案


提前感谢

首先,重新设置4GB限制,请退出。在32位系统上,4GB是最大值,但在64位系统上,限制要高得多

在同一台机器上运行和通信多个jvm是一种常见的配置。IBM Websphere和Oracle的Weblogic应用服务器就是两个很好的例子。它们在一个jvm中运行管理控制台,在它的控制下有三个或更多“工作”jvm并不罕见

这允许每个JVM独立地失败,而不会影响整个系统的反应性。恢复对最终用户来说是透明的,因为一些“正在工作”的jvm仍然在做他们的事情,而支持团队正疯狂地试图修复这些事情

您提到了RMI和MapReduce,但其方式意味着它们在体系结构(通信)中填充了相同的插槽。我认为有必要指出,它们占用不同的时间段——RMI是一种通信机制,而MapReduce是一种工作负载管理策略。MapReduce环境作为一个整体,通常取决于是否有(任何)通信机制,而不是通信机制本身

对于通信层,您可以选择RMI、Web服务、裸套接字、MQ、共享文件和臭名昭著的“运动鞋网络”。在很大程度上,我建议避开RMI,因为它相对脆弱。只要没有意外发生,它就可以工作,但在繁忙的生产环境中,它可能在意外的时候带来挑战。尽管如此,围绕RMI构建了许多稳定且性能良好的大型系统

本周,全球跨层通信的发展方向是在类似spring集成或fuse的基础上实现SOA。SOA将通信机制从等式中抽象出来,允许您动态地(或多或少地)连接事物

MapReduce(MR)是一种组织批处理工作的方法。MR算法本身本质上是将输入数据转换成一组输入映射,然后将其减少到生成输出所需的最小数量。MR环境通常由工作负载管理器管理,该管理器接收作业,并将作业中的工作分配给遍布网络的“工蜂”。通信机制可由MR库或其运行的容器定义


这有用吗?

是的,非常有用!4GB是由于32位字大小造成的。这根本不是“使用Java”的问题。