我打算编写一个批处理分布式计算系统,它将使用大约 10-20 台计算机。系统某些部分的数据流约为 50GB,而在其他部分则要小得多,约为 1GB。
我正在考虑使用 Hadoop。可扩展性并不重要,但我真的很喜欢 Hadoop 框架提供的容错和推测运行功能。像MPI或gearman这样的框架似乎没有提供这样的机制,我将不得不自己实现它们。
但是,我有一些疑问,因为它似乎针对更大的数据量和可能更多的计算机进行了优化。例如,Hadoop the Definitive Guide 一书明确提到:
高性能计算 (HPC) 和网格计算社区多年来一直在使用诸如消息传递接口 (MPI) 之类的 API 进行大规模数据处理。从广义上讲,HPC 中的方法是将工作分布在一组机器上,这些机器访问一个由 SAN 托管的共享文件系统。这适用于主要计算密集型作业,但当节点需要访问更大的数据量(数百 GB,MapReduce 真正开始发光的点)时就会成为问题,因为网络带宽是瓶颈并且计算节点变得空闲.
我的问题是:
- 当使用相对少量的数据和/或计算机时,Hadoop 是否有相当大的开销?
- 是否有另一个框架以任何接近 Hadoop 的方式提供容错处理?