在非分片架构上做map/reduce有意义吗?
或者,换句话说,在单个服务器上执行是否有效。
总的来说,我不同意普拉文的观点。
是的,我同意在单个系统上运行时将失去平台的容错属性。然而,在许多情况下,平台具有用于特定目的的有用属性。
在很多情况下,使用Hadoop工具包比不使用Hadoop更有优势。
- 您不需要担心输入文件的大小。如果您的输入数据是许多gb,那么您仍然可以在只有512mb系统RAM可用的系统上运行它。 使用该平台,您可以使数据处理应用程序多线程运行,而无需深入创建线程。您只需将应用程序部署到平台的另一个实例上。
- 您可以在多个系统上进行扩展。当你的应用程序达到这个水平,那么迈向真正的水平可伸缩性的一步是非常简单的。
当你用Hadoop编写了你的处理应用程序时,你有几个选择来运行它:
- 使用本地文件系统的单个机器上的单线程。通过这种方式,它只是一个将输入转换为输出的命令行Java应用程序。
- 仅在使用本地文件系统的单个机器上安装jobtracker/tasktracker。有关更多信息,请参阅这个stackoverflow问题:是否有可能在没有HDFS的情况下以伪分布式操作运行Hadoop ?
- 在单个系统上完全打开(伪分布式模式)。
- 完整的多系统设置
说到MapReduce,我想你指的是Hadoop。还有其他支持MapReduce范式的语言和框架。以下是我对Hadoop的看法。
单个服务器上的Hadoop适合于测试目的(独立和伪分布式模式)。
当Hadoop在单个服务器上运行时,像容错这样的固有特性就会丢失,因为如果服务器宕机,那么与服务器相关的所有数据都会丢失。此外,当数据量小,计算量少时,Hadoop与实际处理相比有很多开销。
当选择单服务器时,最好不要选择Hadoop(它是为分布式计算设计的)。